Dodji Seketeli <[email protected]> writes:
> Jason Merrill <[email protected]> writes:
>
>> On 05/24/2012 01:41 PM, Dodji Seketeli wrote:
>
> [...]
>
>>> Another way of seeing it is to say that, from the beginning of
>>> enter_macro_context, we are in a state of "about to expand a macro"
>>> until we actually push the macro context. So it seems to make sense to
>>> flip the flag where the the macro context push happens, IMHO.
>>
>> Sure, that makes sense. It just seems better to me to have the flag
>> set a little longer than necessary in order to keep the setting and
>> unsetting closer together for maintainability.
>
> Like the below? Bootstrap is under way.
FWIW, the patch passed bootstrap and testing on x86_64-unknown-linux-gnu
against trunk.
>
> libcpp/
>
> PR preprocessor/53229
> * internal.h (cpp_reader::set_invocation_location): Remove.
> (cpp_reader::about_to_expand_macro_p): New member flag.
> * directives.c (do_pragma): Remove Kludge as
> pfile->set_invocation_location is no more.
> * macro.c (cpp_get_token_1): Do away with the use of
> cpp_reader::set_invocation_location. Just collect the macro
> expansion point when we are about to expand the top-most macro.
> Do not override cpp_reader::about_to_expand_macro_p.
> This fixes gcc.dg/cpp/paste12.c by making get_token_no_padding
> properly handle locations of expansion points.
> (cpp_get_token_with_location): Adjust, as
> cpp_reader::set_invocation_location is no more.
> (paste_tokens): Take a virtual location parameter for
> the LHS of the pasting operator. Use it in diagnostics. Update
> comments.
> (paste_all_tokens): Tighten the assert. Propagate the location of
> the expansion point when no virtual locations are available.
> Pass the virtual location to paste_tokens.
> (in_macro_expansion_p): New static function.
> (enter_macro_context): Set the cpp_reader::about_to_expand_macro_p
> flag until we really start expanding the macro.
>
> gcc/testsuite/
>
> PR preprocessor/53229
> * gcc.dg/cpp/paste6.c: Force to run without
> -ftrack-macro-expansion.
> * gcc.dg/cpp/paste8.c: Likewise.
> * gcc.dg/cpp/paste8-2.c: New test, like paste8.c but run with
> -ftrack-macro-expansion.
> * gcc.dg/cpp/paste12.c: Force to run without
> -ftrack-macro-expansion.
> * gcc.dg/cpp/paste12-2.c: New test, like paste12.c but run with
> -ftrack-macro-expansion.
> * gcc.dg/cpp/paste13.c: Likewise.
> * gcc.dg/cpp/paste14.c: Likewise.
> * gcc.dg/cpp/paste14-2.c: New test, like paste14.c but run with
> -ftrack-macro-expansion.
> * gcc.dg/cpp/paste18.c: New test.
Thanks.
--
Dodji