// RUN: %clang_cc1 -x objective-c -fsyntax-only -fobjc-default-synthesize-properties -verify -Wno-objc-root-class %s
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -fobjc-default-synthesize-properties -verify -Wno-objc-root-class %s
// rdar://8843851

@interface StopAccessingIvarsDirectlyExample
@property(strong) id name, rank, serialNumber;
@end

@implementation StopAccessingIvarsDirectlyExample

- (void)identifyYourSelf {
    if (self.name && self.rank && self.serialNumber)
      self.name = 0;
}

// @synthesize name, rank, serialNumber;
// default synthesis allows direct access to property ivars.
- (id)init {
        _name = _rank = _serialNumber = 0;
	return self;
}

- (void)dealloc {	
}
@end


// Test2
@interface Test2 
@property(strong, nonatomic) id object;
@end

// object has user declared setter/getter so it won't be
// default synthesized; thus causing user error.
@implementation Test2
- (id) bar { return object; } // expected-error {{use of undeclared identifier 'object'}}
- (void)setObject:(id)newObject {}
- (id)object { return 0; }
@end

// Test3
@interface Test3 
{ 
  id uid;  // expected-note {{ivar is declared here}}
} 
@property (readwrite, assign) id uid;  // expected-note {{property declared here}}
@end

// rdar://11671080
@implementation Test3 // expected-warning {{autosynthesized property 'uid' will use synthesized instance variable '_uid', not existing instance variable 'uid'}}
// Oops, forgot to write @synthesize! will be default synthesized
- (void) myMethod { 
   self.uid = 0; // Use of the “setter” 
   uid = 0; // Use of the wrong instance variable
   _uid = 0; // Use of the property instance variable
} 
@end

@interface Test4 { 
  id _var;
} 
@property (readwrite, assign) id var; 
@end


// default synthesize property named 'var'
@implementation Test4 
- (id) myMethod {
  return self->_var;  //  compiles because 'var' is synthesized by default
}
@end

@interface Test5 
{ 
  id _var;
} 
@property (readwrite, assign) id var; 
@end

// default synthesis of property 'var'
@implementation Test5 
- (id) myMethod {
  Test5 *foo = 0; 
  return foo->_var; // OK
} 
@end

@interface Test6 
{ 
  id _var; // expected-note {{'_var' declared here}}
} 
@property (readwrite, assign) id var; 
@end

// no default synthesis. So error is expected.
@implementation Test6 
- (id) myMethod 
{
  return var; // expected-error {{use of undeclared identifier 'var'}}
} 
@synthesize var = _var; 
@end

int* _object;

@interface Test7
@property (readwrite, assign) id object; 
@end

// With default synthesis, '_object' is be the synthesized ivar not the global
// 'int*' object. So no error.
@implementation Test7 
- (id) myMethod {
  return _object;
} 
@end

// rdar://11671080
@interface Test8
{
  id _y;
  id y; // expected-note {{ivar is declared here}}
}
@property(copy) id y; // expected-note {{property declared here}}
@end


@implementation Test8 @end // expected-warning {{autosynthesized property 'y' will use  instance variable '_y', not existing instance variable 'y'}}

