// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s

@interface ReadOnly 
{
  id _object;
  id _object1;
}
@property(readonly) id object;	// expected-note {{property declared here}}
@property(readwrite, assign) id object1; // expected-note {{property declared here}}
@property (readonly) int indentLevel;
@end

@interface ReadOnly ()
@property(readwrite, copy) id object;	// expected-warning {{property attribute in class extension does not match the primary class}}
@property(readonly) id object1; // expected-error {{illegal redeclaration of property in class extension 'ReadOnly' (attribute must be 'readwrite', while its primary must be 'readonly')}}
@property (readwrite, assign) int indentLevel; // OK. assign the the default in any case.
@end

@protocol Proto
  @property (copy) id fee; // expected-note {{property declared here}}
@end

@protocol Foo<Proto>
  @property (copy) id foo; // expected-note {{property declared here}}
@end

@interface Bar  <Foo> {
        id _foo;
        id _fee;
}
@end

@interface Bar ()
@property (copy) id foo; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}}
@property (copy) id fee; // expected-error {{illegal redeclaration of property in class extension 'Bar' (attribute must be 'readwrite', while its primary must be 'readonly')}}
@end

@implementation Bar
@synthesize foo = _foo;
@synthesize fee = _fee;
@end

// rdar://10752081
@interface MyOtherClass() // expected-error {{cannot find interface declaration for 'MyOtherClass'}}
{
 id array;
}
@end

@implementation MyOtherClass // expected-warning {{cannot find interface declaration for 'MyOtherClass'}}
@end
