diff options
-rw-r--r-- | clang/lib/Sema/AnalysisBasedWarnings.cpp | 8 | ||||
-rw-r--r-- | clang/test/Sema/return-noreturn.c | 12 |
2 files changed, 13 insertions, 7 deletions
diff --git a/clang/lib/Sema/AnalysisBasedWarnings.cpp b/clang/lib/Sema/AnalysisBasedWarnings.cpp index 3e40485a8b1..a489e8c911b 100644 --- a/clang/lib/Sema/AnalysisBasedWarnings.cpp +++ b/clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -413,8 +413,7 @@ struct CheckFallThroughDiagnostics { diag::err_noreturn_block_has_return_expr; D.diag_AlwaysFallThrough_ReturnsNonVoid = diag::err_falloff_nonvoid_block; - D.diag_NeverFallThroughOrReturn = - diag::warn_suggest_noreturn_block; + D.diag_NeverFallThroughOrReturn = 0; D.funMode = Block; return D; } @@ -449,10 +448,7 @@ struct CheckFallThroughDiagnostics { } // For blocks / lambdas. - return ReturnsVoid && !HasNoReturn - && ((funMode == Lambda) || - D.getDiagnosticLevel(diag::warn_suggest_noreturn_block, FuncLoc) - == DiagnosticsEngine::Ignored); + return ReturnsVoid && !HasNoReturn; } }; diff --git a/clang/test/Sema/return-noreturn.c b/clang/test/Sema/return-noreturn.c index 6d521eb017c..2aa0b91115b 100644 --- a/clang/test/Sema/return-noreturn.c +++ b/clang/test/Sema/return-noreturn.c @@ -2,7 +2,7 @@ int j; void test1() { // expected-warning {{function 'test1' could be declared with attribute 'noreturn'}} - ^ (void) { while (1) { } }(); // expected-warning {{block could be declared with attribute 'noreturn'}} + ^ (void) { while (1) { } }(); ^ (void) { if (j) while (1) { } }(); while (1) { } } @@ -40,3 +40,13 @@ test4() { _Noreturn void test5() { test2_positive(); } + +// rdar://16274746 +void test6() +{ + (void)^{ + for(;;) + ; + }; +} + |