46 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -triple x86_64 -Werror %s -o - | FileCheck %s2 3// CHECK: @llvm.used = appending global [7 x ptr]4// CHECK-SAME: @_ZN2X0C2Ev5// CHECK-SAME: @_ZN2X0C1Ev6// CHECK-SAME: @_ZN2X0D2Ev7// CHECK-SAME: @_ZN2X0D1Ev8// CHECK-SAME: @_ZN2X16Nested2f1Ev9// CHECK-SAME: @_ZN10merge_declL4funcEv10// CHECK-SAME: @_ZN18instantiate_member1SIiE1fEv11 12struct X0 {13 // CHECK: define linkonce_odr{{.*}} @_ZN2X0C1Ev({{.*}}14 __attribute__((used, retain)) X0() {}15 // CHECK: define linkonce_odr{{.*}} @_ZN2X0D1Ev({{.*}}16 __attribute__((used, retain)) ~X0() {}17};18 19struct X1 {20 struct Nested {21 // CHECK-NOT: 2f0Ev22 // CHECK: define linkonce_odr{{.*}} @_ZN2X16Nested2f1Ev({{.*}}23 void __attribute__((retain)) f0() {}24 void __attribute__((used, retain)) f1() {}25 };26};27 28// CHECK: define internal void @_ZN10merge_declL4funcEv(){{.*}}29namespace merge_decl {30static void func();31void bar() { void func() __attribute__((used, retain)); }32static void func() {}33} // namespace merge_decl34 35namespace instantiate_member {36template <typename T>37struct S {38 void __attribute__((used, retain)) f() {}39};40 41void test() {42 // CHECK: define linkonce_odr{{.*}} void @_ZN18instantiate_member1SIiE1fEv({{.*}}43 S<int> a;44}45} // namespace instantiate_member46