[cfe-commits] r71597 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDeclObjC.cpp test/SemaObjC/attr-deprecated.m test/SemaObjC/method-attributes.m
Fariborz Jahanian
fjahanian at apple.com
Tue May 12 14:36:23 PDT 2009
Author: fjahanian
Date: Tue May 12 16:36:23 2009
New Revision: 71597
URL: http://llvm.org/viewvc/llvm-project?rev=71597&view=rev
Log:
Method attributes may only be specified on method
declarations.
Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaDeclObjC.cpp
cfe/trunk/test/SemaObjC/attr-deprecated.m
cfe/trunk/test/SemaObjC/method-attributes.m
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=71597&r1=71596&r2=71597&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Tue May 12 16:36:23 2009
@@ -1720,5 +1720,8 @@
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">;
+
}
Modified: cfe/trunk/lib/Sema/SemaDeclObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclObjC.cpp?rev=71597&r1=71596&r2=71597&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclObjC.cpp Tue May 12 16:36:23 2009
@@ -1671,6 +1671,8 @@
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 @@
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.
Modified: cfe/trunk/test/SemaObjC/attr-deprecated.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-deprecated.m?rev=71597&r1=71596&r2=71597&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/attr-deprecated.m (original)
+++ cfe/trunk/test/SemaObjC/attr-deprecated.m Tue May 12 16:36:23 2009
@@ -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.
}
Modified: cfe/trunk/test/SemaObjC/method-attributes.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/method-attributes.m?rev=71597&r1=71596&r2=71597&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/method-attributes.m (original)
+++ cfe/trunk/test/SemaObjC/method-attributes.m Tue May 12 16:36:23 2009
@@ -8,3 +8,25 @@
-(void) m0 __attribute__((noreturn));
-(void) m1 __attribute__((unused));
@end
+
+
+ at interface INTF
+- (int) foo1: (int)arg1 __attribute__((deprecated));
+
+- (int) foo: (int)arg1;
+
+- (int) foo2: (int)arg1 __attribute__((deprecated)) __attribute__((unavailable));
+ at end
+
+ at 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;
+}
+ at end
+
More information about the cfe-commits
mailing list