mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-21 19:35:28 -05:00
libcpp: Use pedwarn instead of warning for CWG2578 diagnostics [PR120778]
This is another case which changed from compile time undefined behavior to ill-formed, diagnostic required. Now, we warn on this, so pedantically that is good enough, maybe all we need is a testcase, but the following patch changes it to a pedwarn for C++26. 2025-08-04 Jakub Jelinek <jakub@redhat.com> PR preprocessor/120778 * macro.cc (stringify_arg): For C++26 emit a pedarn instead of warning for \ at the end of stringification. * g++.dg/DRs/dr2578.C: New test.
This commit is contained in:
committed by
Jakub Jelinek
parent
d49d359b0c
commit
b9f443b617
10
gcc/testsuite/g++.dg/DRs/dr2578.C
Normal file
10
gcc/testsuite/g++.dg/DRs/dr2578.C
Normal file
@@ -0,0 +1,10 @@
|
||||
// DR 2578 - Undefined behavior when creating an invalid string literal via stringizing
|
||||
// { dg-do preprocess }
|
||||
// { dg-options "-pedantic-errors" }
|
||||
|
||||
#define A(a) #a
|
||||
#define B(a) A(a)
|
||||
#define C \\
|
||||
|
||||
const char *x = B(C); // { dg-warning "invalid string literal, ignoring final '\\\\'" "" { target c++23_down } }
|
||||
// { dg-error "invalid string literal, ignoring final '\\\\'" "" { target c++26 } .-1 }
|
||||
@@ -1003,7 +1003,10 @@ stringify_arg (cpp_reader *pfile, const cpp_token **first, unsigned int count)
|
||||
/* Ignore the final \ of invalid string literals. */
|
||||
if (backslash_count & 1)
|
||||
{
|
||||
cpp_error (pfile, CPP_DL_WARNING,
|
||||
cpp_error (pfile,
|
||||
CPP_OPTION (pfile, cplusplus)
|
||||
&& CPP_OPTION (pfile, lang) >= CLK_GNUCXX26
|
||||
? CPP_DL_PEDWARN : CPP_DL_WARNING,
|
||||
"invalid string literal, ignoring final %<\\%>");
|
||||
dest--;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user