Ignore -Wmaybe-uninitialized in stdlib/bug-getcontext.c.

Doing all-ABIs compile testing produces a compiler warning in
stdlib/bug-getcontext.c on nios2 and tilepro (with GCC 5 branch):

bug-getcontext.c: In function 'do_test':
bug-getcontext.c:53:6: error: 'except_mask' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   if (mask != except_mask)
      ^

This warning appears nonsensical; except_mask is initialized where
it's declared.  I think what must be happening here is that the
compiler is confused by the returns-twice nature of getcontext: if
there were a call to setcontext, local variables could indeed have
lost their values on the second return from getcontext.  This patch
duly uses the DIAG_* macros to disable the warning here.

Tested for nios2 and tilepro (compilation only; after this patch all
the tests compile, though there are other failures) and x86_64 (full
testsuite run).

	* stdlib/bug-getcontext.c: Include <libc-internal.h>.
	(do_test): Disable -Wmaybe-uninitialized around uses of
	except_mask.
This commit is contained in:
Joseph Myers 2016-11-11 21:05:51 +00:00
parent 8129bf7732
commit 84c426b85d
2 changed files with 13 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2016-11-11 Joseph Myers <joseph@codesourcery.com>
* stdlib/bug-getcontext.c: Include <libc-internal.h>.
(do_test): Disable -Wmaybe-uninitialized around uses of
except_mask.
* sysdeps/unix/sysv/linux/sh/sys/user.h: Include <stddef.h>.
2016-11-10 Chris Metcalf <cmetcalf@mellanox.com>

View File

@ -5,6 +5,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
#include <libc-internal.h>
static int
do_test (void)
@ -49,6 +50,13 @@ do_test (void)
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)
{
@ -59,6 +67,7 @@ do_test (void)
printf("\nAt end fegetexcept() returned %d, expected: %d.\n",
mask, except_mask);
DIAG_POP_NEEDS_COMMENT;
return 0;
}