diff options
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 2 | ||||
-rw-r--r-- | lib/Sema/AnalysisBasedWarnings.cpp | 5 | ||||
-rw-r--r-- | test/SemaObjC/return.m | 9 |
3 files changed, 14 insertions, 2 deletions
diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index bd18b2f63f..58bfbcfd28 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -236,7 +236,7 @@ def err_maybe_falloff_nonvoid_block : Error< def err_falloff_nonvoid_block : Error< "control reaches end of non-void block">; def warn_suggest_noreturn_function : Warning< - "function %0 could be declared with attribute 'noreturn'">, + "%select{function|method}0 %1 could be declared with attribute 'noreturn'">, InGroup<DiagGroup<"missing-noreturn">>, DefaultIgnore; def warn_suggest_noreturn_block : Warning< "block could be declared with attribute 'noreturn'">, diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index 823cbf74f5..30b6b0c8e3 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -382,7 +382,10 @@ static void CheckFallThroughForBody(Sema &S, const Decl *D, const Stmt *Body, if (ReturnsVoid && !HasNoReturn && CD.diag_NeverFallThroughOrReturn) { if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn) - << FD; + << 0 << FD; + } else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) { + S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn) + << 1 << MD; } else { S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn); } diff --git a/test/SemaObjC/return.m b/test/SemaObjC/return.m index 88e6e6381e..4e70bde1ed 100644 --- a/test/SemaObjC/return.m +++ b/test/SemaObjC/return.m @@ -39,3 +39,12 @@ NSString *rdar_4289832() { // no-warning } } +void exit(int) __attribute__((noreturn)); +@interface rdar10098695 +@end + +@implementation rdar10098695 +- (void)method { // expected-warning{{method 'method' could be declared with attribute 'noreturn'}} + exit(1); +} +@end |