From: Eric Botcazou Date: Thu, 3 Jul 2003 17:57:45 +0000 (+0200) Subject: * gcc.dg/i386-call-1.c: New test. X-Git-Tag: releases/gcc-3.4.0~5198 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee41cff421132bb2891a4ad51fae0f83ffcfe087;p=thirdparty%2Fgcc.git * gcc.dg/i386-call-1.c: New test. From-SVN: r68892 --- 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; +}