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