1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2 3 typedef struct objc_object { 4 Class isa; 5 } *id; 6 7 8 @interface foo 9 - (void)meth; 10 @end 11 12 @implementation foo 13 - (void) contents {} // No declaration in @interface! 14 - (void) meth { [self contents]; } 15 @end 16 17 typedef struct _NSPoint { 18 float x; 19 float y; 20 } NSPoint; 21 22 typedef struct _NSSize { 23 float width; 24 float height; 25 } NSSize; 26 27 typedef struct _NSRect { 28 NSPoint origin; 29 NSSize size; 30 } NSRect; 31 32 @interface AnyClass 33 - (NSRect)rect; 34 @end 35 36 @class Helicopter; 37 38 static void func(Helicopter *obj) { 39 // Note that the proto for "rect" is found in the global pool even when 40 // a statically typed object's class interface isn't in scope! This 41 // behavior isn't very desirable, however wee need it for GCC compatibility. 42 NSRect r = [obj rect]; 43 } 44 45 @interface NSObject @end 46 47 extern Class NSClassFromObject(id object); 48 49 @interface XX : NSObject 50 @end 51 52 @implementation XX 53 54 + _privateMethod { 55 return self; 56 } 57 58 - (void) xx { 59 [NSClassFromObject(self) _privateMethod]; 60 } 61 @end 62 63 @implementation XX (Private) 64 - (void) yy { 65 [NSClassFromObject(self) _privateMethod]; 66 } 67 @end 68 69 @interface I0 70 -(void) nonVararg: (int) x; 71 @end 72 73 int f0(I0 *ob) { 74 [ ob nonVararg: 0, 1, 2]; // expected-error {{too many arguments to method call}} 75 } 76 77 int f2() { 78 const id foo; 79 [foo bar]; // expected-warning {{method '-bar' not found (return type defaults to 'id')}} 80 return 0; 81 } 82 83 84 // PR3766 85 struct S { int X; } S; 86 87 int test5(int X) { 88 int a = [X somemsg]; // expected-warning {{receiver type 'int' is not 'id'}} \ 89 expected-warning {{method '-somemsg' not found}} \ 90 expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} 91 int b = [S somemsg]; // expected-error {{bad receiver type 'struct S'}} 92 } 93 94 // PR4021 95 void foo4() { 96 struct objc_object X[10]; 97 98 [X rect]; // expected-warning {{receiver type 'struct objc_object *' is not 'id' or interface pointer, consider casting it to 'id'}} 99 } 100 101 // rdar://13207886 102 void foo5(id p) { 103 p 104 [(id)(p) bar]; // expected-error {{missing '['}} \ 105 // expected-error {{expected ']'}} \ 106 // expected-note {{to match this '['}} \ 107 // expected-warning {{instance method '-bar' not found}} 108 } 109 110 @interface I1 // expected-note {{receiver is instance of class declared here}} 111 -(void)unavail_meth __attribute__((unavailable)); // expected-note {{marked unavailable here}} 112 @end 113 114 // rdar://13620447 115 void foo6(I1 *p) { 116 [p 117 bar]; // expected-warning {{instance method '-bar' not found}} 118 [p 119 unavail_meth]; // expected-error {{unavailable}} 120 } 121