1*67e74705SXin Li// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s 2*67e74705SXin Li 3*67e74705SXin Li@interface Test { 4*67e74705SXin Li int x; 5*67e74705SXin Li} 6*67e74705SXin Li 7*67e74705SXin Li-(void) setX: (int) d; 8*67e74705SXin Li@end 9*67e74705SXin Li 10*67e74705SXin Liextern struct foo x; 11*67e74705SXin Li 12*67e74705SXin Li@implementation Test 13*67e74705SXin Li 14*67e74705SXin Li-(void) setX: (int) n { 15*67e74705SXin Li x = n; 16*67e74705SXin Li} 17*67e74705SXin Li 18*67e74705SXin Li@end 19*67e74705SXin Li 20*67e74705SXin Li@interface Ivar 21*67e74705SXin Li- (float*)method; 22*67e74705SXin Li@end 23*67e74705SXin Li 24*67e74705SXin Li@interface A { 25*67e74705SXin Li A *Ivar; 26*67e74705SXin Li} 27*67e74705SXin Li- (int*)method; 28*67e74705SXin Li@end 29*67e74705SXin Li 30*67e74705SXin Li@implementation A 31*67e74705SXin Li- (int*)method { 32*67e74705SXin Li int *ip = [Ivar method]; // expected-warning{{incompatible pointer types initializing 'int *' with an expression of type 'float *'}} 33*67e74705SXin Li // Note that there is no warning in Objective-C++ 34*67e74705SXin Li return 0; 35*67e74705SXin Li} 36*67e74705SXin Li@end 37*67e74705SXin Li 38*67e74705SXin Li@interface TwoIvars { 39*67e74705SXin Li int a; 40*67e74705SXin Li int b; 41*67e74705SXin Li} 42*67e74705SXin Li@end 43*67e74705SXin Li 44*67e74705SXin Li@implementation TwoIvars 45*67e74705SXin Li+ (int)classMethod { 46*67e74705SXin Li return a + b; // expected-error{{instance variable 'a' accessed in class method}} \ 47*67e74705SXin Li // expected-error{{instance variable 'b' accessed in class method}} 48*67e74705SXin Li} 49*67e74705SXin Li@end 50*67e74705SXin Li 51*67e74705SXin Li// rdar://10309454 52*67e74705SXin Li@interface Radar10309454 53*67e74705SXin Li{ 54*67e74705SXin Li int IVAR; // expected-note 4 {{previous definition is here}} 55*67e74705SXin Li} 56*67e74705SXin Li@end 57*67e74705SXin Li 58*67e74705SXin Li@interface Radar10309454() 59*67e74705SXin Li{ 60*67e74705SXin Li int IVAR; // expected-error {{instance variable is already declared}} 61*67e74705SXin Li int PIVAR; // expected-note {{previous definition is here}} 62*67e74705SXin Li} 63*67e74705SXin Li@end 64*67e74705SXin Li 65*67e74705SXin Li@interface Radar10309454() 66*67e74705SXin Li{ 67*67e74705SXin Li int IVAR; // expected-error {{instance variable is already declared}} 68*67e74705SXin Li} 69*67e74705SXin Li@end 70*67e74705SXin Li 71*67e74705SXin Li@interface Radar10309454() 72*67e74705SXin Li{ 73*67e74705SXin Li int IVAR; // expected-error {{instance variable is already declared}} 74*67e74705SXin Li int PIVAR; // expected-error {{instance variable is already declared}} 75*67e74705SXin Li} 76*67e74705SXin Li@end 77*67e74705SXin Li 78*67e74705SXin Li@implementation Radar10309454 79*67e74705SXin Li{ 80*67e74705SXin Li int IVAR; // expected-error {{instance variable is already declared}} 81*67e74705SXin Li} 82*67e74705SXin Li@end 83*67e74705SXin Li 84*67e74705SXin Li// PR5984 85*67e74705SXin Li// rdar://14037151 86*67e74705SXin Li@interface Radar14037151 { 87*67e74705SXin Li int myStatus; 88*67e74705SXin Li} 89*67e74705SXin Li- (int) test; 90*67e74705SXin Li@end 91*67e74705SXin Li 92*67e74705SXin Li@implementation Radar14037151 93*67e74705SXin Li- (int) test 94*67e74705SXin Li{ 95*67e74705SXin Li myStatus = 1; // works 96*67e74705SXin Li __typeof(myStatus) __in; // works. 97*67e74705SXin Li union U { 98*67e74705SXin Li __typeof(myStatus) __in; // fails. 99*67e74705SXin Li }; 100*67e74705SXin Li struct S { 101*67e74705SXin Li __typeof(myStatus) __in; // fails. 102*67e74705SXin Li struct S1 { // expected-warning {{declaration does not declare anything}} 103*67e74705SXin Li __typeof(myStatus) __in; // fails. 104*67e74705SXin Li struct S { // expected-warning {{declaration does not declare anything}} 105*67e74705SXin Li __typeof(myStatus) __in; // fails. 106*67e74705SXin Li }; 107*67e74705SXin Li }; 108*67e74705SXin Li }; 109*67e74705SXin Li 110*67e74705SXin Li return 0; 111*67e74705SXin Li} 112*67e74705SXin Li@end 113*67e74705SXin Li 114*67e74705SXin Li// rdar://14278560 115*67e74705SXin Li@class NSString, NSData, NSNumber; 116*67e74705SXin Li 117*67e74705SXin Li@interface NSObject 118*67e74705SXin Li{ 119*67e74705SXin Li Class isa; 120*67e74705SXin Li} 121*67e74705SXin Li@end 122*67e74705SXin Li 123*67e74705SXin Li@interface Foo 124*67e74705SXin Li{ 125*67e74705SXin Li int a; 126*67e74705SXin Li NSString* b; 127*67e74705SXin Li NSData* c; 128*67e74705SXin Li} 129*67e74705SXin Li@end 130*67e74705SXin Li 131*67e74705SXin Li@interface Bar : Foo 132*67e74705SXin Li@end 133*67e74705SXin Li 134*67e74705SXin Li@interface Bar () { 135*67e74705SXin Li NSString *q_strong; 136*67e74705SXin Li NSNumber *r_strong; 137*67e74705SXin Li int d; // expected-note {{previous definition is here}} 138*67e74705SXin Li NSString *e_strong; // expected-note {{previous definition is here}} 139*67e74705SXin Li NSData *f_weak; // expected-note {{previous definition is here}} 140*67e74705SXin Li int g; // expected-note 2 {{previous definition is here}} 141*67e74705SXin Li} 142*67e74705SXin Li@end 143*67e74705SXin Li 144*67e74705SXin Li@interface Bar () { 145*67e74705SXin Li int g; // expected-note {{previous definition is here}} \ 146*67e74705SXin Li // expected-error {{instance variable is already declared}} 147*67e74705SXin Li} 148*67e74705SXin Li@end 149*67e74705SXin Li 150*67e74705SXin Li@implementation Bar { 151*67e74705SXin Li int d; // expected-error {{instance variable is already declared}} 152*67e74705SXin Li NSString *e_strong; // expected-error {{instance variable is already declared}} 153*67e74705SXin Li NSData *f_weak; // expected-error {{instance variable is already declared}} 154*67e74705SXin Li NSData *g; // expected-error 2 {{instance variable is already declared}} 155*67e74705SXin Li} 156*67e74705SXin Li@end 157