зеркало из https://github.com/microsoft/clang-1.git
Fix a diagnostics crasher with -Wmissing-noreturn in Objective-C
methods, and improve the diagnostic slightly along the way. Fixes <rdar://problem/10098695>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139446 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
78bf680ddf
Коммит
b3321093f6
|
@ -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'">,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче