aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/common/diagnostics.h17
-rw-r--r--gdb/common/vec.h25
3 files changed, 49 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5b04862..e817dc7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2017-06-26 Simon Marchi <simon.marchi@ericsson.com>
+ * common/diagnostics.h: Define macros for GCC.
+ (DIAGNOSTIC_IGNORE_UNUSED_FUNCTION): New macro.
+ * common/vec.h: Include diagnostics.h.
+ (DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION): New macro.
+ (DEF_VEC_I, DEF_VEC_P, DEF_VEC_O): Ignore -Wunused-function
+ warning.
+
+2017-06-26 Simon Marchi <simon.marchi@ericsson.com>
+
* common/diagnostics.h (DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER):
New macro.
* ada-lex.l: Ignore deprecated register warnings.
diff --git a/gdb/common/diagnostics.h b/gdb/common/diagnostics.h
index 35bacf2..d6ab698 100644
--- a/gdb/common/diagnostics.h
+++ b/gdb/common/diagnostics.h
@@ -31,13 +31,26 @@
# define DIAGNOSTIC_IGNORE(option)
#endif
-#ifdef __clang__
+#if defined (__clang__) /* clang */
+
# define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move")
# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \
DIAGNOSTIC_IGNORE ("-Wdeprecated-register")
-#else
+# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
+ DIAGNOSTIC_IGNORE ("-Wunused-function")
+
+#elif defined (__GNUC__) /* GCC */
+
+# define DIAGNOSTIC_IGNORE_SELF_MOVE
+# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
+# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
+ DIAGNOSTIC_IGNORE ("-Wunused-function")
+
+#else /* Other compilers */
+
# define DIAGNOSTIC_IGNORE_SELF_MOVE
# define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
+# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION
#endif
#endif /* COMMON_DIAGNOSTICS_H */
diff --git a/gdb/common/vec.h b/gdb/common/vec.h
index 982f771..98d4576 100644
--- a/gdb/common/vec.h
+++ b/gdb/common/vec.h
@@ -20,6 +20,22 @@
#if !defined (GDB_VEC_H)
#define GDB_VEC_H
+#include "diagnostics.h"
+
+/* clang has a bug that makes it warn (-Wunused-function) about unused functions
+ that are the result of the DEF_VEC_* macro expansion. See:
+
+ https://bugs.llvm.org/show_bug.cgi?id=22712
+
+ We specifically ignore this warning for the vec functions when the compiler
+ is clang. */
+#ifdef __clang__
+# define DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION \
+ DIAGNOSTIC_IGNORE_UNUSED_FUNCTION
+#else
+# define DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION
+#endif
+
/* The macros here implement a set of templated vector types and
associated interfaces. These templates are implemented with
macros, as we're not in C++ land. The interface functions are
@@ -408,6 +424,8 @@ typedef struct VEC(T) \
/* Vector of integer-like object. */
#define DEF_VEC_I(T) \
+DIAGNOSTIC_PUSH \
+DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION \
static inline void VEC_OP (T,must_be_integral_type) (void) \
{ \
(void)~(T)0; \
@@ -416,10 +434,13 @@ static inline void VEC_OP (T,must_be_integral_type) (void) \
VEC_T(T); \
DEF_VEC_FUNC_P(T) \
DEF_VEC_ALLOC_FUNC_I(T) \
+DIAGNOSTIC_POP \
struct vec_swallow_trailing_semi
/* Vector of pointer to object. */
#define DEF_VEC_P(T) \
+DIAGNOSTIC_PUSH \
+DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION \
static inline void VEC_OP (T,must_be_pointer_type) (void) \
{ \
(void)((T)1 == (void *)1); \
@@ -428,13 +449,17 @@ static inline void VEC_OP (T,must_be_pointer_type) (void) \
VEC_T(T); \
DEF_VEC_FUNC_P(T) \
DEF_VEC_ALLOC_FUNC_P(T) \
+DIAGNOSTIC_POP \
struct vec_swallow_trailing_semi
/* Vector of object. */
#define DEF_VEC_O(T) \
+DIAGNOSTIC_PUSH \
+DIAGNOSTIC_IGNORE_UNUSED_VEC_FUNCTION \
VEC_T(T); \
DEF_VEC_FUNC_O(T) \
DEF_VEC_ALLOC_FUNC_O(T) \
+DIAGNOSTIC_POP \
struct vec_swallow_trailing_semi
/* Avoid offsetof (or its usual C implementation) as it triggers