3 // RUN: split-file %s %t
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
26 export module MyVec:Type;
28 template <class T> struct Size {
29 auto total() const { return 1; }
33 export module MyVec:Vec;
36 int size_ = Size<int>().total();
39 export module MyVec:Vec2;
47 export module MyVec:Calculator;
52 auto Calculate() { return Size<int>().total(); };
54 // Check the emitted module initializer to make sure we generate the module unit
56 // CHECK: @_ZW5MyVec9Calculatev