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
25void 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