mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 01:33:36 +08:00
Split DIAG_* macros to new header libc-diag.h.
Quite a few tests include libc-internal.h just for the DIAG_* macros. Split those macros to their own file, which can be included safely in _ISOMAC mode. I also moved ignore_value, since it seems logically related, even though I didn't notice any tests needing it. Also add -Wnonnull suppressions to two tests that _should_ have them, but the error is masked when compiling against internal headers. * include/libc-diag.h: New file. Define ignore_value, DIAG_PUSH_NEEDS_COMMENT, DIAG_POP_NEEDS_COMMENT, DIAG_IGNORE_NEEDS_COMMENT, and DIAG_IGNORE_Os_NEEDS_COMMENT here. * include/libc-internal.h: Definitions of above macros moved from here. Include libc-diag.h. Add copyright notice. * malloc/tst-malloc.c, malloc/tst-memcheck.c, malloc/tst-realloc.c * misc/tst-error1.c, posix/tst-dir.c, stdio-common/bug21.c * stdio-common/scanf14.c, stdio-common/scanf4.c, stdio-common/scanf7.c * stdio-common/test-vfprintf.c, stdio-common/tst-printf.c * stdio-common/tst-printfsz.c, stdio-common/tst-sprintf.c * stdio-common/tst-unlockedio.c, stdio-common/tstdiomisc.c * stdlib/bug-getcontext.c, string/tester.c, string/tst-endian.c * time/tst-strptime2.c, wcsmbs/tst-wcstof.c: Include libc-diag.h instead of libc-internal.h. * stdlib/tst-environ.c: Include libc-diag.h. Suppress -Wnonnull for call to unsetenv (NULL). * nptl/tst-mutex1.c: Include libc-diag.h. Suppress -Wnonnull for call to pthread_mutexattr_destroy (NULL).
This commit is contained in:
parent
7caa5054af
commit
e15f7de60c
24
ChangeLog
24
ChangeLog
@ -1,3 +1,27 @@
|
||||
2017-02-25 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* include/libc-diag.h: New file. Define ignore_value,
|
||||
DIAG_PUSH_NEEDS_COMMENT, DIAG_POP_NEEDS_COMMENT,
|
||||
DIAG_IGNORE_NEEDS_COMMENT, and DIAG_IGNORE_Os_NEEDS_COMMENT here.
|
||||
|
||||
* include/libc-internal.h: Definitions of above macros moved from
|
||||
here. Include libc-diag.h. Add copyright notice.
|
||||
|
||||
* malloc/tst-malloc.c, malloc/tst-memcheck.c, malloc/tst-realloc.c
|
||||
* misc/tst-error1.c, posix/tst-dir.c, stdio-common/bug21.c
|
||||
* stdio-common/scanf14.c, stdio-common/scanf4.c, stdio-common/scanf7.c
|
||||
* stdio-common/test-vfprintf.c, stdio-common/tst-printf.c
|
||||
* stdio-common/tst-printfsz.c, stdio-common/tst-sprintf.c
|
||||
* stdio-common/tst-unlockedio.c, stdio-common/tstdiomisc.c
|
||||
* stdlib/bug-getcontext.c, string/tester.c, string/tst-endian.c
|
||||
* time/tst-strptime2.c, wcsmbs/tst-wcstof.c:
|
||||
Include libc-diag.h instead of libc-internal.h.
|
||||
|
||||
* stdlib/tst-environ.c: Include libc-diag.h. Suppress -Wnonnull for
|
||||
call to unsetenv (NULL).
|
||||
* nptl/tst-mutex1.c: Include libc-diag.h. Suppress -Wnonnull for
|
||||
call to pthread_mutexattr_destroy (NULL).
|
||||
|
||||
2017-02-25 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* include/features.h (__GLIBC_USE_DEPRECATED_GETS): New macro.
|
||||
|
74
include/libc-diag.h
Normal file
74
include/libc-diag.h
Normal file
@ -0,0 +1,74 @@
|
||||
/* Macros for controlling diagnostic output from the compiler.
|
||||
Copyright (C) 2014-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _LIBC_DIAG_H
|
||||
#define _LIBC_DIAG_H 1
|
||||
|
||||
/* Ignore the value of an expression when a cast to void does not
|
||||
suffice (in particular, for a call to a function declared with
|
||||
attribute warn_unused_result). */
|
||||
#define ignore_value(x) \
|
||||
({ __typeof__ (x) __ignored_value = (x); (void) __ignored_value; })
|
||||
|
||||
/* The macros to control diagnostics are structured like this, rather
|
||||
than a single macro that both pushes and pops diagnostic state and
|
||||
takes the affected code as an argument, because the GCC pragmas
|
||||
work by disabling the diagnostic for a range of source locations
|
||||
and do not work when all the pragmas and the affected code are in a
|
||||
single macro expansion. */
|
||||
|
||||
/* Push diagnostic state. */
|
||||
#define DIAG_PUSH_NEEDS_COMMENT _Pragma ("GCC diagnostic push")
|
||||
|
||||
/* Pop diagnostic state. */
|
||||
#define DIAG_POP_NEEDS_COMMENT _Pragma ("GCC diagnostic pop")
|
||||
|
||||
#define _DIAG_STR1(s) #s
|
||||
#define _DIAG_STR(s) _DIAG_STR1(s)
|
||||
|
||||
/* Ignore the diagnostic OPTION. VERSION is the most recent GCC
|
||||
version for which the diagnostic has been confirmed to appear in
|
||||
the absence of the pragma (in the form MAJOR.MINOR for GCC 4.x,
|
||||
just MAJOR for GCC 5 and later). Uses of this pragma should be
|
||||
reviewed when the GCC version given is no longer supported for
|
||||
building glibc; the version number should always be on the same
|
||||
source line as the macro name, so such uses can be found with grep.
|
||||
Uses should come with a comment giving more details of the
|
||||
diagnostic, and an architecture on which it is seen if possibly
|
||||
optimization-related and not in architecture-specific code. This
|
||||
macro should only be used if the diagnostic seems hard to fix (for
|
||||
example, optimization-related false positives). */
|
||||
#define DIAG_IGNORE_NEEDS_COMMENT(version, option) \
|
||||
_Pragma (_DIAG_STR (GCC diagnostic ignored option))
|
||||
|
||||
/* Similar to DIAG_IGNORE_NEEDS_COMMENT the following macro ignores the
|
||||
diagnostic OPTION but only if optimizations for size are enabled.
|
||||
This is required because different warnings may be generated for
|
||||
different optimization levels. For example a key piece of code may
|
||||
only generate a warning when compiled at -Os, but at -O2 you could
|
||||
still want the warning to be enabled to catch errors. In this case
|
||||
you would use DIAG_IGNORE_Os_NEEDS_COMMENT to disable the warning
|
||||
only for -Os. */
|
||||
#ifdef __OPTIMIZE_SIZE__
|
||||
# define DIAG_IGNORE_Os_NEEDS_COMMENT(version, option) \
|
||||
_Pragma (_DIAG_STR (GCC diagnostic ignored option))
|
||||
#else
|
||||
# define DIAG_IGNORE_Os_NEEDS_COMMENT(version, option)
|
||||
#endif
|
||||
|
||||
#endif /* libc-diag.h */
|
@ -1,5 +1,20 @@
|
||||
/* This file contains a number of internal prototype declarations that
|
||||
don't fit anywhere else. */
|
||||
/* Internal prototype declarations that don't fit anywhere else.
|
||||
Copyright (C) 2000-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _LIBC_INTERNAL
|
||||
# define _LIBC_INTERNAL 1
|
||||
@ -74,56 +89,6 @@ extern __typeof (__profile_frequency) __profile_frequency attribute_hidden;
|
||||
#define PTR_ALIGN_UP(base, size) \
|
||||
((__typeof__ (base)) ALIGN_UP ((uintptr_t) (base), (size)))
|
||||
|
||||
/* Ignore the value of an expression when a cast to void does not
|
||||
suffice (in particular, for a call to a function declared with
|
||||
attribute warn_unused_result). */
|
||||
#define ignore_value(x) \
|
||||
({ __typeof__ (x) __ignored_value = (x); (void) __ignored_value; })
|
||||
|
||||
/* The macros to control diagnostics are structured like this, rather
|
||||
than a single macro that both pushes and pops diagnostic state and
|
||||
takes the affected code as an argument, because the GCC pragmas
|
||||
work by disabling the diagnostic for a range of source locations
|
||||
and do not work when all the pragmas and the affected code are in a
|
||||
single macro expansion. */
|
||||
|
||||
/* Push diagnostic state. */
|
||||
#define DIAG_PUSH_NEEDS_COMMENT _Pragma ("GCC diagnostic push")
|
||||
|
||||
/* Pop diagnostic state. */
|
||||
#define DIAG_POP_NEEDS_COMMENT _Pragma ("GCC diagnostic pop")
|
||||
|
||||
#define _DIAG_STR1(s) #s
|
||||
#define _DIAG_STR(s) _DIAG_STR1(s)
|
||||
|
||||
/* Ignore the diagnostic OPTION. VERSION is the most recent GCC
|
||||
version for which the diagnostic has been confirmed to appear in
|
||||
the absence of the pragma (in the form MAJOR.MINOR for GCC 4.x,
|
||||
just MAJOR for GCC 5 and later). Uses of this pragma should be
|
||||
reviewed when the GCC version given is no longer supported for
|
||||
building glibc; the version number should always be on the same
|
||||
source line as the macro name, so such uses can be found with grep.
|
||||
Uses should come with a comment giving more details of the
|
||||
diagnostic, and an architecture on which it is seen if possibly
|
||||
optimization-related and not in architecture-specific code. This
|
||||
macro should only be used if the diagnostic seems hard to fix (for
|
||||
example, optimization-related false positives). */
|
||||
#define DIAG_IGNORE_NEEDS_COMMENT(version, option) \
|
||||
_Pragma (_DIAG_STR (GCC diagnostic ignored option))
|
||||
|
||||
/* Similar to DIAG_IGNORE_NEEDS_COMMENT the following macro ignores the
|
||||
diagnostic OPTION but only if optimizations for size are enabled.
|
||||
This is required because different warnings may be generated for
|
||||
different optimization levels. For example a key piece of code may
|
||||
only generate a warning when compiled at -Os, but at -O2 you could
|
||||
still want the warning to be enabled to catch errors. In this case
|
||||
you would use DIAG_IGNORE_Os_NEEDS_COMMENT to disable the warning
|
||||
only for -Os. */
|
||||
#ifdef __OPTIMIZE_SIZE__
|
||||
# define DIAG_IGNORE_Os_NEEDS_COMMENT(version, option) \
|
||||
_Pragma (_DIAG_STR (GCC diagnostic ignored option))
|
||||
#else
|
||||
# define DIAG_IGNORE_Os_NEEDS_COMMENT(version, option)
|
||||
#endif
|
||||
#include <libc-diag.h>
|
||||
|
||||
#endif /* _LIBC_INTERNAL */
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <errno.h>
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int errors = 0;
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int errors = 0;
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <malloc.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int errors = 0;
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int
|
||||
do_test (int argc, char *argv[])
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <libc-diag.h>
|
||||
|
||||
#ifndef ATTR
|
||||
# define ATTR NULL
|
||||
@ -45,11 +45,16 @@ do_test (void)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* This deliberately tests supplying a null pointer to a function whose
|
||||
argument is marked __attribute__ ((nonnull)). */
|
||||
DIAG_PUSH_NEEDS_COMMENT;
|
||||
DIAG_IGNORE_NEEDS_COMMENT (5, "-Wnonnull");
|
||||
if (!ATTR_NULL && pthread_mutexattr_destroy (ATTR) != 0)
|
||||
{
|
||||
puts ("mutexattr_destroy failed");
|
||||
return 1;
|
||||
}
|
||||
DIAG_POP_NEEDS_COMMENT;
|
||||
|
||||
if (pthread_mutex_lock (&m) != 0)
|
||||
{
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
/* We expect four arguments:
|
||||
- source directory name
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include <stdio.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
#define FAIL() \
|
||||
do { \
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
int
|
||||
main(int arc, char *argv[])
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
|
||||
const char *locs[] =
|
||||
|
@ -26,7 +26,7 @@
|
||||
#endif
|
||||
|
||||
#include <float.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
/* This whole file is picayune tests of corner cases of printf format strings.
|
||||
The compiler warnings are not useful here. */
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include <printf.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
#define V 12345678.12345678
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <locale.h>
|
||||
#include <string.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
|
||||
static int
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
int fd;
|
||||
static void do_prepare (void);
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int
|
||||
t1 (void)
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ucontext.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <libc-diag.h>
|
||||
|
||||
#define VAR "FOOBAR"
|
||||
|
||||
@ -196,12 +196,17 @@ do_test (void)
|
||||
result = 1;
|
||||
}
|
||||
|
||||
/* This deliberately tests supplying a null pointer to a function whose
|
||||
argument is marked __attribute__ ((nonnull)). */
|
||||
DIAG_PUSH_NEEDS_COMMENT;
|
||||
DIAG_IGNORE_NEEDS_COMMENT(5, "-Wnonnull");
|
||||
errno = 0;
|
||||
if (unsetenv (NULL) >= 0 || errno != EINVAL)
|
||||
{
|
||||
puts ("unsetenv #1 failed");
|
||||
result = 1;
|
||||
}
|
||||
DIAG_POP_NEEDS_COMMENT;
|
||||
|
||||
errno = 0;
|
||||
if (unsetenv ("") >= 0 || errno != EINVAL)
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <fcntl.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
|
||||
#define STREQ(a, b) (strcmp((a), (b)) == 0)
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
#if __GNUC_PREREQ (6, 0)
|
||||
/* GCC 6.0 warns on big endian systems about:
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
/* Dummy string is used to match strptime's %s specifier. */
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <wctype.h>
|
||||
#include <libc-internal.h>
|
||||
#include <libc-diag.h>
|
||||
|
||||
static int
|
||||
do_test (void)
|
||||
|
Loading…
Reference in New Issue
Block a user