зеркало из https://github.com/microsoft/clang.git
Method attributes may only be specified on method
declarations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71597 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
1426e534b4
Коммит
5d36ac2cc9
|
@ -1720,5 +1720,8 @@ def error_ivar_use_in_class_method : Error<
|
|||
def error_private_ivar_access : Error<"instance variable %0 is private">;
|
||||
def error_protected_ivar_access : Error<"instance variable %0 is protected">;
|
||||
def warn_maynot_respond : Warning<"%0 may not respond to %1">;
|
||||
def warn_attribute_method_def : Warning<
|
||||
"method attribute may be specified on method declarations only">;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1671,6 +1671,8 @@ Sema::DeclPtrTy Sema::ActOnMethodDeclaration(
|
|||
PrevMethod = ImpDecl->getClassMethod(Context, Sel);
|
||||
ImpDecl->addClassMethod(Context, ObjCMethod);
|
||||
}
|
||||
if (AttrList)
|
||||
Diag(EndLoc, diag::warn_attribute_method_def);
|
||||
}
|
||||
else if (ObjCCategoryImplDecl *CatImpDecl =
|
||||
dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {
|
||||
|
@ -1681,6 +1683,8 @@ Sema::DeclPtrTy Sema::ActOnMethodDeclaration(
|
|||
PrevMethod = CatImpDecl->getClassMethod(Context, Sel);
|
||||
CatImpDecl->addClassMethod(Context, ObjCMethod);
|
||||
}
|
||||
if (AttrList)
|
||||
Diag(EndLoc, diag::warn_attribute_method_def);
|
||||
}
|
||||
if (PrevMethod) {
|
||||
// You can never have two method definitions with the same name.
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
@implementation A
|
||||
+ (void)F __attribute__((deprecated))
|
||||
{
|
||||
{ // expected-warning {{method attribute may be specified on method declarations only}}
|
||||
[self F]; // no warning, since the caller is also deprecated.
|
||||
}
|
||||
|
||||
|
|
|
@ -8,3 +8,25 @@
|
|||
-(void) m0 __attribute__((noreturn));
|
||||
-(void) m1 __attribute__((unused));
|
||||
@end
|
||||
|
||||
|
||||
@interface INTF
|
||||
- (int) foo1: (int)arg1 __attribute__((deprecated));
|
||||
|
||||
- (int) foo: (int)arg1;
|
||||
|
||||
- (int) foo2: (int)arg1 __attribute__((deprecated)) __attribute__((unavailable));
|
||||
@end
|
||||
|
||||
@implementation INTF
|
||||
- (int) foo: (int)arg1 __attribute__((deprecated)){ // expected-warning {{method attribute may be specified}}
|
||||
return 10;
|
||||
}
|
||||
- (int) foo1: (int)arg1 {
|
||||
return 10;
|
||||
}
|
||||
- (int) foo2: (int)arg1 __attribute__((deprecated)) { // expected-warning {{method attribute may be specified}}
|
||||
return 10;
|
||||
}
|
||||
@end
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче