diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2011-04-05 18:18:08 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2011-04-05 18:18:08 +0000 |
commit | 64fb959beb3a0ecb84a58e6ff82660a7a669f7b8 (patch) | |
tree | 7531e3f92683422ce2571a4da0e756e3d375c4c1 /lib/Sema/AnalysisBasedWarnings.cpp | |
parent | 4c4983bbd2904670a25c840b07600f14efbafd7f (diff) |
Separate the logic for issuing the initialization fixit hint from the
diagnostic emission. The fixit hint, when suggested, typically has
nothing to do with the nature or form of the reference.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@128899 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r-- | lib/Sema/AnalysisBasedWarnings.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index bd5416f5f7..a649ff067e 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -411,8 +411,7 @@ public: } static void DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, - const Expr *E, bool &fixitIssued, - bool isAlwaysUninit) { + const Expr *E, bool isAlwaysUninit) { bool isSelfInit = false; if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) { @@ -465,6 +464,10 @@ static void DiagnoseUninitializedUse(Sema &S, const VarDecl *VD, S.Diag(VD->getLocStart(), diag::note_uninit_var_def) << VD->getDeclName(); +} + +static void SuggestInitializationFixit(Sema &S, const VarDecl *VD, + bool &fixitIssued) { // Only report the fixit once. if (fixitIssued) return; @@ -552,9 +555,12 @@ public: // a stable ordering. std::sort(vec->begin(), vec->end(), SLocSort()); - for (UsesVec::iterator vi = vec->begin(), ve = vec->end(); vi != ve; ++vi) - DiagnoseUninitializedUse(S, vd, vi->first, fixitIssued, + for (UsesVec::iterator vi = vec->begin(), ve = vec->end(); vi != ve; + ++vi) { + DiagnoseUninitializedUse(S, vd, vi->first, /*isAlwaysUninit=*/vi->second); + SuggestInitializationFixit(S, vd, fixitIssued); + } delete vec; } |