This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

Re: [PATCH 11/13] Fix va_start related location


On Wed, Apr 25, 2012 at 9:04 AM, Dodji Seketeli <dodji@redhat.com> wrote:
> 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.

While you are at it, could you also use a non-zero value for the second
argument argument to warning_at?

>
> 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
> --- a/gcc/builtins.c
> +++ b/gcc/builtins.c
> @@ -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,
> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL);
> + ? ? ? ? warning_at (current_location,
> + ? ? ? ? ? ? ? ? ? ? 0,
> + ? ? ? ? ? ? ? ? ? ? "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,
> --
> ? ? ? ? ? ? ? ?Dodji


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