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