1 // RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s 2 3 #define WEAK __attribute__ ((weak)) 4 5 class WEAK A { 6 virtual void foo(); 7 }; 8 9 class B : public A { 10 virtual void foo(); 11 }; 12 void A::foo() { } 13 void B::foo() { } 14 15 class T {}; 16 class T1 {}; 17 18 class C : public T1, public B, public T { 19 virtual void foo(); 20 }; 21 void C::foo() { } 22 23 class V1 : public virtual A { 24 virtual void foo(); 25 }; 26 27 class V2 : public virtual V1 { 28 virtual void foo(); 29 }; 30 void V1::foo() { } 31 void V2::foo() { } 32 33 // CHECK: @_ZTI1A = weak_odr {{(dso_local |hidden )?}}constant 34 // CHECK: @_ZTS1A = weak_odr {{(dso_local |hidden )?}}constant 35 // CHECK: @_ZTI1B = weak_odr {{(dso_local |hidden )?}}constant 36 // CHECK: @_ZTS1B = weak_odr {{(dso_local |hidden )?}}constant 37 // CHECK: @_ZTI1C = weak_odr {{(dso_local |hidden )?}}constant 38 // CHECK: @_ZTS1C = weak_odr {{(dso_local |hidden )?}}constant 39 // CHECK: @_ZTI2T1 = linkonce_odr {{(dso_local |hidden )?}}constant 40 // CHECK: @_ZTS2T1 = linkonce_odr {{(dso_local |hidden )?}}constant 41 // CHECK: @_ZTI1T = linkonce_odr {{(dso_local |hidden )?}}constant 42 // CHECK: @_ZTS1T = linkonce_odr {{(dso_local |hidden )?}}constant 43 // CHECK: @_ZTI2V1 = weak_odr {{(dso_local |hidden )?}}constant 44 // CHECK: @_ZTS2V1 = weak_odr {{(dso_local |hidden )?}}constant 45 // CHECK: @_ZTI2V2 = weak_odr {{(dso_local |hidden )?}}constant 46 // CHECK: @_ZTS2V2 = weak_odr {{(dso_local |hidden )?}}constant 47