Fix diagnostic errors
authorAlan Modra <amodra@gmail.com>
Fri, 6 Jul 2018 05:37:08 +0000 (15:07 +0930)
committerAlan Modra <amodra@gmail.com>
Fri, 6 Jul 2018 05:48:59 +0000 (15:18 +0930)
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.

bfd/ChangeLog
bfd/elf32-arm.c
bfd/elf32-ppc.c
bfd/elf32-s390.c
bfd/elf64-ppc.c
bfd/elf64-s390.c
bfd/elfxx-aarch64.c
include/ChangeLog
include/diagnostics.h

index 650258ef8b905e1ba51daa91bf037cd05445ffb9..b8449651b6993a6cfa4800f79737cd2357b5b731 100644 (file)
@@ -1,3 +1,13 @@
+2018-07-06  Alan Modra  <amodra@gmail.com>
+
+       * 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.
+
 2018-07-05  Jim Wilson  <jimw@sifive.com>
 
        * config.bfd (riscv32*-*-*): Renamed from riscv32-*-*.
index b21901c0f56e7c536c0c8b765dcdf4ee0d6981a0..9c611813c646f0226f0a8a64043a738a48eeda25 100644 (file)
@@ -2174,16 +2174,18 @@ elf32_arm_nabi_write_core_note (bfd *abfd, char *buf, int *bufsiz,
        va_start (ap, note_type);
        memset (data, 0, sizeof (data));
        strncpy (data + 28, va_arg (ap, const char *), 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 44, va_arg (ap, const char *), 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        va_end (ap);
 
        return elfcore_write_note (abfd, buf, bufsiz,
index 30246740076406355911186ff6ab5db2c1507fe4..5e9251bdb9faad12b85d26fb03c41a50e243cfb9 100644 (file)
@@ -2411,16 +2411,18 @@ ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
        va_start (ap, note_type);
        memset (data, 0, sizeof (data));
        strncpy (data + 32, va_arg (ap, const char *), 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 48, va_arg (ap, const char *), 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        va_end (ap);
        return elfcore_write_note (abfd, buf, bufsiz,
                                   "CORE", note_type, data, sizeof (data));
index ebda1dacdcc15fced8e4b0839e8a5b2ad2f9f94c..56008a13eb2aaf17927e6706126d0351f239b335 100644 (file)
@@ -3951,16 +3951,18 @@ elf_s390_write_core_note (bfd *abfd, char *buf, int *bufsiz,
        va_end (ap);
 
        strncpy (data + 28, fname, 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 44, psargs, 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type,
                                   &data, sizeof (data));
       }
index b780f1ab13ea9a51f6cfa734ddbe62b3d5a77d91..45d81777eb7019379c53c987beaa89245b6a72bd 100644 (file)
@@ -3041,16 +3041,18 @@ ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
        va_start (ap, note_type);
        memset (data, 0, sizeof (data));
        strncpy (data + 40, va_arg (ap, const char *), 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 56, va_arg (ap, const char *), 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        va_end (ap);
        return elfcore_write_note (abfd, buf, bufsiz,
                                   "CORE", note_type, data, sizeof (data));
index 93a3c7c22aca63b747a5ca596d1096d1dc2a5c72..ea10a8926645ed31c51afc7799db5bc599d90b45 100644 (file)
@@ -3760,16 +3760,18 @@ elf_s390_write_core_note (bfd *abfd, char *buf, int *bufsiz,
        va_end (ap);
 
        strncpy (data + 40, fname, 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 56, psargs, 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        return elfcore_write_note (abfd, buf, bufsiz, "CORE", note_type,
                                   &data, sizeof (data));
       }
index 61a5ffb8a81bfc26fc307fb5d8c1d44ab9ddb5b1..af02f2e48e188e32e4559bd77f8c190d651ac8b3 100644 (file)
@@ -640,16 +640,18 @@ _bfd_aarch64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_ty
        va_start (ap, note_type);
        memset (data, 0, sizeof (data));
        strncpy (data + 40, va_arg (ap, const char *), 16);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_PUSH;
        /* GCC 8.1 warns about 80 equals destination size with
           -Wstringop-truncation:
           https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85643
         */
-#if GCC_VERSION == 8001
        DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION;
 #endif
        strncpy (data + 56, va_arg (ap, const char *), 80);
+#if GCC_VERSION == 8001
        DIAGNOSTIC_POP;
+#endif
        va_end (ap);
 
        return elfcore_write_note (abfd, buf, bufsiz, "CORE",
index e7d6d6657f31211ab0e037662fe972ae6395d31f..035b3ca21770996e548075deee9d725983feab78 100644 (file)
@@ -1,3 +1,7 @@
+2018-07-06  Alan Modra  <amodra@gmail.com>
+
+       * diagnostics.h: Comment on macro usage.
+
 2018-07-05  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS):
index 34fc01b85bd42cc31ddddd47899b35649519b5a1..9e9d1a832f3236721715dff63a6e08c3e8477e85 100644 (file)
 #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")