summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Stump <mrs@apple.com>2010-01-21 22:12:18 +0000
committerMike Stump <mrs@apple.com>2010-01-21 22:12:18 +0000
commitfcd6f94ba713356b40aa7618560e4eb435edab04 (patch)
treee4da18a713191c1d1033c3a172776640c1c9364c
parent32bfe1e837dd0b73c2878b9ef0eb58e585fbef1f (diff)
downloadbcm5719-llvm-fcd6f94ba713356b40aa7618560e4eb435edab04.tar.gz
bcm5719-llvm-fcd6f94ba713356b40aa7618560e4eb435edab04.zip
Improve unreachable code warnings for with respect to dead functional casts in C++.
llvm-svn: 94106
-rw-r--r--clang/include/clang/AST/Stmt.h1
-rw-r--r--clang/lib/Sema/SemaChecking.cpp5
-rw-r--r--clang/test/SemaCXX/warn-unreachable.cpp5
3 files changed, 9 insertions, 2 deletions
diff --git a/clang/include/clang/AST/Stmt.h b/clang/include/clang/AST/Stmt.h
index 1cfa5934cb2..d058f838a00 100644
--- a/clang/include/clang/AST/Stmt.h
+++ b/clang/include/clang/AST/Stmt.h
@@ -24,7 +24,6 @@
#include "llvm/ADT/SmallVector.h"
#include "clang/AST/ASTContext.h"
#include <string>
-#include <iterator>
using llvm::dyn_cast_or_null;
namespace llvm {
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 018132c3681..b792ea8071c 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2121,6 +2121,11 @@ static SourceLocation GetUnreachableLoc(CFGBlock &b, SourceRange &R1,
R1 = CSC->getSubExpr()->getSourceRange();
return CSC->getLParenLoc();
}
+ case Expr::CXXFunctionalCastExprClass: {
+ const CXXFunctionalCastExpr *CE = cast <CXXFunctionalCastExpr>(S);
+ R1 = CE->getSubExpr()->getSourceRange();
+ return CE->getTypeBeginLoc();
+ }
case Expr::ImplicitCastExprClass:
++sn;
goto top;
diff --git a/clang/test/SemaCXX/warn-unreachable.cpp b/clang/test/SemaCXX/warn-unreachable.cpp
index 852943f01da..9e3eb163af5 100644
--- a/clang/test/SemaCXX/warn-unreachable.cpp
+++ b/clang/test/SemaCXX/warn-unreachable.cpp
@@ -40,6 +40,9 @@ void test3() {
halt()
--; // expected-warning {{will never be executed}}
halt()
- ? // expected-warning {{will never be executed}}
+ ? // expected-warning {{will never be executed}}
dead() : dead();
+ live(),
+ float // expected-warning {{will never be executed}}
+ (halt());
}
OpenPOWER on IntegriCloud