xref: /llvm-project/clang/test/Modules/reduced-bmi-generating-codes.cppm (revision 7c1d9b15eee3a34678addab2bab66f3020ac0753)
12582965cSChuanqi Xu// Although the reduced BMI are not designed to be generated,
22582965cSChuanqi Xu// it is helpful for testing whether we've reduced the definitions.
32582965cSChuanqi Xu//
42582965cSChuanqi Xu// RUN: rm -rf %t
52582965cSChuanqi Xu// RUN: mkdir -p %t
62582965cSChuanqi Xu// RUN: split-file %s %t
72582965cSChuanqi Xu//
82582965cSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/a.cppm \
92582965cSChuanqi Xu// RUN:     -emit-reduced-module-interface -o %t/a.pcm
102582965cSChuanqi Xu// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple %t/b.cpp \
11*7c1d9b15SFangrui Song// RUN:     -fmodule-file=a=%t/a.pcm -emit-llvm -o - \
122582965cSChuanqi Xu// RUN:     | FileCheck %t/b.cpp
132582965cSChuanqi Xu
142582965cSChuanqi Xu//--- a.cppm
152582965cSChuanqi Xuexport module a;
162582965cSChuanqi Xu
172582965cSChuanqi Xuexport template <class T>
182582965cSChuanqi Xuclass A {
192582965cSChuanqi Xupublic:
202582965cSChuanqi Xu    int member() {
212582965cSChuanqi Xu        return 43;
222582965cSChuanqi Xu    }
232582965cSChuanqi Xu};
242582965cSChuanqi Xu
252582965cSChuanqi Xu// Instantiate `A<int>::member()`.
262582965cSChuanqi Xuexport int a_member = A<int>().member();
272582965cSChuanqi Xu
282582965cSChuanqi Xuexport const int a = 43;
292582965cSChuanqi Xu
302582965cSChuanqi Xu//--- b.cpp
312582965cSChuanqi Xuimport a;
322582965cSChuanqi Xu
332582965cSChuanqi Xustatic_assert(a == 43);
342582965cSChuanqi Xu
352582965cSChuanqi Xuint b() {
362582965cSChuanqi Xu    A<int> a;
372582965cSChuanqi Xu    return a.member();
382582965cSChuanqi Xu}
392582965cSChuanqi Xu
402582965cSChuanqi Xu// CHECK: define{{.*}}@_ZNW1a1AIiE6memberEv
41