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