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