| // RUN: clang -fsyntax-only -verify %s |
| |
| @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 function}} |
| } |