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:
Fariborz Jahanian 2009-05-12 21:36:23 +00:00
Родитель 1426e534b4
Коммит 5d36ac2cc9
4 изменённых файлов: 30 добавлений и 1 удалений

Просмотреть файл

@ -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