Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / SemaObjC / class-message-protocol-lookup.m
blobc6bc24b3133a1b6962b6949289c59bce5c923a1b
1 // RUN: %clang_cc1  -fsyntax-only -verify -Wno-objc-root-class %s
3 @interface RandomObject {
4 @private
6 + (id)alloc;
7 @end
9 @protocol TestProtocol
10 - (void)nothingInteresting;
11 @end
13 @protocol Test2Protocol
14 + (id)alloc;
15 - (id)alloc2; // expected-note 2 {{method 'alloc2' declared here}}
16 @end
18 @implementation RandomObject
19 - (void) Meth {
20     Class<TestProtocol> c = [c alloc]; //  expected-warning {{class method '+alloc' not found (return type defaults to 'id')}}
21     Class<Test2Protocol> c1 = [c1 alloc2]; //  expected-warning {{instance method 'alloc2' found instead of class method 'alloc2'}}
22     Class<Test2Protocol> c2 = [c2 alloc]; //  ok
24 + (id)alloc { return 0; }
25 @end
27 int main (void)
29     Class<TestProtocol> c = [c alloc]; //  expected-warning {{class method '+alloc' not found (return type defaults to 'id')}}
30     Class<Test2Protocol> c1 = [c1 alloc2]; //  expected-warning {{instance method 'alloc2' found instead of class method 'alloc2'}}
31     Class<Test2Protocol> c2 = [c2 alloc]; //  ok
32     return 0;
35 @protocol NSObject
37 - (int)respondsToSelector:(SEL)aSelector;
39 @end
41 __attribute__((objc_root_class))
42 @interface NSObject <NSObject>
44 @end
46 @protocol OtherProto
48 - (void)otherInstanceMethod; // expected-note {{method 'otherInstanceMethod' declared here}}
50 @end
52 @protocol MyProto <NSObject, OtherProto>
53 @end
55 void allowInstanceMethodsFromRootProtocols(Class<MyProto> c) {
56   [c respondsToSelector: @selector(instanceMethod)]; // no warning
57   [c otherInstanceMethod]; //  expected-warning {{instance method 'otherInstanceMethod' found instead of class method 'otherInstanceMethod'}}