| // 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" |