| /* BZ 12420 */ |
| |
| #include <errno.h> |
| #include <fenv.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <ucontext.h> |
| |
| static int |
| do_test (void) |
| { |
| if (FE_ALL_EXCEPT == 0) |
| { |
| printf("Skipping test; no support for FP exceptions.\n"); |
| return 0; |
| } |
| |
| int except_mask = 0; |
| #ifdef FE_DIVBYZERO |
| except_mask |= FE_DIVBYZERO; |
| #endif |
| #ifdef FE_INVALID |
| except_mask |= FE_INVALID; |
| #endif |
| #ifdef FE_OVERFLOW |
| except_mask |= FE_OVERFLOW; |
| #endif |
| #ifdef FE_UNDERFLOW |
| except_mask |= FE_UNDERFLOW; |
| #endif |
| int status = feenableexcept (except_mask); |
| |
| except_mask = fegetexcept (); |
| if (except_mask == -1) |
| { |
| printf("\nBefore getcontext(): fegetexcept returned: %d\n", |
| except_mask); |
| return 1; |
| } |
| |
| ucontext_t ctx; |
| status = getcontext(&ctx); |
| if (status) |
| { |
| printf("\ngetcontext failed, errno: %d.\n", errno); |
| return 1; |
| } |
| |
| printf ("\nDone with getcontext()!\n"); |
| fflush (NULL); |
| |
| int mask = fegetexcept (); |
| if (mask != except_mask) |
| { |
| printf("\nAfter getcontext(): fegetexcept returned: %d, expected: %d.\n", |
| mask, except_mask); |
| return 1; |
| } |
| |
| printf("\nAt end fegetexcept() returned %d, expected: %d.\n", |
| mask, except_mask); |
| |
| return 0; |
| } |
| |
| #define TEST_FUNCTION do_test () |
| #include "../test-skeleton.c" |