| /* Test for bogus "variable `x' may be clobbered by longjmp" warnings. |
| Inspired by cse.c:simplify_relational_operation. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-options "-O -W -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; |
| } |