diff options
author | Ted Kremenek <kremenek@apple.com> | 2014-03-20 18:47:53 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2014-03-20 18:47:53 +0000 |
commit | d4576318b4d79761af02ab932c55b2963ef4aae3 (patch) | |
tree | 5ba86ea3e61fa70fdb3a981d84eccb82ff2393a4 | |
parent | 3d84c96dd3b9a8a41bc39397e8dd544408234a32 (diff) | |
download | bcm5719-llvm-d4576318b4d79761af02ab932c55b2963ef4aae3.tar.gz bcm5719-llvm-d4576318b4d79761af02ab932c55b2963ef4aae3.zip |
[-Wunreachable-code] Tweak isTrivialDoWhile() to handle implicit casts.
llvm-svn: 204376
-rw-r--r-- | clang/lib/Analysis/ReachableCode.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unreachable.cpp | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp index 0a9e82bb0ad..4220000cd33 100644 --- a/clang/lib/Analysis/ReachableCode.cpp +++ b/clang/lib/Analysis/ReachableCode.cpp @@ -51,7 +51,7 @@ static bool isTrivialDoWhile(const CFGBlock *B, const Stmt *S) { // condition. if (const Stmt *Term = B->getTerminator()) { if (const DoStmt *DS = dyn_cast<DoStmt>(Term)) { - const Expr *Cond = DS->getCond(); + const Expr *Cond = DS->getCond()->IgnoreParenCasts(); return Cond == S && isTrivialExpression(Cond); } } diff --git a/clang/test/SemaCXX/warn-unreachable.cpp b/clang/test/SemaCXX/warn-unreachable.cpp index 7f74732a630..eab8d8e6b97 100644 --- a/clang/test/SemaCXX/warn-unreachable.cpp +++ b/clang/test/SemaCXX/warn-unreachable.cpp @@ -218,6 +218,14 @@ int test_treat_non_const_bool_local_as_non_config_value() { return 0; } +void test_do_while(int x) { + // Handle trivial expressions with + // implicit casts to bool. + do { + break; + } while (0); // no-warning +} + class Frobozz { public: Frobozz(int x); |