This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Ignore warning about using different types of enums in switch


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0436426c7f7798b8eb4b48be9867495da8ef28f0

commit 0436426c7f7798b8eb4b48be9867495da8ef28f0
Author: Simon Marchi <simon.marchi@ericsson.com>
Date:   Fri Dec 29 23:32:13 2017 -0500

    Ignore warning about using different types of enums in switch
    
    When compiling with clang 6, I see a bunch of warnings like this:
    
    /home/emaisin/src/binutils-gdb/gdb/amd64-linux-tdep.c:1427:8: error: comparison of two values with different enumeration types in switch statement ('enum amd64_syscall' and 'amd
    64_x32_syscall') [-Werror,-Wenum-compare-switch]
      case amd64_x32_sys_move_pages:
           ^~~~~~~~~~~~~~~~~~~~~~~~
    
    In this switch, we indeed use enumerators of both types
    amd64_x32_syscall and amd64_syscall.  This is done on purpose, and the
    enum values are chosen so that they are complementary.
    
    I think it's still a useful warning, so I chose to ignore just that
    particular case.
    
    gdb/ChangeLog:
    
    	* common/diagnostics.h
    	(DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES): New macro.
    	* amd64-linux-tdep.c (amd64_canonicalize_syscall): Use it.

Diff:
---
 gdb/ChangeLog            | 6 ++++++
 gdb/amd64-linux-tdep.c   | 5 +++++
 gdb/common/diagnostics.h | 5 +++++
 3 files changed, 16 insertions(+)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index bba278e..9cc060e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
 2017-12-29  Simon Marchi  <simon.marchi@ericsson.com>
 
+	* common/diagnostics.h
+	(DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES): New macro.
+	* amd64-linux-tdep.c (amd64_canonicalize_syscall): Use it.
+
+2017-12-29  Simon Marchi  <simon.marchi@ericsson.com>
+
 	* linux-thread-db.c (thread_db_detach): Remove call to
 	delete_thread_db_info.
 
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 87f09a4..1817456 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -363,6 +363,9 @@ amd64_all_but_ip_registers_record (struct regcache *regcache)
 static enum gdb_syscall
 amd64_canonicalize_syscall (enum amd64_syscall syscall_number)
 {
+  DIAGNOSTIC_PUSH
+  DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
+
   switch (syscall_number) {
   case amd64_sys_read:
   case amd64_x32_sys_read:
@@ -1430,6 +1433,8 @@ amd64_canonicalize_syscall (enum amd64_syscall syscall_number)
   default:
     return gdb_sys_no_syscall;
   }
+
+  DIAGNOSTIC_POP
 }
 
 /* Parse the arguments of current system call instruction and record
diff --git a/gdb/common/diagnostics.h b/gdb/common/diagnostics.h
index d6ab698..30c0fd6 100644
--- a/gdb/common/diagnostics.h
+++ b/gdb/common/diagnostics.h
@@ -38,6 +38,8 @@
   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")
 
 #elif defined (__GNUC__) /* GCC */
 
@@ -45,12 +47,15 @@
 # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
 # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
   DIAGNOSTIC_IGNORE ("-Wunused-function")
+# define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
 
 #else /* Other compilers */
 
 # define DIAGNOSTIC_IGNORE_SELF_MOVE
 # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
 # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION
+# define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
+
 #endif
 
 #endif /* COMMON_DIAGNOSTICS_H */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]