[InstCombine] Preserve NSW flags for `lshr (mul nuw X, C1), C2 -> mul nuw nsw X,...
[llvm-project.git] / clang / test / SemaObjC / super-property-notation.m
blob0a7b1166aa2256417ff6bb2aea86b9bc34ef0b8b
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 @interface B
4 +(int) classGetter;
5 -(int) getter;
6 @end
8 @interface A : B
9 @end
11 @implementation A
12 +(int) classGetter {
13   return 0;
16 +(int) classGetter2 {
17   return super.classGetter;
20 -(void) method {
21   int x = super.getter;
23 @end
25 void f0(void) {
26   // FIXME: not implemented yet.
27   //int l1 = A.classGetter;
28   int l2 = [A classGetter2];
31 __attribute__((objc_root_class)) @interface ClassBase 
32 @property (nonatomic, retain) ClassBase * foo; // expected-note {{property declared here}}
33 @end
35 @implementation ClassBase 
36 - (void) Meth:(ClassBase*)foo {
37   super.foo = foo; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
38   [super setFoo:foo]; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
40 @end
42 @interface ClassDerived : ClassBase 
43 @property (nonatomic, retain) ClassDerived * foo; // expected-warning {{auto property synthesis will not synthesize property 'foo'; it will be implemented by its superclass}}
44 @end
46 @implementation ClassDerived // expected-note {{detected while default synthesizing properties in class implementation}}
47 - (void) Meth:(ClassBase*)foo {
48   super.foo = foo; // must work with no warning
49   [super setFoo:foo]; // works with no warning
51 @end
53 @implementation IFaceNotFound (Foo) // expected-error {{cannot find interface declaration for 'IFaceNotFound'}}
54 -(int) foo {
55   return super.foo; // expected-error {{expected identifier or '('}}
57 @end