157 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s
 | |
| 
 | |
| @interface Test {
 | |
|    int x;
 | |
| }
 | |
| 
 | |
| -(void) setX: (int) d;
 | |
| @end
 | |
| 
 | |
| extern struct foo x;
 | |
| 
 | |
| @implementation Test
 | |
| 
 | |
| -(void) setX: (int) n {
 | |
|    x = n;
 | |
| }
 | |
| 
 | |
| @end
 | |
| 
 | |
| @interface Ivar
 | |
| - (float*)method;
 | |
| @end
 | |
| 
 | |
| @interface A {
 | |
|   A *Ivar;
 | |
| }
 | |
| - (int*)method;
 | |
| @end
 | |
| 
 | |
| @implementation A
 | |
| - (int*)method {
 | |
|   int *ip = [Ivar method]; // expected-warning{{incompatible pointer types initializing 'int *' with an expression of type 'float *'}}
 | |
|                            // Note that there is no warning in Objective-C++
 | |
|   return 0;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface TwoIvars {
 | |
|   int a;
 | |
|   int b;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @implementation TwoIvars
 | |
| + (int)classMethod {
 | |
|   return a + b; // expected-error{{instance variable 'a' accessed in class method}} \
 | |
|   // expected-error{{instance variable 'b' accessed in class method}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| // rdar://10309454
 | |
| @interface Radar10309454
 | |
| {
 | |
|   int IVAR; // expected-note 4 {{previous definition is here}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Radar10309454()
 | |
| {
 | |
|   int IVAR; // expected-error {{instance variable is already declared}}
 | |
|   int PIVAR; // expected-note {{previous definition is here}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Radar10309454()
 | |
| {
 | |
|   int IVAR; // expected-error {{instance variable is already declared}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Radar10309454()
 | |
| {
 | |
|   int IVAR; // expected-error {{instance variable is already declared}}
 | |
|   int PIVAR; // expected-error {{instance variable is already declared}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @implementation Radar10309454
 | |
| {
 | |
|   int IVAR; // expected-error {{instance variable is already declared}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| // PR5984
 | |
| // rdar://14037151
 | |
| @interface Radar14037151 {
 | |
|   int myStatus;
 | |
| }
 | |
| - (int) test;
 | |
| @end
 | |
| 
 | |
| @implementation Radar14037151
 | |
| - (int) test
 | |
| {
 | |
|   myStatus = 1;     // works
 | |
|    __typeof(myStatus) __in;  // works.
 | |
|   union U {
 | |
|     __typeof(myStatus) __in;  // fails.
 | |
|   };
 | |
|   struct S {
 | |
|     __typeof(myStatus) __in;  // fails.
 | |
|     struct S1 { // expected-warning {{declaration does not declare anything}}
 | |
|       __typeof(myStatus) __in;  // fails.
 | |
|       struct S { // expected-warning {{declaration does not declare anything}}
 | |
|         __typeof(myStatus) __in;  // fails.
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   return 0;
 | |
| }
 | |
| @end
 | |
| 
 | |
| // rdar://14278560
 | |
| @class NSString, NSData, NSNumber;
 | |
| 
 | |
| @interface NSObject
 | |
| {
 | |
|   Class isa;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Foo
 | |
| {
 | |
|   int a;
 | |
|   NSString* b;
 | |
|   NSData* c;
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Bar : Foo
 | |
| @end
 | |
| 
 | |
| @interface Bar () {
 | |
| 	NSString *q_strong;
 | |
| 	NSNumber *r_strong;
 | |
| 	int d; // expected-note {{previous definition is here}}
 | |
| 	NSString *e_strong; // expected-note {{previous definition is here}}
 | |
| 	NSData *f_weak; // expected-note {{previous definition is here}}
 | |
| 	int g; // expected-note 2 {{previous definition is here}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @interface Bar () {
 | |
| 	int g; // expected-note {{previous definition is here}} \
 | |
|                // expected-error {{instance variable is already declared}}
 | |
| }
 | |
| @end
 | |
| 
 | |
| @implementation Bar {
 | |
| 	int d; // expected-error {{instance variable is already declared}}
 | |
| 	NSString *e_strong; // expected-error {{instance variable is already declared}}
 | |
| 	NSData *f_weak; // expected-error {{instance variable is already declared}}
 | |
| 	NSData *g; // expected-error 2 {{instance variable is already declared}}
 | |
| }
 | |
| @end
 |