diff options
| author | John McCall <rjmccall@apple.com> | 2010-05-16 09:34:11 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-05-16 09:34:11 +0000 |
| commit | 5c6ec8c797bb660521b098162959bd6f92ba78da (patch) | |
| tree | 9da1935175235973c82a661c2258acde9af81a11 /clang/lib/Sema/AnalysisBasedWarnings.cpp | |
| parent | e299ba66f5f8e270f7a0f2f44f90e72ad67ad8a3 (diff) | |
| download | bcm5719-llvm-5c6ec8c797bb660521b098162959bd6f92ba78da.tar.gz bcm5719-llvm-5c6ec8c797bb660521b098162959bd6f92ba78da.zip | |
Don't emit any fallthrough / missing-noreturn warnings if we can't
compute a CFG for a function.
llvm-svn: 103905
Diffstat (limited to 'clang/lib/Sema/AnalysisBasedWarnings.cpp')
| -rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 6ded0a34601..21dd40b32ee 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -54,8 +54,13 @@ static void CheckUnreachable(Sema &S, AnalysisContext &AC) { // Check for missing return value. //===----------------------------------------------------------------------===// -enum ControlFlowKind { NeverFallThrough = 0, MaybeFallThrough = 1, - AlwaysFallThrough = 2, NeverFallThroughOrReturn = 3 }; +enum ControlFlowKind { + UnknownFallThrough, + NeverFallThrough, + MaybeFallThrough, + AlwaysFallThrough, + NeverFallThroughOrReturn +}; /// CheckFallThrough - Check that we don't fall off the end of a /// Statement that should return a value. @@ -68,9 +73,7 @@ enum ControlFlowKind { NeverFallThrough = 0, MaybeFallThrough = 1, /// will return. static ControlFlowKind CheckFallThrough(AnalysisContext &AC) { CFG *cfg = AC.getCFG(); - if (cfg == 0) - // FIXME: This should be NeverFallThrough - return NeverFallThroughOrReturn; + if (cfg == 0) return UnknownFallThrough; // The CFG leaves in dead things, and we don't want the dead code paths to // confuse us, so we mark all live things first. @@ -290,6 +293,9 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body, // FIXME: Function try block if (const CompoundStmt *Compound = dyn_cast<CompoundStmt>(Body)) { switch (CheckFallThrough(AC)) { + case UnknownFallThrough: + break; + case MaybeFallThrough: if (HasNoReturn) S.Diag(Compound->getRBracLoc(), |

