summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Stump <mrs@apple.com>2010-01-15 23:33:51 +0000
committerMike Stump <mrs@apple.com>2010-01-15 23:33:51 +0000
commitea409449aabae46cbca70b25be4b87b356014418 (patch)
treea2157c7ad9028675a09026f7747a9744cdc46c2e
parent3712d9e39152329ecffd62d652ba5a2970e815ff (diff)
downloadbcm5719-llvm-ea409449aabae46cbca70b25be4b87b356014418.tar.gz
bcm5719-llvm-ea409449aabae46cbca70b25be4b87b356014418.zip
Generalize handling for unreachable code warnings to all binary operators.
llvm-svn: 93584
-rw-r--r--clang/lib/Sema/SemaDecl.cpp29
-rw-r--r--clang/test/Sema/warn-unreachable.c8
2 files changed, 17 insertions, 20 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index d81e187bb30..b308613a46f 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -1339,24 +1339,21 @@ static SourceLocation GetUnreachableLoc(CFGBlock &b) {
switch (S->getStmtClass()) {
case Expr::BinaryOperatorClass: {
- BinaryOperator *Op = cast<BinaryOperator>(S);
- if (Op->getOpcode() == BinaryOperator::Comma) {
- if (b.size() < 2) {
- CFGBlock *n = &b;
- while (1) {
- if (n->getTerminator())
- return n->getTerminator()->getLocStart();
- if (n->succ_size() != 1)
- return SourceLocation();
- n = n[0].succ_begin()[0];
- if (n->pred_size() != 1)
- return SourceLocation();
- if (!n->empty())
- return n[0][0].getStmt()->getLocStart();
- }
+ if (b.size() < 2) {
+ CFGBlock *n = &b;
+ while (1) {
+ if (n->getTerminator())
+ return n->getTerminator()->getLocStart();
+ if (n->succ_size() != 1)
+ return SourceLocation();
+ n = n[0].succ_begin()[0];
+ if (n->pred_size() != 1)
+ return SourceLocation();
+ if (!n->empty())
+ return n[0][0].getStmt()->getLocStart();
}
- return b[1].getStmt()->getLocStart();
}
+ return b[1].getStmt()->getLocStart();
}
default: ;
}
diff --git a/clang/test/Sema/warn-unreachable.c b/clang/test/Sema/warn-unreachable.c
index 08ad6536987..205c39c6e2c 100644
--- a/clang/test/Sema/warn-unreachable.c
+++ b/clang/test/Sema/warn-unreachable.c
@@ -1,4 +1,4 @@
-// RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code
+// RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code -Wno-unused-value
int halt() __attribute__((noreturn));
int live();
@@ -35,9 +35,9 @@ void test2() {
dead(); // expected-warning {{will never be executed}}
case 3:
- live(),
- halt();
- dead(); // expected-warning {{will never be executed}}
+ live()
+ + halt();
+ dead(); // expected-warning {{will never be executed}}
case 4:
a4:
OpenPOWER on IntegriCloud