From 9eda5fc0c6eafd772d0e6ff015352136c5e505a4 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 6 Apr 2022 07:24:06 -0700 Subject: [PATCH] [clang] Verify internal entity module mangling Internal symbol mangling is implementation-defined. We do not mangle any module attachment, and this adds a test to verify that. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D123220 --- clang/test/CodeGenCXX/cxx20-module-internal.cppm | 46 ++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 clang/test/CodeGenCXX/cxx20-module-internal.cppm diff --git a/clang/test/CodeGenCXX/cxx20-module-internal.cppm b/clang/test/CodeGenCXX/cxx20-module-internal.cppm new file mode 100644 index 0000000..b453583 --- /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(); +} -- 2.7.4