]> granicus.if.org Git - clang/commitdiff
Allow __attribute__((unused)) to be applied to ObjC ivars.
authorTed Kremenek <kremenek@apple.com>
Thu, 25 Feb 2010 03:26:51 +0000 (03:26 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 25 Feb 2010 03:26:51 +0000 (03:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97103 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclAttr.cpp
test/SemaObjC/unused.m

index 8a8ad28def2d061deac2e87a9b5ac88ba62932a6..242d66fa521f8d53b6963952896ba0bc1dddc36a 100644 (file)
@@ -521,7 +521,7 @@ static void HandleUnusedAttr(Decl *d, const AttributeList &Attr, Sema &S) {
     return;
   }
 
-  if (!isa<VarDecl>(d) && !isFunctionOrMethod(d)) {
+  if (!isa<VarDecl>(d) && !isa<ObjCIvarDecl>(d) && !isFunctionOrMethod(d)) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type)
       << Attr.getName() << 2 /*variable and function*/;
     return;
index 7fdb80152f31111915bb12ba518b48f79413a5a5..e99418875ae219f6cd99feade077a22004fcc3dd 100644 (file)
@@ -7,19 +7,14 @@ int printf(const char *, ...);
 @end
 
 @implementation Greeter
-+ (void) hello {
-    printf("Hello, World!\n");
-}
++ (void) hello { printf("Hello, World!\n"); }
 @end
 
-
 int test1(void) {
   [Greeter hello];
   return 0;
 }
 
-
-
 @interface NSObject @end
 @interface NSString : NSObject 
 - (int)length;
@@ -29,10 +24,6 @@ void test2() {
   @"pointless example call for test purposes".length; // expected-warning {{property access result unused - getters should not have side effects}}
 }
 
-
-
-
-
 @interface foo
 - (int)meth: (int)x: (int)y: (int)z ;
 @end
@@ -42,3 +33,13 @@ void test2() {
 (int)y: // expected-warning{{unused}} 
 (int) __attribute__((unused))z { return x; }
 @end
+
+//===------------------------------------------------------------------------===
+// The next test shows how clang accepted attribute((unused)) on ObjC
+// instance variables, which GCC does not.
+//===------------------------------------------------------------------------===
+
+@interface TestUnusedIvar {
+  id x __attribute__((unused)); // no-warning
+}
+@end