Disable -Wrestrict for two nptl/tst-attr3.c tests.

nptl/tst-attr3 fails to build with GCC mainline because of
(deliberate) aliasing between the second (attributes) and fourth
(argument to thread start routine) arguments to pthread_create.

Although both those arguments are restrict-qualified in POSIX,
pthread_create does not actually dereference its fourth argument; it's
an opaque pointer passed to the thread start routine.  Thus, the
aliasing is actually valid in this case, and it's deliberate in the
test.  So this patch makes the test disable -Wrestrict for the two
pthread_create calls in question.  (-Wrestrict was added in GCC 7,
hence the __GNUC_PREREQ conditions, but the particular warning in
question is new in GCC 8.)

Tested compilation with build-many-glibcs.py for aarch64-linux-gnu.

	* nptl/tst-attr3.c: Include <libc-diag.h>.
	(do_test) [__GNUC_PREREQ (7, 0)]: Ignore -Wrestrict for two tests.

(cherry picked from commit 40c4162df6)
This commit is contained in:
Joseph Myers 2017-12-18 22:55:28 +00:00 committed by Florian Weimer
parent 6ae2ca620a
commit 33f5de7a79
2 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2017-12-18 Joseph Myers <joseph@codesourcery.com>
* nptl/tst-attr3.c: Include <libc-diag.h>.
(do_test) [__GNUC_PREREQ (7, 0)]: Ignore -Wrestrict for two tests.
2017-11-14 Joseph Myers <joseph@codesourcery.com>
* string/bug-strncat1.c: Include <libc-diag.h>.

View File

@ -26,6 +26,7 @@
#include <unistd.h>
#include <stackinfo.h>
#include <libc-diag.h>
static void *
tf (void *arg)
@ -362,7 +363,16 @@ do_test (void)
result = 1;
}
DIAG_PUSH_NEEDS_COMMENT;
#if __GNUC_PREREQ (7, 0)
/* GCC 8 warns about aliasing of the restrict-qualified arguments
passed &a. Since pthread_create does not dereference its fourth
argument, this aliasing, which is deliberate in this test, cannot
in fact cause problems. */
DIAG_IGNORE_NEEDS_COMMENT (8, "-Wrestrict");
#endif
err = pthread_create (&th, &a, tf, &a);
DIAG_POP_NEEDS_COMMENT;
if (err)
{
error (0, err, "pthread_create #2 failed");
@ -388,7 +398,16 @@ do_test (void)
result = 1;
}
DIAG_PUSH_NEEDS_COMMENT;
#if __GNUC_PREREQ (7, 0)
/* GCC 8 warns about aliasing of the restrict-qualified arguments
passed &a. Since pthread_create does not dereference its fourth
argument, this aliasing, which is deliberate in this test, cannot
in fact cause problems. */
DIAG_IGNORE_NEEDS_COMMENT (8, "-Wrestrict");
#endif
err = pthread_create (&th, &a, tf, &a);
DIAG_POP_NEEDS_COMMENT;
if (err)
{
error (0, err, "pthread_create #3 failed");