xref: /llvm-project/clang/test/CodeGenCXX/cxx20-module-internal.cppm (revision 9eda5fc0c6eafd772d0e6ff015352136c5e505a4)
1// RUN: %clang_cc1 -std=c++20 %s -triple %itanium_abi_triple -emit-llvm -o - | FileCheck %s
2
3// internal-linkage symbol mangling is implementation defined.  Let's
4// not mangle in the module attachment -- that unnecessarily bloats
5// the symbols.
6
7export module A;
8
9// CHECK-DAG: void @_ZL6addonev(
10static void addone() {}
11// CHECK-DAG: @_ZL1x =
12static int x = 5;
13
14namespace {
15// CHECK-DAG: void @_ZN12_GLOBAL__N_14frobEv(
16void frob() {}
17// CHECK-DAG: @_ZN12_GLOBAL__N_11yE =
18int y = 2;
19struct Bill {
20  void F();
21};
22// CHECK-DAG: void @_ZN12_GLOBAL__N_14Bill1FEv(
23void Bill::F() {}
24} // namespace
25
26// CHECK-DAG: void @_ZL4FrobPN12_GLOBAL__N_14BillE(
27static void Frob(Bill *b) {
28  if (b)
29    b->F();
30}
31
32namespace N {
33// CHECK-DAG: void @_ZN1NL5innerEv(
34static void inner() {}
35// CHECK-DAG: @_ZN1NL1zE
36static int z = 3;
37} // namespace N
38
39// CHECK-DAG: void @_ZW1A6addsixv(
40void addsix() {
41  Frob(nullptr);
42  frob();
43  addone();
44  void(x + y + N::z);
45  N::inner();
46}
47