blob: 7f3602ceeccfae794011a226b8f172943797651f [file] [edit]
// RUN: %clang_cc1 -triple x86_64-linux-gnu %s -emit-llvm -I%S -std=c++20 -o - | FileCheck %s
// RUN: %clang_cc1 -triple x86_64-linux-gnu -fclang-abi-compat=22 %s -emit-llvm -I%S -std=c++20 -o - | FileCheck --check-prefix=ABICOMPAT22 %s
// Ensure that local classes mangled with <local-name> while mangling a lamda
// in default member initializer.
// Itanium ABI 5.1.2
// Names
// <...> Entities declared within a function, including members of local classes, are mangled with <local-name>. Entities declared in a namespace or class scope are mangled with <nested-name>. <...>
#include <typeinfo>
void foo() {
{
struct Test {
const std::type_info& a = typeid([] {});
const std::type_info& b = typeid([] {});
} T;
}
{
struct Test {
const std::type_info& a = typeid([] {});
const std::type_info& b = typeid([] {});
} T;
}
}
// _Z
// TI
// Z3foovE ; local-name scope
// N
// 4Test
// 1a ; member a
// M ; member-initializer context
// UlvE_ ; lambda closure type
// E
// CHECK: @_ZTIZ3foovEN4Test1aMUlvE_E
// CHECK: @_ZTSZ3foovEN4Test1aMUlvE_E
// CHECK: @_ZTIZ3foovEN4Test1bMUlvE_E
// CHECK: @_ZTSZ3foovEN4Test1bMUlvE_E
// _Z
// TI
// Z3foovE ; local-name scope
// N
// 4Test
// 1a ; member a
// M ; member-initializer context
// UlvE_ ; lambda closure type
// E
// _0 ; second local 'Test' definition
// CHECK: @_ZTIZ3foovEN4Test1aMUlvE_E_0
// CHECK: @_ZTSZ3foovEN4Test1aMUlvE_E_0
// CHECK: @_ZTIZ3foovEN4Test1bMUlvE_E_0
// CHECK: @_ZTSZ3foovEN4Test1bMUlvE_E_0
// CHECK-LABEL: define internal void @_ZZ3foovEN4TestC2Ev
// CHECK: store ptr @_ZTIZ3foovEN4Test1aMUlvE_E
// CHECK: store ptr @_ZTIZ3foovEN4Test1bMUlvE_E
// CHECK-LABEL: define internal void @_ZZ3foovEN4TestC2E_0v
// CHECK: store ptr @_ZTIZ3foovEN4Test1aMUlvE_E_0
// CHECK: store ptr @_ZTIZ3foovEN4Test1bMUlvE_E_0
// ABICOMPAT22: @_ZTIN3foo4Test1aMUlvE_E
// ABICOMPAT22: @_ZTSN3foo4Test1aMUlvE_E
// ABICOMPAT22: @_ZTIN3foo4Test1bMUlvE_E
// ABICOMPAT22: @_ZTSN3foo4Test1bMUlvE_E
// ABICOMPAT22-LABEL: define internal void @_ZZ3foovEN4TestC2Ev
// ABICOMPAT22: store ptr @_ZTIN3foo4Test1aMUlvE_E
// ABICOMPAT22: store ptr @_ZTIN3foo4Test1bMUlvE_E
// ABICOMPAT22-LABEL: define internal void @_ZZ3foovEN4TestC2E_0v
// ABICOMPAT22: store ptr @_ZTIN3foo4Test1aMUlvE_E
// ABICOMPAT22: store ptr @_ZTIN3foo4Test1bMUlvE_E