blob: 04fb8b0d0d5d94d440e2ca17e71c7afc663846c5 [file] [log] [blame]
// PR target/101023
// { dg-do run { target { ! ia32 } } }
// { dg-options "-O2 -mtune=opteron -mstackrealign --param=hot-bb-frequency-fraction=1" }
struct S {
__attribute__((noipa)) int m1 ();
__attribute__((noipa)) void m2 ();
};
struct T {
__attribute__((noipa)) virtual S m3 ();
};
struct U : T {
int u;
__attribute__((noipa)) U (int);
};
int *a;
S *b;
int c;
int
S::m1 ()
{
return 0;
}
void
S::m2 ()
{
}
S
T::m3 ()
{
return S ();
}
U::U (int) : u (4)
{
}
__attribute__((noipa)) int
foo ()
{
if (a)
return 0;
U d(c);
S *e = b;
e->m2 ();
return e->m1();
}
int
main ()
{
register int r12 __asm ("r12") = 1;
register int rax __asm ("rax") = 2;
asm volatile ("" : "+r" (r12), "+r" (rax));
foo ();
asm volatile ("" : "+r" (r12));
if (r12 != 1)
__builtin_abort ();
return 0;
}