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