1 // RUN: %clang_cc1 -emit-llvm -triple x86_64 -Werror %s -o - | FileCheck %s 2 3 // CHECK: @llvm.used = appending global [7 x i8*] 4 // CHECK-SAME: @_ZN2X0C2Ev 5 // CHECK-SAME: @_ZN2X0C1Ev 6 // CHECK-SAME: @_ZN2X0D2Ev 7 // CHECK-SAME: @_ZN2X0D1Ev 8 // CHECK-SAME: @_ZN2X16Nested2f1Ev 9 // CHECK-SAME: @_ZN10merge_declL4funcEv 10 // CHECK-SAME: @_ZN18instantiate_member1SIiE1fEv 11 12 struct X0 { 13 // CHECK: define linkonce_odr{{.*}} @_ZN2X0C1Ev({{.*}} X0X014 __attribute__((used, retain)) X0() {} 15 // CHECK: define linkonce_odr{{.*}} @_ZN2X0D1Ev({{.*}} ~X0X016 __attribute__((used, retain)) ~X0() {} 17 }; 18 19 struct X1 { 20 struct Nested { 21 // CHECK-NOT: 2f0Ev 22 // CHECK: define linkonce_odr{{.*}} @_ZN2X16Nested2f1Ev({{.*}} f0X1::Nested23 void __attribute__((retain)) f0() {} f1X1::Nested24 void __attribute__((used, retain)) f1() {} 25 }; 26 }; 27 28 // CHECK: define internal void @_ZN10merge_declL4funcEv(){{.*}} 29 namespace merge_decl { 30 static void func(); bar()31void bar() { void func() __attribute__((used, retain)); } func()32static void func() {} 33 } // namespace merge_decl 34 35 namespace instantiate_member { 36 template <typename T> 37 struct S { finstantiate_member::S38 void __attribute__((used, retain)) f() {} 39 }; 40 test()41void test() { 42 // CHECK: define linkonce_odr{{.*}} void @_ZN18instantiate_member1SIiE1fEv({{.*}} 43 S<int> a; 44 } 45 } // namespace instantiate_member 46