From 29ce3a3114a6e5a06aefcec71575e96ea16a7891 Mon Sep 17 00:00:00 2001 From: Mike Stump Date: Thu, 14 Jan 2010 02:26:52 +0000 Subject: [PATCH] Avoid snowballing errors into additional warnings. To do better, we'd 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. llvm-svn: 93411 --- clang/lib/Sema/SemaDecl.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 948418b42a64..40c3e754ad98 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -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;