diff options
author | Mike Stump <mrs@apple.com> | 2010-01-21 22:12:18 +0000 |
---|---|---|
committer | Mike Stump <mrs@apple.com> | 2010-01-21 22:12:18 +0000 |
commit | fcd6f94ba713356b40aa7618560e4eb435edab04 (patch) | |
tree | e4da18a713191c1d1033c3a172776640c1c9364c | |
parent | 32bfe1e837dd0b73c2878b9ef0eb58e585fbef1f (diff) | |
download | bcm5719-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.h | 1 | ||||
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unreachable.cpp | 5 |
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()); } |