From: Simon Marchi Date: Sun, 31 Dec 2017 04:33:26 +0000 (-0500) Subject: Only ignore -Wenum-compare-switch if it exists X-Git-Tag: gdb-8.1-release~87 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cfa27c399ec9236a100ef794505d35f60da41a6d;p=external%2Fbinutils.git Only ignore -Wenum-compare-switch if it exists My patch dwarf2read: Silence -Wenum-compare-switch warning 132448f8359a268f34f074b0908b5255b568da06 made some parts of dwarf2read.c ignore warnings about switch using enums of different kinds. What I did not realize was that older Clang versions (prior to 6) did not have that warning, and therefore give this error: /home/emaisin/src/binutils-gdb/gdb/dwarf2read.c:24187:7: error: unknown warning group '-Wenum-compare-switch', ignored [-Werror,-Wunknown-pragmas] DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES ^ /home/emaisin/src/binutils-gdb/gdb/common/diagnostics.h:42:3: note: expanded from macro 'DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES' DIAGNOSTIC_IGNORE ("-Wenum-compare-switch") ^ /home/emaisin/src/binutils-gdb/gdb/common/diagnostics.h:27:3: note: expanded from macro 'DIAGNOSTIC_IGNORE' _Pragma (STRINGIFY (GCC diagnostic ignored option)) ^ :10:25: note: expanded from here GCC diagnostic ignored "-Wenum-compare-switch" ^ Clang has a way to test if it knows about a particular warning. This patch uses that feature to only define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES to something if the warning is recognized by the Clang version being used. I tested building dwarf2read.c with clang 4, 5, 6, as well as gcc. gdb/ChangeLog: * common/diagnostics.h (DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES): Only define if the compiler knows about -Wenum-compare-switch. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7689e0e..edb3cd4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2017-12-30 Simon Marchi + * common/diagnostics.h + (DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES): Only + define if the compiler knows about -Wenum-compare-switch. + +2017-12-30 Simon Marchi + * dwarf2read.c (dwarf_decode_macro_bytes): Ignore -Wenum-compare-switch warning. (dwarf_decode_macros): Likewise. diff --git a/gdb/common/diagnostics.h b/gdb/common/diagnostics.h index 30c0fd6..c9ef6b6 100644 --- a/gdb/common/diagnostics.h +++ b/gdb/common/diagnostics.h @@ -38,9 +38,12 @@ DIAGNOSTIC_IGNORE ("-Wdeprecated-register") # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \ DIAGNOSTIC_IGNORE ("-Wunused-function") -# define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \ - DIAGNOSTIC_IGNORE ("-Wenum-compare-switch") - +# if __has_warning ("-Wenum-compare-switch") +# define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \ + DIAGNOSTIC_IGNORE ("-Wenum-compare-switch") +# else +# define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES +# endif #elif defined (__GNUC__) /* GCC */ # define DIAGNOSTIC_IGNORE_SELF_MOVE