diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/setjmp-1.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/setjmp-1.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/setjmp-1.c b/gcc/testsuite/gcc.dg/setjmp-1.c new file mode 100644 index 000000000..b5c84fc87 --- /dev/null +++ b/gcc/testsuite/gcc.dg/setjmp-1.c @@ -0,0 +1,36 @@ +/* Test for bogus "variable `x' may be clobbered by longjmp" warnings. + Inspired by cse.c:simplify_relational_operation. */ + +/* { dg-do compile } */ +/* { dg-options "-O -Wclobbered -Wextra -Wall" } */ + +#include <setjmp.h> + +extern void set_float_handler (jmp_buf *); + +#define EQ 0x01 +#define LT 0x02 +#define GT 0x04 + +int +compare_float (double a, double b) /* { dg-bogus "clobbered" "spurious clobbered warning" } */ +{ + jmp_buf handler; + int result; + + a += 1.0; + + if (setjmp (handler)) + { + set_float_handler (0); + return 0; + } + + set_float_handler (&handler); + if (a == b) result = EQ; + else if (a > b) result = LT; + else if (a < b) result = GT; + else result = 0; + set_float_handler (0); + return result; +} |