| /* 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; | |
| } |