From: Jason Merrill <jason@redhat.com>
To: Dodji Seketeli <dodji@redhat.com>
Cc: gcc-patches@gcc.gnu.org, tromey@redhat.com,
gdr@integrable-solutions.net, joseph@codesourcery.com,
burnus@net-b.de, charlet@act-europe.fr, bonzini@gnu.org
Subject: Re: [PATCH 3/7] Emit macro expansion related diagnostics
Date: Thu, 29 Sep 2011 07:05:00 -0000 [thread overview]
Message-ID: <4E83B6D5.5030907@redhat.com> (raw)
In-Reply-To: <m3sjnhan4s.fsf@redhat.com>
On 09/27/2011 01:52 PM, Dodji Seketeli wrote:
> + Remember we are at the expansion point of MACRO. Each xI is the
> + location of the Ith token of the replacement-list. Now it gets
> + confusing. the xI is the location of the Ith token of the
> + replacement-list at the macro *definition* point. Not at the
> + macro replacement point. Okay, let's try to explain this below.
This should be yI.
> + The token '+' has two locations, so to speak. One in the context
> + of the macro *expansion* of PLUS in #2 and one in the context of
> + the macro *definition* of PLUS in #1. These two locations are
> + encoded in the the latter context, somehow in the xI we are
> + talking about.
The location of '+' in #2 is not encoded in xI or yI, we reach it
through the expansion point location of the macro. The location in #1
is yI (and xI, in this case).
> + xI is roughly the index of the token inside the replacement-list
> + at the expansion point. So for '+', it's index would then be 1
"its"
> + [The index of token '1' would be 0 and the index of token 2 would
> + be 1]. So if '+' is our current xI, it is actualy an x1.
Are we still talking about #1 here? It looks to me like the index of
"1" would be 2, the index of "+" would be 4, and the index of token "2"
would be 6. I bet PLUS used to just be "A + B", and this section of
comment didn't get updated when it changed.
Keep changing xI to yI.
> + Now what's the y1 then? Remember, we said macro_locations is an
> + array of pairs (xI,yI). We now know what the xI is, now let's
> + look at the yI.
xI allows us to find where the token was actually written. If the
current macro context is also the spelling location of the token (e.g.
#1 for "+"), then xI is the same as yI, i.e. the source location of that
token.
If the current macro context is not the spelling location of the token
(e.g. #0 or #1 for "1"), then xI is the location outside the current
macro context. For "1" in #0, this the location of "1" in #1, which is
a virtual location. For "1" in #1, this is the location of "1" in #2,
which is a source location.
> + * If LRK is set to LRK_MACRO_EXPANSION_POINT
> + -------------------------------
> +
> + The virtual location is resolved to the location to the locus of
> + the expansion point of the macro.
The first macro expansion point that led to this macro expansion.
> + * If LRK is set to LRK_MACRO_DEFINITION_LOCATION
> + --------------------------------------
The virtual location is resolved to the locus of the token in the
context of the macro definition.
> + If LOC is the locus of a token that is an argument of a
> + function-like macro [replacing a parameter in the replacement list
> + of the macro] the virtual location is resolved to the locus of the
> + parameter that is replaced, in the context of the definition of the
> + macro.
> +
> + If LOC is the locus of a token that is not an argument of a
> + function-like macro, then the function behaves as if LRK was set to
> + LRK_SPELLING_LOCATION.
(and then keep these two paragraphs)
> + Finally, if SPELLING_LOC is not NULL, *RESULTING_LOC is set to the
> + location to which LOC was resolved
SPELLING_LOC doesn't exist anymore.
> + ORIG_LOC is the orginal location of the token at the definition
> + point of the macro. If you read the extensive comments of struct
> + line_map_macro in line-map.h, this is the xI.
> +
> + If the token is part of a macro argument, ORIG_PARM_REPLACEMENT_LOC
> + is the location of the point at wich the token (the argument)
> + replaces the macro parameter in the context of the relevant macro
> + definition. If you read the comments of struct line_map_macro in
> + line-map.h, this is the yI. */
> +
> +source_location
> +linemap_add_macro_token (const struct line_map *map,
ORIG_LOC is the location of the token outside this macro expansion. If
the token comes originally from the macro definition, it is the locus in
the macro definition; otherwise it is a location in the caller of this
macro expansion (which is a virtual location or a source location if the
caller is itself a macro expansion or not).
MACRO_DEFINITION_LOC is the location in the macro definition, either of
the token itself or of a macro parameter that it replaces.
> +/* If LOCATION is the locus of a token that is an argument of a
> + function-like macro M and appears in the expansion of M, return the
> + locus of that argument in the context of the caller of M. Note
> + that the caller of M is necessarily another macro.
Why is the caller of M necessarily another macro? In the PLUS example
above, if we have the location for "1" in #1, won't it give us the
location of "1" in #2?
> The context of M is a macro definition.
What does this mean?
> +/* Return the source line number corresponding to source location
> + LOCATION. SET is the line map set LOCATION comes from. If
> + LOCATION is the source location of token that is part of the
> + replacement-list of a macro expansion return the line number of the
> + macro expansion point. */
> +
> +int
> +linemap_get_source_line (struct line_maps *set,
> + source_location location)
Let's call this linemap_get_expansion_line.
> +linemap_get_source_column (struct line_maps *set,
This seems unused.
> +linemap_get_file_path (struct line_maps *set,
Shouldn't we use this for BT_FILE in _cpp_builtin_macro_text? And call
it linemap_get_expansion_filename.
> + Note that this function returns 0 if LOCATION belongs to a token
> + that is part of a macro replacement-list defined in a system
> + header, but expanded in a non-system file. */
> +
> +int
> +linemap_location_in_system_header_p (struct line_maps *set,
> + source_location location)
> +{
> + const struct line_map *map = NULL;
> +
> + if (location < RESERVED_LOCATION_COUNT)
> + return false;
> +
> + location =
> + linemap_resolve_location (set, location, LRK_SPELLING_LOCATION, &map);
The comment seems incorrect here. If the location passed in corresponds
to a non-parameter token in a macro in a system header, we'll end up
with the source location of that token, not the expansion location.
What behavior do we want here?
> +linemap_macro_loc_unwind (struct line_maps *set,
Let's call this linemap_macro_loc_to_spelling_point.
> +/* If LOCATION is the locus of a token that is an argument of a
> + function-like macro M, return the location of that token in the
> + context of the definition of the first macro P which expansion
> + triggered the expansion of M. Note that the token must be actually
> + present in the source of the definition of P. If LOCATION is the
> + locus of a token that belongs to a macro replacement-list but is
> + not an argument to a function-like macro, return the same thing as
> + what linemap_macor_loc_to_def_point would have returned.
This seems unnecessarily complex. This function returns the spelling
location of the token wherever it comes from, whether part of a macro
definition or not.
> linemap_macro_loc_to_exp_point,
> linemap_macro_map_loc_unwind_once and linemap_macro_map_loc_to_def_point
> are now static functions that are only subroutines of
> linemap_resolve_location. They are not part of the public line map API
> anymore.
I still see them in line-map.h.
Let's rename linemap_macro_map_loc_unwind_once to
"linemap_macro_map_loc_unwind_toward_spelling", and
linemap_step_out_once to "linemap_macro_map_loc_unwind_toward_expansion".
Jason
next prev parent reply other threads:[~2011-09-29 0:08 UTC|newest]
Thread overview: 142+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-10 11:27 [PATCH 0/6] Tracking locations of tokens resulting from macro expansion Dodji Seketeli
2010-12-10 11:16 ` [PATCH 0/6] *** SUBJECT HERE *** Dodji Seketeli
2010-12-10 12:56 ` Dave Korn
2010-12-10 11:16 ` [PATCH 4/6] Support -fdebug-cpp option Dodji Seketeli
2010-12-10 11:27 ` [PATCH 3/6] Emit macro expansion related diagnostics Dodji Seketeli
2010-12-13 15:25 ` Paolo Bonzini
2010-12-13 15:38 ` Paolo Bonzini
2010-12-13 16:30 ` Manuel López-Ibáñez
2010-12-14 7:24 ` Dodji Seketeli
2010-12-14 7:28 ` Gabriel Dos Reis
2010-12-14 8:40 ` Dodji Seketeli
2010-12-14 9:38 ` Gabriel Dos Reis
2010-12-14 9:42 ` Dodji Seketeli
2010-12-14 9:48 ` Gabriel Dos Reis
2010-12-14 7:28 ` Dodji Seketeli
2010-12-14 8:19 ` Gabriel Dos Reis
2010-12-14 8:31 ` Paolo Bonzini
2010-12-14 9:23 ` Dodji Seketeli
2010-12-10 11:27 ` [PATCH 5/6] Add line map statistics to -fmem-report output Dodji Seketeli
2010-12-21 7:30 ` Gabriel Dos Reis
2011-04-13 20:08 ` Dodji Seketeli
2010-12-10 11:53 ` [PATCH 1/6] Linemap infrastructure for virtual locations Dodji Seketeli
2011-01-06 16:48 ` Tom Tromey
2011-04-12 14:39 ` Dodji Seketeli
2011-04-14 14:46 ` Tom Tromey
2010-12-10 12:27 ` [PATCH 2/6] Generate virtual locations for tokens Dodji Seketeli
2010-12-10 12:33 ` [PATCH 6/6] Kill pedantic warnings on system headers macros Dodji Seketeli
2010-12-10 12:52 ` [PATCH 0/6] Tracking locations of tokens resulting from macro expansion Gabriel Dos Reis
2010-12-10 18:22 ` Dodji Seketeli
2010-12-10 16:59 ` Jeff Law
2010-12-10 19:00 ` Dodji Seketeli
2010-12-13 15:10 ` Jeff Law
2010-12-13 16:35 ` Gabriel Dos Reis
2010-12-14 9:24 ` Dodji Seketeli
2010-12-14 9:40 ` Gabriel Dos Reis
2010-12-14 9:45 ` Dodji Seketeli
2011-07-16 14:38 ` [PATCH 0/7] " Dodji Seketeli
[not found] ` <cover.1310824120.git.dodji@redhat.com>
2011-07-16 14:38 ` [PATCH 6/7] Kill pedantic warnings on system headers macros Dodji Seketeli
2011-09-12 22:09 ` Jason Merrill
2011-09-16 11:25 ` Dodji Seketeli
2011-09-17 22:34 ` Jason Merrill
2011-09-18 18:59 ` Dodji Seketeli
2011-07-16 14:38 ` [PATCH 3/7] Emit macro expansion related diagnostics Dodji Seketeli
2011-08-04 15:32 ` Dodji Seketeli
2011-09-12 21:54 ` Jason Merrill
2011-09-16 8:19 ` Dodji Seketeli
2011-09-17 21:27 ` Jason Merrill
2011-09-19 14:37 ` Dodji Seketeli
2011-09-19 19:47 ` Jason Merrill
2011-09-19 21:27 ` Jason Merrill
2011-09-20 8:47 ` Dodji Seketeli
2011-09-20 14:12 ` Jason Merrill
2011-09-20 14:12 ` Dodji Seketeli
2011-09-21 2:51 ` Jason Merrill
2011-09-21 19:09 ` Dodji Seketeli
2011-09-22 15:32 ` Jason Merrill
2011-09-26 21:11 ` Dodji Seketeli
2011-09-26 22:30 ` Jason Merrill
2011-09-27 18:43 ` Dodji Seketeli
2011-09-29 7:05 ` Jason Merrill [this message]
2011-09-29 19:20 ` Dodji Seketeli
2011-09-29 21:25 ` Jason Merrill
2011-09-29 23:33 ` Dodji Seketeli
2011-09-30 15:56 ` Jason Merrill
2011-09-30 21:04 ` Jason Merrill
2011-10-03 22:50 ` Dodji Seketeli
2011-10-04 19:59 ` Jason Merrill
2011-10-04 20:35 ` Dodji Seketeli
2011-10-03 20:09 ` Dodji Seketeli
2011-10-04 20:03 ` Jason Merrill
2011-10-04 20:28 ` Dodji Seketeli
2011-09-20 0:08 ` Dodji Seketeli
2011-07-16 14:39 ` [PATCH 5/7] Add line map statistics to -fmem-report output Dodji Seketeli
2011-09-12 22:07 ` Jason Merrill
2011-09-16 8:29 ` Dodji Seketeli
2011-09-17 22:05 ` Jason Merrill
2011-09-20 12:10 ` Dodji Seketeli
2011-09-20 14:08 ` Jason Merrill
2011-07-16 14:39 ` [PATCH 4/7] Support -fdebug-cpp option Dodji Seketeli
2011-08-21 11:02 ` Alexandre Oliva
2011-08-21 11:40 ` Jakub Jelinek
2011-08-22 14:45 ` Tom Tromey
2011-08-22 15:22 ` Jakub Jelinek
2011-08-23 19:52 ` Dodji Seketeli
2011-08-24 15:11 ` Tom Tromey
2011-09-12 22:07 ` Jason Merrill
2011-09-16 8:23 ` Dodji Seketeli
2011-09-17 22:01 ` Jason Merrill
2011-07-16 15:25 ` [PATCH 2/7] Generate virtual locations for tokens Dodji Seketeli
2011-08-09 15:30 ` Dodji Seketeli
2011-09-12 21:15 ` Jason Merrill
2011-09-14 10:01 ` Dodji Seketeli
2011-09-14 22:56 ` Jason Merrill
2011-09-18 13:44 ` Dodji Seketeli
2011-09-19 22:31 ` Jason Merrill
2011-09-21 14:55 ` Dodji Seketeli
2011-09-22 17:10 ` Jason Merrill
2011-09-26 14:47 ` Dodji Seketeli
2011-09-26 20:39 ` Jason Merrill
2011-09-28 3:23 ` Dodji Seketeli
2011-09-28 14:49 ` Jason Merrill
2011-09-28 21:24 ` Dodji Seketeli
2011-09-28 21:45 ` Jason Merrill
2011-09-29 5:49 ` Dodji Seketeli
2011-07-16 15:28 ` [PATCH 1/7] Linemap infrastructure for virtual locations Dodji Seketeli
2011-07-18 22:06 ` Jason Merrill
2011-07-19 10:47 ` Dodji Seketeli
2011-07-19 17:26 ` Jason Merrill
2011-07-19 18:03 ` Dodji Seketeli
2011-07-19 23:37 ` Jason Merrill
2011-07-30 6:20 ` Jason Merrill
2011-08-01 18:54 ` Dodji Seketeli
2011-08-01 4:42 ` Jason Merrill
2011-08-02 4:48 ` Jason Merrill
2011-08-04 15:28 ` Dodji Seketeli
2011-08-04 21:30 ` Jason Merrill
2011-08-05 17:12 ` Dodji Seketeli
2011-08-05 17:31 ` Jason Merrill
2011-08-09 14:56 ` Dodji Seketeli
2011-08-19 8:46 ` Jason Merrill
2011-08-19 14:43 ` Tom Tromey
2011-09-01 10:37 ` Dodji Seketeli
2011-09-07 19:26 ` Jason Merrill
2011-09-08 12:41 ` Dodji Seketeli
2011-09-09 7:45 ` Jason Merrill
2011-09-09 8:57 ` Jason Merrill
2011-07-16 15:34 ` [PATCH 7/7] Reduce memory waste due to non-power-of-2 allocs Dodji Seketeli
2011-09-12 22:25 ` Jason Merrill
2011-09-17 13:41 ` Dodji Seketeli
2011-09-17 22:22 ` Jason Merrill
2011-09-18 22:30 ` Dodji Seketeli
2011-09-19 6:51 ` Laurynas Biveinis
2011-07-16 16:47 ` [PATCH 0/7] Tracking locations of tokens resulting from macro expansion Tobias Burnus
2011-07-16 17:57 ` Dodji Seketeli
2011-10-04 21:07 [PATCH 3/7] Emit macro expansion related diagnostics Jason Merrill
2011-10-04 21:31 ` Dodji Seketeli
2011-10-11 9:09 ` Dodji Seketeli
2011-10-11 15:15 ` Jason Merrill
2011-10-12 17:44 ` Gabriel Dos Reis
2011-10-13 17:32 ` Dodji Seketeli
2011-10-14 22:21 ` Jason Merrill
2011-10-17 9:57 ` Dodji Seketeli
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=4E83B6D5.5030907@redhat.com \
--to=jason@redhat.com \
--cc=bonzini@gnu.org \
--cc=burnus@net-b.de \
--cc=charlet@act-europe.fr \
--cc=dodji@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=gdr@integrable-solutions.net \
--cc=joseph@codesourcery.com \
--cc=tromey@redhat.com \
/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).