[clang] Handle __declspec() attributes in using
[llvm-project.git] / clang / test / SemaObjC / method-direct-arc.m
blob6877cddb073b571db0fb30f1011953b5335d8977
1 // RUN: %clang_cc1 -fobjc-arc -fsyntax-only -verify -Wselector-type-mismatch %s
3 extern Class object_getClass(id);
5 __attribute__((objc_root_class))
6 @interface Root
7 - (Class)class;
8 + (void)directMethod __attribute__((objc_direct)); // expected-note {{direct method 'directMethod' declared here}}
9 + (void)anotherDirectMethod __attribute__((objc_direct));
10 @end
12 @implementation Root
13 - (Class)class
15   return object_getClass(self);
17 + (void)directMethod {
19 + (void)anotherDirectMethod {
20   [self directMethod]; // this should not warn
22 + (void)regularMethod {
23   [self directMethod];        // this should not warn
24   [self anotherDirectMethod]; // this should not warn
26 - (void)regularInstanceMethod {
27   [[self class] directMethod]; // expected-error {{messaging a Class with a method that is possibly direct}}
29 @end
31 @interface Sub : Root
32 @end
34 @implementation Sub
35 + (void)foo {
36   [self directMethod]; // this should not warn
38 @end
40 __attribute__((objc_root_class))
41 @interface Other
42 @end
44 @implementation Other
45 + (void)bar {
46   [self directMethod]; // expected-error {{no known class method for selector 'directMethod'}}
48 @end