summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-02-25 03:26:51 +0000
committerTed Kremenek <kremenek@apple.com>2010-02-25 03:26:51 +0000
commit6bf658abefb9e05c7fd70dbb97d3efacaa67b32a (patch)
tree88dc03163641937840465f2769432e85ca23bbaa
parent12ee380a61ce63a2d405e493799604365a5ea748 (diff)
downloadbcm5719-llvm-6bf658abefb9e05c7fd70dbb97d3efacaa67b32a.tar.gz
bcm5719-llvm-6bf658abefb9e05c7fd70dbb97d3efacaa67b32a.zip
Allow __attribute__((unused)) to be applied to ObjC ivars.
llvm-svn: 97103
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp2
-rw-r--r--clang/test/SemaObjC/unused.m21
2 files changed, 12 insertions, 11 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 8a8ad28def2..242d66fa521 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -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;
diff --git a/clang/test/SemaObjC/unused.m b/clang/test/SemaObjC/unused.m
index 7fdb80152f3..e99418875ae 100644
--- a/clang/test/SemaObjC/unused.m
+++ b/clang/test/SemaObjC/unused.m
@@ -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
OpenPOWER on IntegriCloud