157 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			2.9 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 {
 | 
						|
      __typeof(myStatus) __in;  // fails.
 | 
						|
      struct S {
 | 
						|
        __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
 |