diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Coverage/objc-language-features.inc | 1 | ||||
-rw-r--r-- | test/SemaObjC/super-property-notation.m | 25 |
2 files changed, 24 insertions, 2 deletions
diff --git a/test/Coverage/objc-language-features.inc b/test/Coverage/objc-language-features.inc index dbbf205fcd..29d8298c82 100644 --- a/test/Coverage/objc-language-features.inc +++ b/test/Coverage/objc-language-features.inc @@ -9,6 +9,7 @@ @class B; @interface Root +@property(readonly) int p0; @end @interface A : Root <P1> { diff --git a/test/SemaObjC/super-property-notation.m b/test/SemaObjC/super-property-notation.m index 0c17bb9392..a0364c9d9c 100644 --- a/test/SemaObjC/super-property-notation.m +++ b/test/SemaObjC/super-property-notation.m @@ -1,5 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -// expected-no-diagnostics +// RUN: %clang_cc1 -fsyntax-only -fobjc-default-synthesize-properties -verify %s @interface B +(int) classGetter; @@ -29,3 +28,25 @@ void f0() { int l2 = [A classGetter2]; } +// rdar://13349296 +__attribute__((objc_root_class)) @interface ClassBase +@property (nonatomic, retain) ClassBase * foo; +@end + +@implementation ClassBase +- (void) Meth:(ClassBase*)foo { + super.foo = foo; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}} + [super setFoo:foo]; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}} +} +@end + +@interface ClassDerived : ClassBase +@property (nonatomic, retain) ClassDerived * foo; +@end + +@implementation ClassDerived +- (void) Meth:(ClassBase*)foo { + super.foo = foo; // issues compile warning + [super setFoo:foo]; // works with no warning +} +@end |