// RUN: %clang_cc1 -fsyntax-only -verify %s typedef signed char BOOL; typedef unsigned int NSUInteger; typedef struct _NSZone NSZone; @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; @protocol NSObject - (BOOL)isEqual:(id)object; @end @protocol NSCopying - (id)copyWithZone:(NSZone *)zone; @end @protocol NSMutableCopying - (id)mutableCopyWithZone:(NSZone *)zone; @end @protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end @interface NSObject {} @end extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); typedef struct { id *itemsPtr; unsigned long *mutationsPtr; } NSFastEnumerationState; @protocol NSFastEnumeration - (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len; @end @class NSString; @interface NSArray : NSObject - (NSUInteger)count; @end @interface NSMutableArray : NSArray - (void)addObject:(id)anObject; @end extern NSString * const NSUndoManagerCheckpointNotification; @interface NSValueTransformer : NSObject {} @end @class FooModel; @interface FooObject : NSObject {} @end @interface FooNode : FooObject {} - (NSArray *) children; @end typedef enum { Foo_HUH_NONE } FooHUHCode; @interface FooPlaypenEntry : FooNode { NSMutableArray *_interestingChildren; FooHUHCode _HUH; __attribute__((objc_gc(weak))) FooPlaypenEntry *_mostInterestingChild; id _author; } @property(copy) NSString *author; - (BOOL) isInteresting; @end NSString *FooHUHCodeToString(FooHUHCode HUH) { return 0; } @interface FooHUHCodeToStringTransformer: NSValueTransformer { } @end @implementation FooPlaypenEntry @synthesize author = _author; - (BOOL) isInteresting { return 1; } - (NSArray *) interestingChildren { if (!_interestingChildren) { for (FooPlaypenEntry *child in [self children]) { if ([child isInteresting]) { if (!_mostInterestingChild) _mostInterestingChild = child; else if (child->_HUH > _mostInterestingChild->_HUH) _mostInterestingChild = child; } } } return 0; } - (FooHUHCode) HUH { if (_HUH == Foo_HUH_NONE) { if (_mostInterestingChild) return [_mostInterestingChild HUH]; } return 0; } @end // rdar://problem/9123040 @interface Test1 { @public id ivar __attribute__((objc_gc(weak))); } @property (assign) id prop __attribute((objc_gc(weak))); @end void test1(Test1 *t) { id *(__attribute__((objc_gc(strong))) x) = &t->ivar; // expected-warning {{initializing '__strong id *' with an expression of type '__weak id *' discards qualifiers}} }