From: Hans-Peter Nilsson Date: Fri, 17 Jun 2011 11:25:53 +0000 (+0000) Subject: re PR rtl-optimization/48542 (unchanged variables in code which calls setjmp may... X-Git-Tag: releases/gcc-4.3.6~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1b6f601a310a58d7a71c3e5fda0386f8b5d091ee;p=thirdparty%2Fgcc.git re PR rtl-optimization/48542 (unchanged variables in code which calls setjmp may be clobbered (including the return-address)) PR rtl-optimization/48542 * gcc.dg/torture/pr48542.c: New test. From-SVN: r175147 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0ce09c12549b..9d58ad88d6fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-06-17 Hans-Peter Nilsson + + Backport from mainline + 2011-06-17 Hans-Peter Nilsson + + PR rtl-optimization/48542 + * gcc.dg/torture/pr48542.c: New test. + 2011-06-05 Kaz Kojima Backport from mainline diff --git a/gcc/testsuite/gcc.dg/torture/pr48542.c b/gcc/testsuite/gcc.dg/torture/pr48542.c new file mode 100644 index 000000000000..e3e49489f7dc --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr48542.c @@ -0,0 +1,57 @@ +/* { dg-do run } */ +/* The return-address was clobbered. */ +#include +#include + +jmp_buf env; +extern void sub(void); +extern void sub3(void); +int called; +__attribute__ ((__noinline__)) +int sjtest() +{ + int i; + if (setjmp(env)) + return 99; + + for (i = 0; i < 10; i++) + sub(); + + longjmp(env, 1); +} + +__attribute__ ((__noinline__)) +void sub(void) +{ + called++; +} + +int called3; +__attribute__ ((__noinline__)) +int sjtest3() +{ + int i; + if (setjmp(env)) + return 42; + + for (i = 0; i < 10; i++) + sub3(); + return 0; +} + +__attribute__ ((__noinline__)) +void sub3(void) +{ + called3++; + if (called3 == 10) + longjmp (env, 1); +} + +int main(void) +{ + if (sjtest() != 99 || called != 10) + abort(); + if (sjtest3() != 42 || called3 != 10) + abort(); + exit (0); +}