1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | typedef signed char BOOL; |
4 | typedef unsigned int NSUInteger; |
5 | typedef 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 |
18 | extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone); |
19 | typedef 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 |
31 | extern 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 |
39 | typedef 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 |
82 | void 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 | |