From fca089e8a47314a40ad93527ba9f9d0d374b3afb Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Tue, 18 Jul 2023 13:26:39 -0400 Subject: [PATCH] c++: Add tests for P2621, no UB in lexer [PR110340] C++26 P2621 removes UB in the lexer and either makes the construct valid or ill-formed. We're already handling this correctly so this patch only adds tests. PR c++/110340 gcc/testsuite/ChangeLog: * g++.dg/cpp/string-4.C: New test. * g++.dg/cpp/ucn-2.C: New test. --- gcc/testsuite/g++.dg/cpp/string-4.C | 6 ++++++ gcc/testsuite/g++.dg/cpp/ucn-2.C | 15 +++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp/string-4.C create mode 100644 gcc/testsuite/g++.dg/cpp/ucn-2.C diff --git a/gcc/testsuite/g++.dg/cpp/string-4.C b/gcc/testsuite/g++.dg/cpp/string-4.C new file mode 100644 index 000000000000..37d0388413c1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/string-4.C @@ -0,0 +1,6 @@ +// P2621R2 - UB? In My Lexer? +// { dg-do compile } + +// [lex.phases] If a U+0027 APOSTROPHE or a U+0022 QUOTATION +// MARK matches the last category, the program is ill-formed. +const char * foo=" // { dg-error "terminating|expected" } diff --git a/gcc/testsuite/g++.dg/cpp/ucn-2.C b/gcc/testsuite/g++.dg/cpp/ucn-2.C new file mode 100644 index 000000000000..c5583e06dd63 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp/ucn-2.C @@ -0,0 +1,15 @@ +// P2621R2 - UB? In My Lexer? +// { dg-do compile } + +// Line splicing can form a universal-character-name [lex.charset]. +int \\ +u\ +0\ +3\ +9\ +1 = 0; + +// [cpp.concat] Concatenation can form a universal-character-name. +#define CONCAT(x,y) x##y + +int CONCAT(\,u0393)=0; -- 2.47.2