Home | History | Annotate | Download | only in SemaObjC
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 
      3 @interface B
      4 +(int) classGetter;
      5 -(int) getter;
      6 @end
      7 
      8 @interface A : B
      9 @end
     10 
     11 @implementation A
     12 +(int) classGetter {
     13   return 0;
     14 }
     15 
     16 +(int) classGetter2 {
     17   return super.classGetter;
     18 }
     19 
     20 -(void) method {
     21   int x = super.getter;
     22 }
     23 @end
     24 
     25 void f0() {
     26   // FIXME: not implemented yet.
     27   //int l1 = A.classGetter;
     28   int l2 = [A classGetter2];
     29 }
     30 
     31 // rdar://13349296
     32 __attribute__((objc_root_class)) @interface ClassBase 
     33 @property (nonatomic, retain) ClassBase * foo; // expected-note {{property declared here}}
     34 @end
     35 
     36 @implementation ClassBase 
     37 - (void) Meth:(ClassBase*)foo {
     38   super.foo = foo; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
     39   [super setFoo:foo]; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
     40 }
     41 @end
     42 
     43 @interface ClassDerived : ClassBase 
     44 @property (nonatomic, retain) ClassDerived * foo; // expected-warning {{auto property synthesis will not synthesize property 'foo'; it will be implemented by its superclass}}
     45 @end
     46 
     47 @implementation ClassDerived // expected-note {{detected while default synthesizing properties in class implementation}}
     48 - (void) Meth:(ClassBase*)foo {
     49   super.foo = foo; // must work with no warning
     50   [super setFoo:foo]; // works with no warning
     51 }
     52 @end
     53 
     54 @implementation IFaceNotFound (Foo) // expected-error {{cannot find interface declaration for 'IFaceNotFound'}}
     55 -(int) foo {
     56   return super.foo; // expected-error {{expected identifier or '('}}
     57 }
     58 @end
     59