40 lines
527 B
C
40 lines
527 B
C
/* PR optimization/11304 */
|
|
/* Originator: <manuel.serrano@sophia.inria.fr> */
|
|
/* { dg-do run { target i?86-*-* } } */
|
|
/* { dg-options "-O -fomit-frame-pointer" } */
|
|
|
|
/* Verify that %eax is always restored after a call. */
|
|
|
|
extern void abort(void);
|
|
|
|
volatile int r;
|
|
|
|
void set_eax(int val)
|
|
{
|
|
__asm__ __volatile__ ("mov %0, %%eax" : : "m" (val));
|
|
}
|
|
|
|
void foo(int val)
|
|
{
|
|
r = val;
|
|
}
|
|
|
|
int bar(int x)
|
|
{
|
|
if (x)
|
|
{
|
|
set_eax(0);
|
|
return x;
|
|
}
|
|
|
|
foo(x);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
if (bar(1) != 1)
|
|
abort();
|
|
|
|
return 0;
|
|
}
|