| /* { dg-options "-mthumb" { target arm*-*-* } } */ |
| /* { dg-do run } */ |
| /* { dg-timeout 100 } */ |
| |
| /* PR middle-end/39378 */ |
| /* Check if the thunk target function is emitted correctly. */ |
| class B1 |
| { |
| public: |
| virtual int foo1(void); |
| int b1; |
| }; |
| |
| class B2 |
| { |
| public: |
| virtual int foo2 (void); |
| int b2; |
| }; |
| |
| class D : public B1, public B2 |
| { |
| int foo1(void); |
| int foo2(void); |
| int d; |
| }; |
| |
| int B1::foo1(void) |
| { |
| return 3; |
| } |
| |
| int B2::foo2(void) |
| { |
| return 4; |
| } |
| |
| int D::foo1(void) |
| { |
| return 1; |
| } |
| |
| int D::foo2(void) |
| { |
| return 2; |
| } |
| |
| __attribute__((noinline)) int test(B2* bp) |
| { |
| return bp->foo2(); |
| } |
| |
| int main() |
| { |
| B2 *bp = new D(); |
| if (test(bp) == 2) |
| return 0; |
| else |
| return 1; |
| } |