diff --git a/clang/test/CodeGenCXX/cxx20-module-internal.cppm b/clang/test/CodeGenCXX/cxx20-module-internal.cppm new file mode 100644 --- /dev/null +++ b/clang/test/CodeGenCXX/cxx20-module-internal.cppm @@ -0,0 +1,46 @@ +// RUN: %clang_cc1 -std=c++20 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s + +// internal-linkage symbol mangling is implementation defined. Let's +// not mangle in the module attachment -- that unnecessarily bloats +// the symbols. + +export module A; + +// CHECK-DAG: void @_ZL6addonev( +static void addone() {} +// CHECK-DAG: @_ZL1x = +static int x = 5; + +namespace { +// CHECK-DAG: void @_ZN12_GLOBAL__N_14frobEv( +void frob() {} +// CHECK-DAG: @_ZN12_GLOBAL__N_11yE = +int y = 2; +struct Bill { + void F(); +}; +// CHECK-DAG: void @_ZN12_GLOBAL__N_14Bill1FEv( +void Bill::F() {} +} // namespace + +// CHECK-DAG: void @_ZL4FrobPN12_GLOBAL__N_14BillE( +static void Frob(Bill *b) { + if (b) + b->F(); +} + +namespace N { +// CHECK-DAG: void @_ZN1NL5innerEv( +static void inner() {} +// CHECK-DAG: @_ZN1NL1zE +static int z = 3; +} // namespace N + +// CHECK-DAG: void @_ZW1A6addsixv( +void addsix() { + Frob(nullptr); + frob(); + addone(); + void(x + y + N::z); + N::inner(); +}