]> granicus.if.org Git - clang/commitdiff
Avoid snowballing errors into additional warnings. To do better, we'd
authorMike Stump <mrs@apple.com>
Thu, 14 Jan 2010 02:26:52 +0000 (02:26 +0000)
committerMike Stump <mrs@apple.com>
Thu, 14 Jan 2010 02:26:52 +0000 (02:26 +0000)
need an error term for the CFG.  I suspect we'll always have to cope
with getCFG returning 0, though, I'd love to see even that possibility
removed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93411 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDecl.cpp

index 948418b42a64716778dac6be320c64b4303a8a87..40c3e754ad98bb7eee0fe94106881a0f05ac78d8 100644 (file)
@@ -1329,11 +1329,14 @@ static void MarkLive(CFGBlock *e, llvm::BitVector &live) {
 
 /// CheckUnreachable - Check for unreachable code.
 void Sema::CheckUnreachable(AnalysisContext &AC) {
+  // We avoid checking when there are errors, as the CFG won't faithfully match
+  // the users code.
+  if (getDiagnostics().hasErrorOccurred())
+    return;
   if (Diags.getDiagnosticLevel(diag::warn_unreachable) == Diagnostic::Ignored)
     return;
 
   CFG *cfg = AC.getCFG();
-  // FIXME: They should never return 0, fix that, delete this code.
   if (cfg == 0)
     return;
   
@@ -1363,7 +1366,6 @@ void Sema::CheckUnreachable(AnalysisContext &AC) {
 /// will return.
 Sema::ControlFlowKind Sema::CheckFallThrough(AnalysisContext &AC) {
   CFG *cfg = AC.getCFG();
-  // FIXME: They should never return 0, fix that, delete this code.
   if (cfg == 0)
     // FIXME: This should be NeverFallThrough
     return NeverFallThroughOrReturn;