New test for pr 6788
From-SVN: r53881
This commit is contained in:
parent
e133041bb6
commit
94fdf99db0
42
gcc/testsuite/g++.dg/opt/thunk1.C
Normal file
42
gcc/testsuite/g++.dg/opt/thunk1.C
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// PR 6788
|
||||||
|
// Test that the thunk adjusts the this pointer properly.
|
||||||
|
// { dg-do run }
|
||||||
|
|
||||||
|
extern "C" void abort ();
|
||||||
|
|
||||||
|
struct A
|
||||||
|
{
|
||||||
|
virtual void foo() = 0;
|
||||||
|
char large[33*1024];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct B
|
||||||
|
{
|
||||||
|
virtual void foo() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct C : public A, public B
|
||||||
|
{
|
||||||
|
virtual void foo();
|
||||||
|
};
|
||||||
|
|
||||||
|
static C *match;
|
||||||
|
|
||||||
|
void C::foo()
|
||||||
|
{
|
||||||
|
if (this != match)
|
||||||
|
abort ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void bar(B *x)
|
||||||
|
{
|
||||||
|
x->foo();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
C obj;
|
||||||
|
match = &obj;
|
||||||
|
bar(&obj);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user