Fix diagnostic errors

Fixes a number of build errors like the following
.../elf32-arm.c: In function 'elf32_arm_nabi_write_core_note':
.../elf32-arm.c:2177: error: #pragma GCC diagnostic not allowed inside functions
.../elf32-arm.c:2186: error: #pragma GCC diagnostic not allowed inside functions
See the comment in diagnostics.h.

include/
	* diagnostics.h: Comment on macro usage.
bfd/
	* elf32-arm.c (elf32_arm_nabi_write_core_note): Don't use
	DIAGNOTIC_PUSH and DIAGNOSTIC_POP unconditionally.
	* elf32-ppc.c (ppc_elf_write_core_note): Likewise.
	* elf32-s390.c (elf_s390_write_core_note): Likewise.
	* elf64-ppc.c (ppc64_elf_write_core_note): Likewise.
	* elf64-s390.c (elf_s390_write_core_note): Likewise.
	* elfxx-aarch64.c (_bfd_aarch64_elf_write_core_note): Likewise.
This commit is contained in:
Alan Modra
2018-07-06 15:07:08 +09:30
parent 724436fccb
commit fe75810f8e
9 changed files with 46 additions and 6 deletions

View File

@ -16,6 +16,20 @@
#ifndef DIAGNOSTICS_H
#define DIAGNOSTICS_H
/* If at all possible, fix the source rather than using these macros
to silence warnings. If you do use these macros be aware that
you'll need to condition their use on particular compiler versions,
which can be done for gcc using ansidecl.h's GCC_VERSION macro.
gcc versions between 4.2 and 4.6 do not allow pragma control of
diagnostics inside functions, giving a hard error if you try to use
the finer control available with later versions.
gcc prior to 4.2 warns about diagnostic push and pop.
The other macros have restrictions too, for example gcc-5, gcc-6
and gcc-7 warn that -Wstringop-truncation is unknown, unless you
also add DIAGNOSTIC_IGNORE ("-Wpragma"). */
#ifdef __GNUC__
# define DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push")
# define DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")