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.
---


Reply via email to