Re: [PATCH] PR125533 fortran/libcpp: CPP stringify operator emits \" for double-quotes in Fortran mode
Jerry D <[email protected]> Sun, 7 Jun 2026 11:56:16 -0700
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
On 6/7/26 11:44 AM, Harald Anlauf wrote:
> Hi Jerry,
>
> the Fortran parts are trivially OK, so someone else knowing libcpp
> should approve it.
>
> Thanks,
> Harald
>
Thanks Harald, I completely agree. I will work on figuring out who that should be.
Jerry
> Am 05.06.26 um 9:47 PM schrieb Jerry D:
>> See attached patch. This one was a surprise and a subtle problem.
>>
>> See the explanation in the commit message. Since this touches on libcpp I am
>> not sure who else should review this.
>>
>> Regression tested on x86_64.
>>
>> OK for mainline and backport to 16 later.
>>
>> Regards,
>>
>> Jerry
>>
>> ---
>>
>> The traditional-mode CPP stringification operator escaped double-quote
>> characters in macro argument tokens with a backslash (e.g.
>> CPP_STRINGIFY(key .eq. "x") expanded to "key .eq. \"x\""). This is
>> correct for C but not valid Fortran: Fortran represents an embedded
>> double-quote with a doubled quote (""), not a backslash-quote (\").
>> The backslash-escaped output was rejected by the Fortran scanner with a
>> spurious syntax error.
>>
>> Fix: add a new flag fortran_string_escaping to struct cpp_options. When
>> set, traditional.cc emits a doubled quote instead of a backslash-quote when
>> escaping a double-quote character inside a stringified argument, and
>> suppresses the extra backslash before a literal backslash in that context.
>> Set the flag in gfc_cpp_post_options, which configures the CPP reader for
>> Fortran.
>>
>> PR fortran/125533
>>
>> Assisted by: Claude Sonnet 4.6
>>
>> gcc/fortran/ChangeLog:
>>
>> * cpp.cc (gfc_cpp_post_options): Set fortran_string_escaping in
>> cpp_options so traditional-mode stringification uses doubled-quote
>> escaping instead of backslash-quote.
>>
>> gcc/testsuite/ChangeLog:
>>
>> * gfortran.dg/cpp_stringify_quote_1.F90: New test.
>>
>> libcpp/ChangeLog:
>>
>> * include/cpplib.h (cpp_options): Add fortran_string_escaping flag.
>> * traditional.cc (replace_args_and_push): When
>> fortran_string_escaping is set, escape double-quote with a doubled
>> quote rather than a backslash; suppress the extra backslash before a
>> backslash inside a quoted argument.
>> ---
>