summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Analysis/ReachableCode.cpp2
-rw-r--r--clang/test/Sema/warn-unreachable.c14
-rw-r--r--clang/test/SemaCXX/warn-unreachable.cpp4
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
+}
OpenPOWER on IntegriCloud