From: Fariborz Jahanian Date: Thu, 16 Apr 2015 21:52:34 +0000 (+0000) Subject: [Objective-C Sema]. In my last patch change the X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80cbce09b9403a3b8a9e3c670ff1fef5fbcb56c7;p=clang [Objective-C Sema]. In my last patch change the attribute name to objc_independent_class. rdar://20255473 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235135 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 6eb94405b9..8cd29b7b91 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -1575,7 +1575,7 @@ public: bool isObjCLifetimeType() const; // (array of)* retainable type bool isObjCIndirectLifetimeType() const; // (pointer to)* lifetime type bool isObjCNSObjectType() const; // __attribute__((NSObject)) - bool isObjCIndependentClassType() const; // __attribute__((IndependentClass)) + bool isObjCIndependentClassType() const; // __attribute__((objc_independent_class)) // FIXME: change this to 'raw' interface type, so we can used 'interface' type // for the common case. bool isObjCObjectType() const; // NSString or typeof(*(id)0) diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 423fdc6784..0e5e9fa6d6 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -1059,7 +1059,7 @@ def ObjCNSObject : InheritableAttr { } def ObjCIndependentClass : InheritableAttr { - let Spellings = [GNU<"IndependentClass">]; + let Spellings = [GNU<"objc_independent_class">]; let Documentation = [Undocumented]; } diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 6199aebc95..4ac4c19a58 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -2201,11 +2201,11 @@ def warn_nsobject_attribute : Warning< "'NSObject' attribute may be put on a typedef only; attribute is ignored">, InGroup; def warn_independentclass_attribute : Warning< - "'IndependentClass' attribute may be put on a typedef only; " + "'objc_independent_class' attribute may be put on a typedef only; " "attribute is ignored">, InGroup; def warn_ptr_independentclass_attribute : Warning< - "'IndependentClass' attribute may be put on Objective-C object " + "'objc_independent_class' attribute may be put on Objective-C object " "pointer type only; attribute is ignored">, InGroup; def warn_attribute_weak_on_local : Warning< diff --git a/test/SemaObjC/objc-independent-class-attribute.m b/test/SemaObjC/objc-independent-class-attribute.m new file mode 100644 index 0000000000..2fc13f0cf1 --- /dev/null +++ b/test/SemaObjC/objc-independent-class-attribute.m @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s +// rdar://20255473 + +@interface NSObject @end + +typedef NSObject * __attribute__((objc_independent_class))dispatch_queue_t; + +typedef struct S {int ii; } * __attribute__((objc_independent_class))dispatch_queue_t_2; // expected-warning {{Objective-C object}} + +typedef struct { // expected-warning {{'objc_independent_class' attribute may be put on a typedef only; attribute is ignored}} + NSObject *__attribute__((objc_independent_class)) ns; // expected-warning {{'objc_independent_class' attribute may be put on a typedef only; attribute is ignored}} +} __attribute__((objc_independent_class)) T; + +dispatch_queue_t dispatch_queue_create(); + +@interface DispatchQPointerCastIssue : NSObject { + NSObject *__attribute__((objc_independent_class)) Ivar; // expected-warning {{'objc_independent_class' attribute may be put on a typedef only; attribute is ignored}} +} + +@property (copy) NSObject *__attribute__((objc_independent_class)) Prop; // expected-warning {{'objc_independent_class' attribute may be put on a typedef only; attribute is ignored}} + +typedef NSObject * __attribute__((objc_independent_class))dispatch_queue_t_1; + +@end + +@implementation DispatchQPointerCastIssue ++ (dispatch_queue_t) newDispatchQueue { + return dispatch_queue_create(); +} +@end + +NSObject *get_nsobject() { + typedef NSObject * __attribute__((objc_independent_class))dispatch_queue_t; + dispatch_queue_t dt; + return dt; +} diff --git a/test/SemaObjC/psuedo-class-attribute.m b/test/SemaObjC/psuedo-class-attribute.m deleted file mode 100644 index c6ba077959..0000000000 --- a/test/SemaObjC/psuedo-class-attribute.m +++ /dev/null @@ -1,36 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s -// rdar://20255473 - -@interface NSObject @end - -typedef NSObject * __attribute__((IndependentClass))dispatch_queue_t; - -typedef struct S {int ii; } * __attribute__((IndependentClass))dispatch_queue_t_2; // expected-warning {{Objective-C object}} - -typedef struct { // expected-warning {{'IndependentClass' attribute may be put on a typedef only; attribute is ignored}} - NSObject *__attribute__((IndependentClass)) ns; // expected-warning {{'IndependentClass' attribute may be put on a typedef only; attribute is ignored}} -} __attribute__((IndependentClass)) T; - -dispatch_queue_t dispatch_queue_create(); - -@interface DispatchQPointerCastIssue : NSObject { - NSObject *__attribute__((IndependentClass)) Ivar; // expected-warning {{'IndependentClass' attribute may be put on a typedef only; attribute is ignored}} -} - -@property (copy) NSObject *__attribute__((IndependentClass)) Prop; // expected-warning {{'IndependentClass' attribute may be put on a typedef only; attribute is ignored}} - -typedef NSObject * __attribute__((IndependentClass))dispatch_queue_t_1; - -@end - -@implementation DispatchQPointerCastIssue -+ (dispatch_queue_t) newDispatchQueue { - return dispatch_queue_create(); -} -@end - -NSObject *get_nsobject() { - typedef NSObject * __attribute__((IndependentClass))dispatch_queue_t; - dispatch_queue_t dt; - return dt; -}