diff options
author | Zack Weinberg <zackw@panix.com> | 2017-06-08 15:39:03 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2017-06-08 15:39:03 -0400 |
commit | 5046dbb4a7eba5eccfd258f92f4735c9ffc8d069 (patch) | |
tree | 4470480d904b65cf14ca524f96f79eca818c3eaf /REORG.TODO/stdlib/bug-getcontext.c | |
parent | 199fc19d3aaaf57944ef036e15904febe877fc93 (diff) | |
download | glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar.gz glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.tar.xz glibc-5046dbb4a7eba5eccfd258f92f4735c9ffc8d069.zip |
Prepare for radical source tree reorganization. zack/build-layout-experiment
All top-level files and directories are moved into a temporary storage directory, REORG.TODO, except for files that will certainly still exist in their current form at top level when we're done (COPYING, COPYING.LIB, LICENSES, NEWS, README), all old ChangeLog files (which are moved to the new directory OldChangeLogs, instead), and the generated file INSTALL (which is just deleted; in the new order, there will be no generated files checked into version control).
Diffstat (limited to 'REORG.TODO/stdlib/bug-getcontext.c')
-rw-r--r-- | REORG.TODO/stdlib/bug-getcontext.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/REORG.TODO/stdlib/bug-getcontext.c b/REORG.TODO/stdlib/bug-getcontext.c new file mode 100644 index 0000000000..163400acba --- /dev/null +++ b/REORG.TODO/stdlib/bug-getcontext.c @@ -0,0 +1,76 @@ +/* BZ 12420 */ + +#include <errno.h> +#include <fenv.h> +#include <stdio.h> +#include <stdlib.h> +#include <ucontext.h> +#include <libc-diag.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); + + /* On nios2 and tilepro, GCC 5 warns that except_mask may be used + uninitialized. Because it is always initialized and nothing in + this test ever calls setcontext (a setcontext call could result + in local variables being clobbered on the second return from + getcontext), in fact an uninitialized use is not possible. */ + DIAG_PUSH_NEEDS_COMMENT; + DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized"); + 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); + DIAG_POP_NEEDS_COMMENT; + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |