[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / Modules / pr78830.cppm
blobb8dbe92f54166c0615044e3544714377817cc827
1 // RUN: rm -rf %t
2 // RUN: mkdir -p %t
3 // RUN: split-file %s %t
4 //
5 // RUN: %clang_cc1 -std=c++20 %t/Type.cppm -emit-module-interface -o \
6 // RUN:     %t/MyVec-Type.pcm -triple=x86_64-linux-gnu 
7 // RUN:%clang_cc1 -std=c++20 %t/Vec.cppm -emit-module-interface -o \
8 // RUN:     %t/MyVec-Vec.pcm -fmodule-file=MyVec:Type=%t/MyVec-Type.pcm \
9 // RUN:     -triple=x86_64-linux-gnu 
10 // RUN: %clang_cc1 -std=c++20 %t/Vec2.cppm -emit-module-interface -o \
11 // RUN:     %t/MyVec-Vec2.pcm -fmodule-file=MyVec:Type=%t/MyVec-Type.pcm \
12 // RUN:     -triple=x86_64-linux-gnu 
13 // RUN: %clang_cc1 -std=c++20 %t/Calculator.cppm -emit-module-interface -o \
14 // RUN:     %t/MyVec-Calculator.pcm -fmodule-file=MyVec:Vec=%t/MyVec-Vec.pcm   \
15 // RUN:     -fmodule-file=MyVec:Vec2=%t/MyVec-Vec2.pcm \
16 // RUN:     -fmodule-file=MyVec:Type=%t/MyVec-Type.pcm \
17 // RUN:     -triple=x86_64-linux-gnu 
18 // RUN: %clang_cc1 -std=c++20 %t/MyVec-Calculator.pcm -emit-llvm \
19 // RUN:     -fmodule-file=MyVec:Vec=%t/MyVec-Vec.pcm   \
20 // RUN:     -fmodule-file=MyVec:Vec2=%t/MyVec-Vec2.pcm \
21 // RUN:     -fmodule-file=MyVec:Type=%t/MyVec-Type.pcm \
22 // RUN:     -triple=x86_64-linux-gnu -o - \
23 // RUN:     | FileCheck %t/Calculator.cppm
25 //--- Type.cppm
26 export module MyVec:Type;
28 template <class T> struct Size {
29   auto total() const { return 1; }
32 //--- Vec.cppm
33 export module MyVec:Vec;
34 import :Type;
36 int size_ = Size<int>().total();
38 //--- Vec2.cppm
39 export module MyVec:Vec2;
40 import :Type;
42 struct Vec2 {
43     Size<int> size_;
46 //--- Calculator.cppm
47 export module MyVec:Calculator;
49 import :Vec;
50 import :Vec2;
52 auto Calculate() { return Size<int>().total(); };
54 // Check the emitted module initializer to make sure we generate the module unit
55 // successfully.
56 // CHECK: @_ZW5MyVec9Calculatev