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