This is the mail archive of the
mailing list for the GCC project.
[PATCH 11/13] Fix va_start related location
- From: Dodji Seketeli <dodji at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Tom Tromey <tromey at redhat dot com>, Jason Merrill <jason at redhat dot com>, Gabriel Dos Reis <gdr at integrable-solutions dot net>
- Date: Wed, 25 Apr 2012 16:04:11 +0200
- Subject: [PATCH 11/13] Fix va_start related location
- References: <email@example.com>
In gcc/testsuite/gcc.dg/pr30457.c, the first warning was not being
emitted because the relevant location was inside the var_start macro
defined in a system header. It can even point to a token for a
builtin macro there. This patch unwinds to the first token in real
source code in that case.
Tested on x86_64-unknown-linux-gnu against trunk.
* builtins.c (fold_builtin_next_arg): Unwinds to the first
location in real source code.
gcc/builtins.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/gcc/builtins.c b/gcc/builtins.c
index b47f218..ef90b25 100644
@@ -12164,8 +12164,20 @@ fold_builtin_next_arg (tree exp, bool va_start_p)
the default argument promotions, the behavior is undefined."
else if (DECL_REGISTER (arg))
- warning (0, "undefined behaviour when second parameter of "
- "%<va_start%> is declared with %<register%> storage");
+ /* There is good chance the current input_location points
+ inside the definition of the va_start macro (perhaps on
+ the token for builtin) in a system header, so the warning
+ will not be emitted. Use the location in real source
+ code. */
+ source_location current_location =
+ linemap_unwind_to_first_non_reserved_loc (line_table, input_location,
+ warning_at (current_location,
+ "undefined behaviour when second parameter of "
+ "%<va_start%> is declared with %<register%> storage");
/* We want to verify the second parameter just once before the tree
optimizers are run and then avoid keeping it in the tree,