1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3typedef signed char BOOL; 4typedef unsigned int NSUInteger; 5typedef struct _NSZone NSZone; 6@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; 7@protocol NSObject 8- (BOOL)isEqual:(id)object; 9@end 10@protocol NSCopying - (id)copyWithZone:(NSZone *)zone; 11@end 12@protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; 13@end 14@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; 15@end 16@interface NSObject <NSObject> {} 17@end 18extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); 19typedef struct { 20 id *itemsPtr; 21 unsigned long *mutationsPtr; 22} NSFastEnumerationState; 23@protocol NSFastEnumeration 24- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; 25@end 26@class NSString; 27@interface NSArray : NSObject <NSCopying, NSMutableCopying, NSCoding, NSFastEnumeration> - (NSUInteger)count; 28@end 29@interface NSMutableArray : NSArray - (void)addObject:(id)anObject; 30@end 31extern NSString * const NSUndoManagerCheckpointNotification; 32@interface NSValueTransformer : NSObject {} @end 33@class FooModel; 34@interface FooObject : NSObject <NSCopying> {} 35@end 36@interface FooNode : FooObject {} 37- (NSArray *) children; 38@end 39typedef enum { Foo_HUH_NONE } FooHUHCode; 40@interface FooPlaypenEntry : FooNode { 41 NSMutableArray *_interestingChildren; 42 FooHUHCode _HUH; 43 __attribute__((objc_gc(weak))) FooPlaypenEntry *_mostInterestingChild; 44 id _author; 45} 46@property(copy) NSString *author; 47- (BOOL) isInteresting; 48@end NSString *FooHUHCodeToString(FooHUHCode HUH) { return 0; } 49@interface FooHUHCodeToStringTransformer: NSValueTransformer { 50} 51@end @implementation FooPlaypenEntry @synthesize author = _author; 52- (BOOL) isInteresting { return 1; } 53- (NSArray *) interestingChildren { 54 if (!_interestingChildren) { 55 for (FooPlaypenEntry *child in [self children]) { 56 if ([child isInteresting]) { 57 if (!_mostInterestingChild) 58 _mostInterestingChild = child; 59 else if (child->_HUH > _mostInterestingChild->_HUH) 60 _mostInterestingChild = child; 61 } 62 } 63 } 64 return 0; 65} 66- (FooHUHCode) HUH { 67 if (_HUH == Foo_HUH_NONE) { 68 if (_mostInterestingChild) 69 return [_mostInterestingChild HUH]; 70 } 71 return 0; 72} 73@end 74 75// rdar://problem/9123040 76@interface Test1 { 77@public 78 id ivar __attribute__((objc_gc(weak))); 79} 80@property (assign) id prop __attribute((objc_gc(weak))); 81@end 82void test1(Test1 *t) { 83 id *(__attribute__((objc_gc(strong))) x) = &t->ivar; // expected-warning {{initializing '__strong id *' with an expression of type '__weak id *' discards qualifiers}} 84} 85