From ee41cff421132bb2891a4ad51fae0f83ffcfe087 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Thu, 3 Jul 2003 19:57:45 +0200 Subject: [PATCH] * gcc.dg/i386-call-1.c: New test. From-SVN: r68892 --- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.dg/i386-call-1.c | 39 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/i386-call-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c158b78539d5..fe736d806d17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-07-03 Eric Botcazou + + * gcc.dg/i386-call-1.c: New test. + 2003-07-03 Nathan Sidwell PR c++/9162 diff --git a/gcc/testsuite/gcc.dg/i386-call-1.c b/gcc/testsuite/gcc.dg/i386-call-1.c new file mode 100644 index 000000000000..9cd49da3b2fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/i386-call-1.c @@ -0,0 +1,39 @@ +/* PR optimization/11304 */ +/* Originator: */ +/* { 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; +}