public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@ericsson.com>
To: <gdb-patches@sourceware.org>
Cc: Simon Marchi <simon.marchi@ericsson.com>
Subject: [PATCH 2/3] vec: Silence -Wunused-function warnings on clang
Date: Sun, 25 Jun 2017 17:45:00 -0000	[thread overview]
Message-ID: <1498412703-24303-3-git-send-email-simon.marchi@ericsson.com> (raw)
In-Reply-To: <1498412703-24303-1-git-send-email-simon.marchi@ericsson.com>

clang has a too aggressive (or broken, depends on how you want to see
it) -Wunused-function warning, which is triggered by the functions
defined by DEF_VEC_* but not used in the current source file.  Normally,
it won't warn about unused static inline functions defined in header
files, because it's expected that a source file won't use all functions
defined in a header file it includes.  However, the DEF_VEC_* macros
define those functions in source files, which leads clang to think that
we should remove those functions.  It is therefore missing a check to
see whether those functions are resulting from macro expansion.  A bug
already exists for that:

  https://bugs.llvm.org//show_bug.cgi?id=22712

It's quite easy to silence this warning in a localized way, that is in
the DEF_VEC_* macros.

gdb/ChangeLog:

	* common/diagnostics.h (DIAGNOSTIC_IGNORE_UNUSED_FUNCTION): New
	macro.
	* common/vec.h: Include diagnostics.h.
	(DEF_VEC_I, DEF_VEC_P, DEF_VEC_O): Ignore -Wunused-function
	warning.
---
 gdb/common/diagnostics.h |  3 +++
 gdb/common/vec.h         | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/gdb/common/diagnostics.h b/gdb/common/diagnostics.h
index 35bacf2..ee824a3 100644
--- a/gdb/common/diagnostics.h
+++ b/gdb/common/diagnostics.h
@@ -35,9 +35,12 @@
 # define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move")
 # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \
   DIAGNOSTIC_IGNORE ("-Wdeprecated-register")
+# define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
+  DIAGNOSTIC_IGNORE ("-Wunused-function")
 #else
 # 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..0221c88 100644
--- a/gdb/common/vec.h
+++ b/gdb/common/vec.h
@@ -20,6 +20,8 @@
 #if !defined (GDB_VEC_H)
 #define GDB_VEC_H
 
+#include "diagnostics.h"
+
 /* 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 +410,8 @@ typedef struct VEC(T)							  \
 
 /* Vector of integer-like object.  */
 #define DEF_VEC_I(T)							  \
+DIAGNOSTIC_PUSH 							  \
+DIAGNOSTIC_IGNORE_UNUSED_FUNCTION					  \
 static inline void VEC_OP (T,must_be_integral_type) (void)		  \
 {									  \
   (void)~(T)0;								  \
@@ -416,10 +420,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_FUNCTION					  \
 static inline void VEC_OP (T,must_be_pointer_type) (void)		  \
 {									  \
   (void)((T)1 == (void *)1);						  \
@@ -428,13 +435,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_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
-- 
2.7.4

  parent reply	other threads:[~2017-06-25 17:45 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-25 17:45 [PATCH 0/3] Third series towards a warning-less clang build Simon Marchi
2017-06-25 17:45 ` [PATCH 3/3] record-full: Remove unused function netorder16 Simon Marchi
2017-06-26 10:43   ` Yao Qi
2017-06-26 14:54     ` Simon Marchi
2017-06-25 17:45 ` [PATCH 1/3] ada-lex: Ignore warnings about register keyword Simon Marchi
2017-06-26 13:13   ` Pedro Alves
2017-06-26 13:39     ` Simon Marchi
2017-06-26 14:54     ` [pushed] " Simon Marchi
2017-06-25 17:45 ` Simon Marchi [this message]
2017-06-26  9:28   ` [PATCH 2/3] vec: Silence -Wunused-function warnings on clang Pedro Alves
2017-06-26 12:28     ` Simon Marchi
2017-06-26 12:47       ` Pedro Alves
2017-06-26 12:52         ` Simon Marchi
2017-06-26 12:46     ` [PATCH 2/3 v2] " Simon Marchi
2017-06-26 13:03       ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1498412703-24303-3-git-send-email-simon.marchi@ericsson.com \
    --to=simon.marchi@ericsson.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).