diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Analysis/ReachableCode.cpp | 2 | ||||
-rw-r--r-- | clang/test/Sema/warn-unreachable.c | 14 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unreachable.cpp | 4 |
3 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ReachableCode.cpp b/clang/lib/Analysis/ReachableCode.cpp index 45930c0e2d9..fa31dc1b068 100644 --- a/clang/lib/Analysis/ReachableCode.cpp +++ b/clang/lib/Analysis/ReachableCode.cpp @@ -343,6 +343,8 @@ static const Expr *stripExprSugar(const Expr *Ex) { static bool isTrivialExpression(const Expr *Ex) { Ex = Ex->IgnoreParenCasts(); return isa<IntegerLiteral>(Ex) || isa<StringLiteral>(Ex) || + isa<CXXBoolLiteralExpr>(Ex) || isa<ObjCBoolLiteralExpr>(Ex) || + isa<CharacterLiteral>(Ex) || isEnumConstant(Ex); } diff --git a/clang/test/Sema/warn-unreachable.c b/clang/test/Sema/warn-unreachable.c index 289d74336c9..4df2ec6dcc6 100644 --- a/clang/test/Sema/warn-unreachable.c +++ b/clang/test/Sema/warn-unreachable.c @@ -215,6 +215,16 @@ MyEnum trivial_dead_return_enum_2(int x) { return 2; // expected-warning {{will never be executed}} } +const char *trivial_dead_return_cstr() { + raze(); + return ""; // no-warning +} + +char trivial_dead_return_char() { + raze(); + return ' '; // no-warning +} + MyEnum nontrivial_dead_return_enum_2(int x) { switch (x) { case 1: return 1; @@ -260,11 +270,13 @@ int test_config_constant(int x) { calledFun(); // expected-warning {{will never be executed}} } -int sizeof_int() { +int sizeof_int(int x, int y) { if (sizeof(long) == sizeof(int)) return 1; // no-warning if (sizeof(long) != sizeof(int)) return 0; // no-warning + if (x && y && sizeof(long) > sizeof(int)) + return 0; return 2; // no-warning } diff --git a/clang/test/SemaCXX/warn-unreachable.cpp b/clang/test/SemaCXX/warn-unreachable.cpp index 1fbe15c0f02..1030c993ada 100644 --- a/clang/test/SemaCXX/warn-unreachable.cpp +++ b/clang/test/SemaCXX/warn-unreachable.cpp @@ -150,4 +150,8 @@ std::string testStrWarn(const char *s) { return s; // expected-warning {{will never be executed}} } +bool testBool() { + raze(); + return true; // no-warning +} |