diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Sema/warn-unreachable.c | 58 | ||||
-rw-r--r-- | clang/test/SemaCXX/warn-unreachable.cpp | 4 |
2 files changed, 51 insertions, 11 deletions
diff --git a/clang/test/Sema/warn-unreachable.c b/clang/test/Sema/warn-unreachable.c index 663fab0f3c3..9cd87a7343b 100644 --- a/clang/test/Sema/warn-unreachable.c +++ b/clang/test/Sema/warn-unreachable.c @@ -151,10 +151,10 @@ int test_break_preceded_by_noreturn(int i) { switch (i) { case 1: raze(); - break; // no-warning + break; // expected-warning {{'break' will never be executed}} case 2: raze(); - break; // no-warning + break; // expected-warning {{'break' will never be executed}} warn_here(); // expected-warning {{will never be executed}} case 3: return 1; @@ -194,19 +194,17 @@ void unreachable_in_default(MyEnum e) { // Don't warn about trivial dead returns. int trivial_dead_return() { raze(); - // Use the '()' to test that we unwrap such stuff - // when looking for dead code. - return ((0)); // no-warning + return ((0)); // expected-warning {{'return' will never be executed}} } void trivial_dead_return_void() { raze(); - return; // no-warning + return; // expected-warning {{'return' will never be executed}} } MyEnum trival_dead_return_enum() { raze(); - return Value1; // no-warning + return Value1; // expected-warning {{'return' will never be executed}} } MyEnum trivial_dead_return_enum_2(int x) { @@ -222,12 +220,12 @@ MyEnum trivial_dead_return_enum_2(int x) { const char *trivial_dead_return_cstr() { raze(); - return ""; // no-warning + return ""; // expected-warning {{return' will never be executed}} } char trivial_dead_return_char() { raze(); - return ' '; // no-warning + return ' '; // expected-warning {{return' will never be executed}} } MyEnum nontrivial_dead_return_enum_2(int x) { @@ -325,3 +323,45 @@ int test_do_while_nontrivial_cond(int x) { return x; } +// Diagnostic control: -Wunreachable-code-return. + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code-return" + +void trivial_dead_return_void_SUPPRESSED() { + raze(); + return; // no-warning +} + +MyEnum trival_dead_return_enum_SUPPRESSED() { + raze(); + return Value1; // no-warning +} + +#pragma clang diagnostic pop + +// Diagnostic control: -Wunreachable-code-break. + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code-break" + +int test_break_preceded_by_noreturn_SUPPRESSED(int i) { + switch (i) { + case 1: + raze(); + break; // no-warning + case 2: + raze(); + break; // no-warning + warn_here(); // expected-warning {{will never be executed}} + case 3: + return 1; + break; // no-warning + default: + break; + break; // no-warning + } + return i; +} + +#pragma clang diagnostic pop diff --git a/clang/test/SemaCXX/warn-unreachable.cpp b/clang/test/SemaCXX/warn-unreachable.cpp index 843720fa5fd..17f0b9bf528 100644 --- a/clang/test/SemaCXX/warn-unreachable.cpp +++ b/clang/test/SemaCXX/warn-unreachable.cpp @@ -142,7 +142,7 @@ typedef basic_string<char> string; std::string testStr() { raze(); - return ""; // no-warning + return ""; // expected-warning {{'return' will never be executed}} } std::string testStrWarn(const char *s) { @@ -152,7 +152,7 @@ std::string testStrWarn(const char *s) { bool testBool() { raze(); - return true; // no-warning + return true; // expected-warning {{'return' will never be executed}} } static const bool ConditionVar = 1; |