blob: b7aac198c5180513f7e2a25585fd9eaf79cd1668 [file] [log] [blame]
// Tests that we emit unified constructor/destructor linkage names
// for ABIs that support it.
// Check that -gstructor-decl-linkage-names is the default.
// RUN: %clang_cc1 -triple aarch64-apple-macosx -emit-llvm -debug-info-kind=standalone \
// RUN: %s -o - | FileCheck %s --check-prefixes=CHECK,ITANIUM
//
// Check with -gstructor-decl-linkage-names.
// RUN: %clang_cc1 -triple aarch64-apple-macosx -emit-llvm -debug-info-kind=standalone \
// RUN: -gstructor-decl-linkage-names %s -o - | FileCheck %s --check-prefixes=CHECK,ITANIUM
//
// Check with -gno-structor-decl-linkage-names.
// RUN: %clang_cc1 -triple aarch64-apple-macosx -emit-llvm -debug-info-kind=standalone \
// RUN: -gno-structor-decl-linkage-names %s -o - | FileCheck %s --check-prefixes=CHECK,DISABLE
//
// Check ABI without structor variants.
// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm -debug-info-kind=standalone \
// RUN: -gstructor-decl-linkage-names %s -o - | FileCheck %s --check-prefixes=CHECK,MSABI
struct Base {
Base(int x);
~Base();
};
Base::Base(int x) {}
Base::~Base() {}
// Check that we emit unified ctor/dtor (C4/D4) on Itanium but not for MS-ABI.
// CHECK: ![[BASE_CTOR_DECL:[0-9]+]] = !DISubprogram(name: "Base"
// MSABI-NOT: linkageName:
// DISABLE-NOT: linkageName:
// ITANIUM-SAME: linkageName: "_ZN4BaseC4Ei"
// CHECK-SAME: spFlags: 0
// CHECK: ![[BASE_DTOR_DECL:[0-9]+]] = !DISubprogram(name: "~Base"
// MSABI-NOT: linkageName:
// DISABLE-NOT: linkageName:
// ITANIUM-SAME: linkageName: "_ZN4BaseD4Ev"
// CHECK-SAME: spFlags: 0
// Check that the ctor/dtor definitions have linkage names that aren't
// the ones on the declaration.
// CHECK: !DISubprogram(name: "Base"
// MSABI-SAME: linkageName:
// ITANIUM-SAME: linkageName: "_ZN4BaseC2Ei"
// CHECK-SAME: spFlags: DISPFlagDefinition
// CHECK-SAME: declaration: ![[BASE_CTOR_DECL]]
// ITANIUM: !DISubprogram(name: "Base"
// ITANIUM-SAME: linkageName: "_ZN4BaseC1Ei"
// ITANIUM-SAME: spFlags: DISPFlagDefinition
// ITANIUM-SAME: declaration: ![[BASE_CTOR_DECL]]
// CHECK: !DISubprogram(name: "~Base"
// MSABI-SAME: linkageName:
// ITANIUM-SAME: linkageName: "_ZN4BaseD2Ev"
// CHECK-SAME: spFlags: DISPFlagDefinition
// CHECK-SAME: declaration: ![[BASE_DTOR_DECL]]
// ITANIUM: !DISubprogram(name: "~Base"
// ITANIUM-SAME: linkageName: "_ZN4BaseD1Ev"
// ITANIUM-SAME: spFlags: DISPFlagDefinition
// ITANIUM-SAME: declaration: ![[BASE_DTOR_DECL]]
struct Derived : public Base {
using Base::Base;
} d(5);
// CHECK: !DISubprogram(name: "Base"
// MSABI-SAME: linkageName:
// ITANIUM-SAME: linkageName: "_ZN7DerivedCI14BaseEi"
// CHECK-SAME: spFlags: {{.*}}DISPFlagDefinition
// CHECK-SAME: declaration: ![[BASE_INHERIT_CTOR_DECL:[0-9]+]]
// CHECK: [[BASE_INHERIT_CTOR_DECL]] = !DISubprogram(name: "Base"
// MSABI-NOT: linkageName:
// DISABLE-NOT: linkageName:
// ITANIUM-SAME: linkageName: "_ZN7DerivedCI44BaseEi"
// CHECK-SAME spFlags: 0
// ITANIUM: !DISubprogram(name: "Base"
// ITANIUM-SAME: linkageName: "_ZN7DerivedCI24BaseEi"
// ITANIUM-SAME: spFlags: DISPFlagDefinition
// ITANIUM-SAME: declaration: ![[BASE_INHERIT_CTOR_DECL:[0-9]+]]
// MSABI: !DISubprogram(name: "~Derived"
// DISABLE: !DISubprogram(name: "~Derived"