[cfe-commits] r94093 - in /cfe/trunk: lib/Sema/SemaChecking.cpp test/Sema/warn-unreachable.c test/SemaCXX/warn-unreachable.cpp
Mike Stump
mrs at apple.com
Thu Jan 21 11:44:05 PST 2010
Author: mrs
Date: Thu Jan 21 13:44:04 2010
New Revision: 94093
URL: http://llvm.org/viewvc/llvm-project?rev=94093&view=rev
Log:
Improve unreachable code warnings for with respect to ? :.
Modified:
cfe/trunk/lib/Sema/SemaChecking.cpp
cfe/trunk/test/Sema/warn-unreachable.c
cfe/trunk/test/SemaCXX/warn-unreachable.cpp
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=94093&r1=94092&r2=94093&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Thu Jan 21 13:44:04 2010
@@ -2067,8 +2067,12 @@
static SourceLocation GetUnreachableLoc(CFGBlock &b, SourceRange &R1,
SourceRange &R2) {
Stmt *S;
- if (!b.empty())
- S = b[0].getStmt();
+ unsigned sn = 0;
+ R1 = R2 = SourceRange();
+
+ top:
+ if (sn < b.size())
+ S = b[sn].getStmt();
else if (b.getTerminator())
S = b.getTerminator();
else
@@ -2078,8 +2082,8 @@
case Expr::BinaryOperatorClass: {
BinaryOperator *BO = cast<BinaryOperator>(S);
if (BO->getOpcode() == BinaryOperator::Comma) {
- if (b.size() >= 2)
- return b[1].getStmt()->getLocStart();
+ if (sn+1 < b.size())
+ return b[sn+1].getStmt()->getLocStart();
CFGBlock *n = &b;
while (1) {
if (n->getTerminator())
@@ -2108,6 +2112,13 @@
R2 = CAO->getRHS()->getSourceRange();
return CAO->getOperatorLoc();
}
+ case Expr::ConditionalOperatorClass: {
+ const ConditionalOperator *CO = cast<ConditionalOperator>(S);
+ return CO->getQuestionLoc();
+ }
+ case Expr::ImplicitCastExprClass:
+ ++sn;
+ goto top;
case Stmt::CXXTryStmtClass: {
return cast<CXXTryStmt>(S)->getHandler(0)->getCatchLoc();
}
Modified: cfe/trunk/test/Sema/warn-unreachable.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-unreachable.c?rev=94093&r1=94092&r2=94093&view=diff
==============================================================================
--- cfe/trunk/test/Sema/warn-unreachable.c (original)
+++ cfe/trunk/test/Sema/warn-unreachable.c Thu Jan 21 13:44:04 2010
@@ -83,5 +83,9 @@
i
+= // expected-warning {{will never be executed}}
halt();
+ case 9:
+ halt()
+ ? // expected-warning {{will never be executed}}
+ dead() : dead();
}
}
Modified: cfe/trunk/test/SemaCXX/warn-unreachable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unreachable.cpp?rev=94093&r1=94092&r2=94093&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unreachable.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-unreachable.cpp Thu Jan 21 13:44:04 2010
@@ -39,4 +39,7 @@
void test3() {
halt()
--; // expected-warning {{will never be executed}}
+ halt()
+ ? // expected-warning {{will never be executed}}
+ dead() : dead();
}
More information about the cfe-commits
mailing list