Hello Jakub,
Jakub Jelinek <[email protected]> writes:
> __has_{cpp_,}attribute builtin macros are effectively function-like macros
> taking one argument (and the ISO preprocessor expands macros in the argument
> which is IMHO desirable), but the traditional preprocessor has been crashing
> on them or reporting errors.
> As the hook uses cpp_get_token and thus the ISO preprocessor, we need to set
> up things such that the argument and ()s around it are already preprocessed
> and ready to be reparsed by the ISO preprocessor (this is similar to how
> e.g. #if/#elif and various other directives are handled).
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2015-03-11 Jakub Jelinek <[email protected]>
>
> PR preprocessor/65238
> * internal.h (_cpp_scan_out_logical_line): Add third argument.
> * directives.c (prepare_directive_trad): Pass false to it.
> * traditional.c (_cpp_read_logical_line_trad,
> _cpp_create_trad_definition): Likewise.
> (struct fun_macro): Add paramc field.
> (fun_like_macro): New function.
> (maybe_start_funlike): Handle NODE_BUILTIN macros. Initialize
> macro->paramc field.
> (save_argument): Use macro->paramc instead of
> macro->node->value.macro->paramc.
> (push_replacement_text): Formatting fix.
> (recursive_macro): Use fun_like_macro helper.
> (_cpp_scan_out_logical_line): Likewise. Add BUILTIN_MACRO_ARG
> argument. Initialize fmacro.paramc field. Handle builtin
> function-like macros.
>
> * c-c++-common/cpp/pr65238-1.c: New test.
> * gcc.dg/cpp/pr65238-2.c: New test.
> * gcc.dg/cpp/trad/pr65238-3.c: New test.
> * gcc.dg/cpp/trad/pr65238-4.c: New test.
I do not have the rights to ACK this but FWIW it looks OK to me. Sorry
for the delay in reviewing this.
Thanks!
Cheers,
--
Dodji