From: Ted Kremenek Date: Fri, 7 Mar 2014 02:25:50 +0000 (+0000) Subject: [-Wunreachable-code] Teach reachable code analysis heuristics about more literal... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=465ac25a5856f1cd035f3519906207b73b703aa6;p=clang [-Wunreachable-code] Teach reachable code analysis heuristics about more literal types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203193 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/ReachableCode.cpp b/lib/Analysis/ReachableCode.cpp index 45930c0e2d..fa31dc1b06 100644 --- a/lib/Analysis/ReachableCode.cpp +++ b/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(Ex) || isa(Ex) || + isa(Ex) || isa(Ex) || + isa(Ex) || isEnumConstant(Ex); } diff --git a/test/Sema/warn-unreachable.c b/test/Sema/warn-unreachable.c index 289d74336c..4df2ec6dcc 100644 --- a/test/Sema/warn-unreachable.c +++ b/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/test/SemaCXX/warn-unreachable.cpp b/test/SemaCXX/warn-unreachable.cpp index 1fbe15c0f0..1030c993ad 100644 --- a/test/SemaCXX/warn-unreachable.cpp +++ b/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 +}