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 { |
5 | virtual int f() { return 1; } |
6 | }; |
7 | |
8 | struct B { |
9 | virtual int f() { return 2; } |
10 | }; |
11 | |
12 | struct C : A, B { |
13 | virtual int f() { return 3; } |
14 | }; |
15 | |
16 | struct D : C { |
17 | virtual int f() { return 4; } |
18 | }; |
19 | |
20 | static int f(D* d) { |
21 | B* b = d; |
22 | return b->f(); |
23 | }; |
24 | |
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 | |