Author: Mital Ashok Date: 2024-09-05T10:15:54+02:00 New Revision: 41373098421f2aa551a0879537864c87d797a102
URL: https://github.com/llvm/llvm-project/commit/41373098421f2aa551a0879537864c87d797a102 DIFF: https://github.com/llvm/llvm-project/commit/41373098421f2aa551a0879537864c87d797a102.diff LOG: [Clang] Warn with -Wpre-c23-compat instead of -Wpre-c++17-compat for u8 character literals in C23 (#97210) Co-authored-by: cor3ntin <corentinja...@gmail.com> Added: Modified: clang/docs/ReleaseNotes.rst clang/include/clang/Basic/DiagnosticLexKinds.td clang/lib/Lex/Lexer.cpp clang/test/Sema/pre-c2x-compat.c Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 44ffad94ef41fc..bd84a2e40fb8bd 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -278,6 +278,8 @@ Improvements to Clang's diagnostics - The lifetimebound and GSL analysis in clang are coherent, allowing clang to detect more use-after-free bugs. (#GH100549). +- Clang now warns for u8 character literals used in C23 with ``-Wpre-c23-compat`` instead of ``-Wpre-c++17-compat``. + Improvements to Clang's time-trace ---------------------------------- diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td index 12d7b8c0205ee9..fc14bb6aa21651 100644 --- a/clang/include/clang/Basic/DiagnosticLexKinds.td +++ b/clang/include/clang/Basic/DiagnosticLexKinds.td @@ -283,6 +283,9 @@ def warn_cxx98_compat_unicode_literal : Warning< def warn_cxx14_compat_u8_character_literal : Warning< "unicode literals are incompatible with C++ standards before C++17">, InGroup<CXXPre17Compat>, DefaultIgnore; +def warn_c17_compat_u8_character_literal : Warning< + "unicode literals are incompatible with C standards before C23">, + InGroup<CPre23Compat>, DefaultIgnore; def warn_cxx11_compat_user_defined_literal : Warning< "identifier after literal will be treated as a user-defined literal suffix " "in C++11">, InGroup<CXX11Compat>, DefaultIgnore; diff --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp index ef1e1f4bd9aeb4..8647e9f2f27c3d 100644 --- a/clang/lib/Lex/Lexer.cpp +++ b/clang/lib/Lex/Lexer.cpp @@ -2428,7 +2428,9 @@ bool Lexer::LexCharConstant(Token &Result, const char *CurPtr, ? diag::warn_cxx98_compat_unicode_literal : diag::warn_c99_compat_unicode_literal); else if (Kind == tok::utf8_char_constant) - Diag(BufferPtr, diag::warn_cxx14_compat_u8_character_literal); + Diag(BufferPtr, LangOpts.CPlusPlus + ? diag::warn_cxx14_compat_u8_character_literal + : diag::warn_c17_compat_u8_character_literal); } char C = getAndAdvanceChar(CurPtr, Result); diff --git a/clang/test/Sema/pre-c2x-compat.c b/clang/test/Sema/pre-c2x-compat.c index fad472f1f72d54..15bb9b58349fad 100644 --- a/clang/test/Sema/pre-c2x-compat.c +++ b/clang/test/Sema/pre-c2x-compat.c @@ -1,3 +1,4 @@ // RUN: %clang_cc1 %s -std=c2x -Wpre-c2x-compat -pedantic -fsyntax-only -verify int digit_seps = 123'456; // expected-warning {{digit separators are incompatible with C standards before C23}} +unsigned char u8_char = u8'x'; // expected-warning {{unicode literals are incompatible with C standards before C23}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits