1*67e74705SXin Li // RUN: %clang_cc1 %s -triple i386-unknown-unknown -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li // <rdar://problem/7929157> & <rdar://problem/8104369> 3*67e74705SXin Li 4*67e74705SXin Li struct A { fA5*67e74705SXin Li virtual int f() { return 1; } 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li struct B { fB9*67e74705SXin Li virtual int f() { return 2; } 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li struct C : A, B { fC13*67e74705SXin Li virtual int f() { return 3; } 14*67e74705SXin Li }; 15*67e74705SXin Li 16*67e74705SXin Li struct D : C { fD17*67e74705SXin Li virtual int f() { return 4; } 18*67e74705SXin Li }; 19*67e74705SXin Li f(D * d)20*67e74705SXin Listatic int f(D* d) { 21*67e74705SXin Li B* b = d; 22*67e74705SXin Li return b->f(); 23*67e74705SXin Li }; 24*67e74705SXin Li g()25*67e74705SXin Liint g() { 26*67e74705SXin Li D d; 27*67e74705SXin Li return f(&d); 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li // Thunks should be marked as "linkonce ODR" not "weak". 31*67e74705SXin Li // 32*67e74705SXin Li // CHECK: define linkonce_odr i32 @_ZThn{{[48]}}_N1D1fEv 33*67e74705SXin Li // CHECK: define linkonce_odr i32 @_ZThn{{[48]}}_N1C1fEv 34