| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s |
| |
| typedef struct objc_object { |
| Class isa; |
| } *id; |
| |
| |
| @interface foo |
| - (void)meth; |
| @end |
| |
| @implementation foo |
| - (void) contents {} // No declaration in @interface! |
| - (void) meth { [self contents]; } |
| @end |
| |
| typedef struct _NSPoint { |
| float x; |
| float y; |
| } NSPoint; |
| |
| typedef struct _NSSize { |
| float width; |
| float height; |
| } NSSize; |
| |
| typedef struct _NSRect { |
| NSPoint origin; |
| NSSize size; |
| } NSRect; |
| |
| @interface AnyClass |
| - (NSRect)rect; |
| @end |
| |
| @class Helicopter; |
| |
| static void func(Helicopter *obj) { |
| // Note that the proto for "rect" is found in the global pool even when |
| // a statically typed object's class interface isn't in scope! This |
| // behavior isn't very desirable, however wee need it for GCC compatibility. |
| NSRect r = [obj rect]; |
| } |
| |
| @interface NSObject @end |
| |
| extern Class NSClassFromObject(id object); |
| |
| @interface XX : NSObject |
| @end |
| |
| @implementation XX |
| |
| + _privateMethod { |
| return self; |
| } |
| |
| - (void) xx { |
| [NSClassFromObject(self) _privateMethod]; |
| } |
| @end |
| |
| @implementation XX (Private) |
| - (void) yy { |
| [NSClassFromObject(self) _privateMethod]; |
| } |
| @end |
| |
| @interface I0 |
| -(void) nonVararg: (int) x; |
| @end |
| |
| int f0(I0 *ob) { |
| [ ob nonVararg: 0, 1, 2]; // expected-error {{too many arguments to method call}} |
| } |
| |
| int f2() { |
| const id foo; |
| [foo bar]; // expected-warning {{method '-bar' not found (return type defaults to 'id')}} |
| return 0; |
| } |
| |
| |
| // PR3766 |
| struct S { int X; } S; |
| |
| int test5(int X) { |
| int a = [X somemsg]; // expected-warning {{receiver type 'int' is not 'id'}} \ |
| expected-warning {{method '-somemsg' not found}} \ |
| expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} |
| int b = [S somemsg]; // expected-error {{bad receiver type 'struct S'}} |
| } |
| |
| // PR4021 |
| void foo4() { |
| struct objc_object X[10]; |
| |
| [X rect]; // expected-warning {{receiver type 'struct objc_object *' is not 'id' or interface pointer, consider casting it to 'id'}} |
| } |
| |
| // rdar://13207886 |
| void foo5(id p) { |
| p |
| [(id)(p) bar]; // expected-error {{missing '['}} \ |
| // expected-error {{expected ']'}} \ |
| // expected-note {{to match this '['}} \ |
| // expected-warning {{instance method '-bar' not found}} |
| } |
| |
| @interface I1 // expected-note {{receiver is instance of class declared here}} |
| -(void)unavail_meth __attribute__((unavailable)); // expected-note {{marked unavailable here}} |
| @end |
| |
| // rdar://13620447 |
| void foo6(I1 *p) { |
| [p |
| bar]; // expected-warning {{instance method '-bar' not found}} |
| [p |
| unavail_meth]; // expected-error {{unavailable}} |
| } |