Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / property-category-4.m
blob86fd598d3f9bbd2704693c5a8113501ef5c63e8b
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
3 @interface IDELogNavigator
5   id selectedObjects;
7 @end
9 @interface IDELogNavigator (CAT)
10   @property (readwrite, retain) id selectedObjects; // expected-note {{property declared here}}
11   @property (readwrite, retain) id d_selectedObjects; // expected-note {{property declared here}}
12 @end
14 @implementation IDELogNavigator 
15 @synthesize selectedObjects = _selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
16 @dynamic d_selectedObjects; // expected-error {{property declared in category 'CAT' cannot be implemented in class implementation}}
17 @end
19 // Test1
20 @interface NSArray 
21 - (int)count;
22 @end
24 @protocol MyCountable
25 @property  (readonly) int count;
26 @end
29 @interface NSArray(Additions) <MyCountable>
30 @end
32 @implementation NSArray(Additions)
33 @end
35 // Test2
36 @protocol NSProtocol
37 - (int)count;
38 @end
40 @interface NSArray1 <NSProtocol>
41 @end
43 @interface NSArray1(Additions) <MyCountable>
44 @end
46 @implementation NSArray1(Additions)
47 @end
49 // Test3
50 @interface Super <NSProtocol>
51 @end
53 @interface NSArray2 : Super @end
55 @interface NSArray2(Additions) <MyCountable>
56 @end
58 @implementation NSArray2(Additions)
59 @end
61 // Test3
62 @interface Super1 <NSProtocol>
63 @property  (readonly) int count;
64 @end
66 @protocol MyCountable1
67 @end
69 @interface NSArray3 : Super1 <MyCountable1>
70 @end
72 @implementation NSArray3
73 @end
75 // Test4
76 @interface I
77 @property int d1;
78 @end
80 @interface I(CAT)
81 @property int d1;
82 @end
84 @implementation I(CAT)
85 @end
87 // Test5 
88 @interface C @end
90 @interface C (CAT)
91 - (int) p;
92 @end
95 @interface C (Category)
96 @property (readonly) int p;  // no warning for this property - a getter is declared in another category
97 @property (readonly) int p1; // expected-note {{property declared here}}
98 @property (readonly) int p2;  // no warning for this property - a getter is declared in this category
99 - (int) p2;
100 @end
102 @implementation C (Category)  // expected-warning {{property 'p1' requires method 'p1' to be defined - use @dynamic or provide a method implementation in this category}}
103 @end
105 // Test6
106 @protocol MyProtocol
107 @property (readonly) float  anotherFloat; // expected-note {{property declared here}}
108 @property (readonly) float  Float; // no warning for this property - a getter is declared in this protocol
109 - (float) Float;
110 @end
112 @interface MyObject 
113 { float anotherFloat; }
114 @end
116 @interface MyObject (CAT) <MyProtocol>
117 @end
119 @implementation MyObject (CAT) // expected-warning {{property 'anotherFloat' requires method 'anotherFloat' to be defined - use @dynamic or provide a method implementation in this category}}
120 @end