summaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2025-04-24 15:29:50 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2025-04-24 15:29:50 +0200
commit4c8c400ddf0d6de54b0ee557836a934b4025d21f (patch)
tree592b9712707aa13c0df2e9521b8ae8ff7e7d0567 /libcpp
parentfbf8443961f484ed7fb7e953206af1ee60558a24 (diff)
c: Allow $@` in GNU23/GNU2Y raw string delimiters [PR110343]
Aaron mentioned in the PR that late in C23 N3124 was adopted and $@` are now part of basic character set. The paper has been implemented in GCC from what I can see, but we should allow for GNU23/2Y $@` in raw string delimiters as well, like they are allowed for C++26, because the delimiters can contain anything from basic character set but space, ()\, tab, form-feed, newline and backspace. 2025-04-24 Jakub Jelinek <jakub@redhat.com> PR c++/110343 * lex.cc (lex_raw_string): For C allow $@` in raw string delimiters if CPP_OPTION (pfile, low_ucns) i.e. for C23 and later. * gcc.dg/raw-string-1.c: New test.
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/lex.cc5
1 files changed, 3 insertions, 2 deletions
diff --git a/libcpp/lex.cc b/libcpp/lex.cc
index 2d02ce6e734..e7705a64f39 100644
--- a/libcpp/lex.cc
+++ b/libcpp/lex.cc
@@ -2711,8 +2711,9 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base)
|| c == '!' || c == '=' || c == ','
|| c == '"' || c == '\''
|| ((c == '$' || c == '@' || c == '`')
- && CPP_OPTION (pfile, cplusplus)
- && CPP_OPTION (pfile, lang) > CLK_CXX23)))
+ && (CPP_OPTION (pfile, cplusplus)
+ ? CPP_OPTION (pfile, lang) > CLK_CXX23
+ : CPP_OPTION (pfile, low_ucns)))))
prefix[prefix_len++] = c;
else
{