[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / Modules / decldef.mm
blob02883dc1d31e7f3e9b6b03f4e679232d5bcb27c9
1 // RUN: rm -rf %t
2 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fobjc-arc -I %S/Inputs -fmodules-cache-path=%t %s -verify -DUSE_1 -DUSE_2 -DUSE_3 -DUSE_4 -DUSE_5
3 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fobjc-arc -I %S/Inputs -fmodules-cache-path=%t %s -verify -DUSE_2 -DUSE_3 -DUSE_4 -DUSE_5
4 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fobjc-arc -I %S/Inputs -fmodules-cache-path=%t %s -verify -DUSE_3 -DUSE_4 -DUSE_5
5 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fobjc-arc -I %S/Inputs -fmodules-cache-path=%t %s -verify -DUSE_4 -DUSE_5
6 // RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fobjc-arc -I %S/Inputs -fmodules-cache-path=%t %s -verify -DUSE_5
8 // expected-note@Inputs/def.h:5 0-1{{here}}
9 // expected-note@Inputs/def.h:11 0-1{{here}}
10 // expected-note@Inputs/def.h:16 0-1{{here}}
11 // expected-note@Inputs/def-include.h:11 0-1{{here}}
13 @class Def;
14 Def *def;
15 class Def2; // expected-note 0-1{{forward decl}}
16 Def2 *def2;
17 namespace Def3NS { class Def3; } // expected-note 0-1{{forward decl}}
18 Def3NS::Def3 *def3;
20 @interface Unrelated
21 - defMethod;
22 @end
24 @import decldef;
25 #ifdef USE_1
26 A *a1; // expected-error{{declaration of 'A' must be imported from module 'decldef.Def'}}
27 B *b1;
28 #define USED
29 #endif
30 @import decldef.Decl;
32 A *a2;
33 B *b;
35 void testA(A *a) {
36 #ifdef USE_2
37   a->ivar = 17;
38   #ifndef USED
39   // expected-error@-2{{definition of 'A' must be imported from module 'decldef.Def' before it is required}}
40   #define USED
41   #endif
42 #endif
45 void testB() {
46 #ifdef USE_3
47   B b;
48   #ifndef USED
49   // expected-error@-2{{definition of 'B' must be imported from module 'decldef.Def' before it is required}}
50   #define USED
51   #endif
52 #endif
55 void testDef() {
56 #ifdef USE_4
57   [def defMethod];
58   #ifndef USED
59   // expected-error@-2{{definition of 'Def' must be imported from module 'decldef.Def' before it is required}}
60   #define USED
61   #endif
62 #endif
65 void testDef2() {
66 #ifdef USE_5
67   def2->func();
68   def3->func();
69   #ifndef USED
70   // expected-error@-3 {{definition of 'Def2' must be imported}}
71   #define USED
72   #endif
73 #endif