diff options
author | Richard Trieu <rtrieu@google.com> | 2014-04-15 00:57:50 +0000 |
---|---|---|
committer | Richard Trieu <rtrieu@google.com> | 2014-04-15 00:57:50 +0000 |
commit | e9fa266cbad6ac10eb8f7778dd6ddb55ee07491d (patch) | |
tree | 53b371264d9ce63a339d1f5db61080924f1e77e3 /clang/lib/Sema/AnalysisBasedWarnings.cpp | |
parent | 81ab90f7ed3c7420fca87c7339c823f136dcc4e5 (diff) | |
download | llvm-e9fa266cbad6ac10eb8f7778dd6ddb55ee07491d.zip llvm-e9fa266cbad6ac10eb8f7778dd6ddb55ee07491d.tar.gz llvm-e9fa266cbad6ac10eb8f7778dd6ddb55ee07491d.tar.bz2 |
Fix a bad interaction between -Wtautological-overlap-compare and delayed
diagnostics which caused delayed diagnostics on dead paths to be emitted.
llvm-svn: 206232
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
-rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 32bdef6..fc591bd 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -1838,12 +1838,12 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, .setAlwaysAdd(Stmt::AttributedStmtClass); } + // Install the logical handler for -Wtautological-overlap-compare + std::unique_ptr<LogicalErrorHandler> LEH; if (Diags.getDiagnosticLevel(diag::warn_tautological_overlap_comparison, D->getLocStart())) { - LogicalErrorHandler LEH(S); - AC.getCFGBuildOptions().Observer = &LEH; - AC.getCFG(); - AC.getCFGBuildOptions().Observer = 0; + LEH.reset(new LogicalErrorHandler(S)); + AC.getCFGBuildOptions().Observer = LEH.get(); } // Emit delayed diagnostics. @@ -1991,6 +1991,13 @@ AnalysisBasedWarnings::IssueWarnings(sema::AnalysisBasedWarnings::Policy P, } } + // If none of the previous checks caused a CFG build, trigger one here + // for -Wtautological-overlap-compare + if (Diags.getDiagnosticLevel(diag::warn_tautological_overlap_comparison, + D->getLocStart())) { + AC.getCFG(); + } + // Collect statistics about the CFG if it was built. if (S.CollectStats && AC.isCFGBuilt()) { ++NumFunctionsAnalyzed; |