1/* PR optimization/11304 */ 2/* Originator: <manuel.serrano@sophia.inria.fr> */ 3/* { dg-do run } */ 4/* { dg-options "-O -fomit-frame-pointer" } */ 5 6/* Verify that %eax is always restored after a call. */ 7 8extern void abort(void); 9 10volatile int r; 11 12void set_eax(int val) 13{ 14 __asm__ __volatile__ ("mov %0, %%eax" : : "m" (val)); 15} 16 17void foo(int val) 18{ 19 r = val; 20} 21 22int bar(int x) 23{ 24 if (x) 25 { 26 set_eax(0); 27 return x; 28 } 29 30 foo(x); 31} 32 33int main(void) 34{ 35 if (bar(1) != 1) 36 abort(); 37 38 return 0; 39} 40