[clang] ba15d18 - [clang] Use -std=c++23 instead of -std=c++2b

Mark de Wever via cfe-commits cfe-commits at lists.llvm.org
Thu May 4 10:20:01 PDT 2023


Author: Mark de Wever
Date: 2023-05-04T19:19:52+02:00
New Revision: ba15d186e5cef2620d562c6c9d9a6d570382cd0a

URL: https://github.com/llvm/llvm-project/commit/ba15d186e5cef2620d562c6c9d9a6d570382cd0a
DIFF: https://github.com/llvm/llvm-project/commit/ba15d186e5cef2620d562c6c9d9a6d570382cd0a.diff

LOG: [clang] Use -std=c++23 instead of -std=c++2b

During the ISO C++ Committee meeting plenary session the C++23 Standard
has been voted as technical complete.

This updates the reference to c++2b to c++23 and updates the __cplusplus
macro.

Drive-by fixes c++1z -> c++17 and c++2a -> c++20 when seen.

Reviewed By: aaron.ballman

Differential Revision: https://reviews.llvm.org/D149553

Added: 
    

Modified: 
    clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp
    clang-tools-extra/clangd/index/StdLib.cpp
    clang/docs/CommandGuide/clang.rst
    clang/docs/ReleaseNotes.rst
    clang/docs/StandardCPlusPlusModules.rst
    clang/include/clang/Basic/DiagnosticCommonKinds.td
    clang/include/clang/Basic/DiagnosticGroups.td
    clang/include/clang/Basic/DiagnosticLexKinds.td
    clang/include/clang/Basic/DiagnosticParseKinds.td
    clang/include/clang/Basic/DiagnosticSemaKinds.td
    clang/include/clang/Basic/LangOptions.def
    clang/include/clang/Basic/LangStandard.h
    clang/include/clang/Basic/LangStandards.def
    clang/include/clang/Lex/LiteralSupport.h
    clang/include/clang/Sema/Sema.h
    clang/lib/AST/ExprConstant.cpp
    clang/lib/Basic/LangOptions.cpp
    clang/lib/Basic/Targets/OSTargets.cpp
    clang/lib/Driver/Driver.cpp
    clang/lib/Driver/ToolChains/Clang.cpp
    clang/lib/Frontend/InitPreprocessor.cpp
    clang/lib/Headers/stdatomic.h
    clang/lib/Lex/Lexer.cpp
    clang/lib/Lex/LiteralSupport.cpp
    clang/lib/Lex/PPDirectives.cpp
    clang/lib/Lex/PPExpressions.cpp
    clang/lib/Parse/ParseDeclCXX.cpp
    clang/lib/Parse/ParseExpr.cpp
    clang/lib/Parse/ParseExprCXX.cpp
    clang/lib/Parse/ParseStmt.cpp
    clang/lib/Sema/Sema.cpp
    clang/lib/Sema/SemaDeclCXX.cpp
    clang/lib/Sema/SemaExpr.cpp
    clang/lib/Sema/SemaExprCXX.cpp
    clang/lib/Sema/SemaModule.cpp
    clang/lib/Sema/SemaOverload.cpp
    clang/lib/Sema/SemaStmt.cpp
    clang/lib/Sema/SemaType.cpp
    clang/test/AST/Interp/if.cpp
    clang/test/AST/ast-dump-if-json.cpp
    clang/test/AST/ast-dump-stmt.cpp
    clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp
    clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.auto.deduct/p2.cpp
    clang/test/CXX/drs/dr0xx.cpp
    clang/test/CXX/drs/dr10xx.cpp
    clang/test/CXX/drs/dr12xx.cpp
    clang/test/CXX/drs/dr18xx.cpp
    clang/test/CXX/drs/dr1xx.cpp
    clang/test/CXX/drs/dr20xx.cpp
    clang/test/CXX/drs/dr21xx.cpp
    clang/test/CXX/drs/dr23xx.cpp
    clang/test/CXX/drs/dr2xx.cpp
    clang/test/CXX/drs/dr3xx.cpp
    clang/test/CXX/drs/dr4xx.cpp
    clang/test/CXX/drs/dr5xx.cpp
    clang/test/CXX/drs/dr6xx.cpp
    clang/test/CXX/drs/dr9xx.cpp
    clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp
    clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4-cxx14.cpp
    clang/test/CXX/expr/expr.unary/expr.new/p2-cxx1z.cpp
    clang/test/CXX/over/over.match/over.match.best/over.best.ics/p6.cpp
    clang/test/CXX/over/over.oper/p7.cpp
    clang/test/CXX/special/class.copy/p3-cxx11.cpp
    clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp
    clang/test/CXX/temp/temp.decls/temp.mem/p5.cpp
    clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp
    clang/test/CodeGenCXX/cxx2b-consteval-if.cpp
    clang/test/CodeGenCXX/cxx2b-static-call-operator.cpp
    clang/test/CodeGenCXX/cxx2b-static-subscript-operator.cpp
    clang/test/CoverageMapping/if.cpp
    clang/test/CoverageMapping/strong_order.cpp
    clang/test/Driver/cl-options.c
    clang/test/Driver/modules-fprebuilt-mdoule-path.cpp
    clang/test/Driver/std.cpp
    clang/test/Driver/unknown-std.cpp
    clang/test/FixIt/fixit-c++11.cpp
    clang/test/Lexer/char-escapes-delimited.c
    clang/test/Lexer/cxx-features.cpp
    clang/test/Lexer/size_t-literal.cpp
    clang/test/Modules/gmodules-deduction-guide.cpp
    clang/test/Modules/merge-constrained-friends.cpp
    clang/test/OpenMP/target_update_messages.cpp
    clang/test/Parser/cxx-concepts-requires-clause.cpp
    clang/test/Parser/cxx0x-lambda-expressions.cpp
    clang/test/Parser/cxx1z-constexpr-lambdas.cpp
    clang/test/Parser/cxx2a-template-lambdas.cpp
    clang/test/Parser/cxx2b-auto-x.cpp
    clang/test/Parser/cxx2b-init-statement.cpp
    clang/test/Parser/cxx2b-label.cpp
    clang/test/Parser/cxx2b-lambdas-ext-warns.cpp
    clang/test/Parser/cxx2b-lambdas.cpp
    clang/test/Parser/cxx2b-subscript.cpp
    clang/test/Parser/switch-recovery.cpp
    clang/test/Preprocessor/ext-pp-directive.c
    clang/test/Preprocessor/init.c
    clang/test/Preprocessor/macro_vaopt_check.cpp
    clang/test/Preprocessor/predefined-win-macros.c
    clang/test/Preprocessor/suggest-typoed-directive.c
    clang/test/Preprocessor/ucn-pp-identifier.c
    clang/test/Sema/gnu-asm-pmf.cpp
    clang/test/Sema/stmtexpr-init.c
    clang/test/SemaCXX/P1155.cpp
    clang/test/SemaCXX/constant-expression-cxx11.cpp
    clang/test/SemaCXX/constant-expression-cxx14.cpp
    clang/test/SemaCXX/constant-expression-cxx2b.cpp
    clang/test/SemaCXX/conversion-function.cpp
    clang/test/SemaCXX/coroutines.cpp
    clang/test/SemaCXX/cxx2a-consteval-default-params.cpp
    clang/test/SemaCXX/cxx2b-ast-print.cpp
    clang/test/SemaCXX/cxx2b-consteval-if.cpp
    clang/test/SemaCXX/cxx2b-designated-initializers.cpp
    clang/test/SemaCXX/cxx2b-init-statement.cpp
    clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp
    clang/test/SemaCXX/cxx2b-overloaded-operator.cpp
    clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp
    clang/test/SemaCXX/deduced-return-type-cxx14.cpp
    clang/test/SemaCXX/lambda-capture-type-deduction.cpp
    clang/test/SemaCXX/lambda-expressions.cpp
    clang/test/SemaCXX/lambda-unevaluated.cpp
    clang/test/SemaCXX/libcxx_is_trivially_equality_comparable_hack.cpp
    clang/test/SemaCXX/overloaded-operator-decl.cpp
    clang/test/SemaCXX/return-stack-addr.cpp
    clang/test/SemaCXX/size_t-literal.cpp
    clang/test/SemaObjCXX/block-capture.mm
    clang/test/SemaOpenCLCXX/address-space-lambda.clcpp
    clang/test/SemaTemplate/deduction.cpp
    clang/test/SemaTemplate/instantiate-subscript.cpp
    clang/test/SemaTemplate/instantiation-dependence.cpp
    clang/test/SemaTemplate/make_integer_seq.cpp
    clang/test/SemaTemplate/pr52909.cpp
    clang/test/SemaTemplate/type_pack_element.cpp
    clang/www/OpenProjects.html
    clang/www/cxx_status.html

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp b/clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp
index dfcc82c270540..27fa07ed3a385 100644
--- a/clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp
@@ -78,7 +78,7 @@ RedundantStringCStrCheck::RedundantStringCStrCheck(StringRef Name,
           Options.get("StringParameterFunctions", ""))) {
   if (getLangOpts().CPlusPlus20)
     StringParameterFunctions.push_back("::std::format");
-  if (getLangOpts().CPlusPlus2b)
+  if (getLangOpts().CPlusPlus23)
     StringParameterFunctions.push_back("::std::print");
 }
 

diff  --git a/clang-tools-extra/clangd/index/StdLib.cpp b/clang-tools-extra/clangd/index/StdLib.cpp
index 1133d984efbae..381d599e3d2aa 100644
--- a/clang-tools-extra/clangd/index/StdLib.cpp
+++ b/clang-tools-extra/clangd/index/StdLib.cpp
@@ -47,8 +47,8 @@ llvm::StringLiteral mandatoryHeader(Lang L) {
 
 LangStandard::Kind standardFromOpts(const LangOptions &LO) {
   if (LO.CPlusPlus) {
-    if (LO.CPlusPlus2b)
-      return LangStandard::lang_cxx2b;
+    if (LO.CPlusPlus23)
+      return LangStandard::lang_cxx23;
     if (LO.CPlusPlus20)
       return LangStandard::lang_cxx20;
     if (LO.CPlusPlus17)

diff  --git a/clang/docs/CommandGuide/clang.rst b/clang/docs/CommandGuide/clang.rst
index 0722979885afb..6c59ffd2ab120 100644
--- a/clang/docs/CommandGuide/clang.rst
+++ b/clang/docs/CommandGuide/clang.rst
@@ -193,13 +193,13 @@ Language Selection and Mode Options
 
    ISO C++ 2020 with amendments and GNU extensions
 
-  | ``c++2b``
+  | ``c++23``
 
-   Working draft for ISO C++ 2023
+   ISO C++ 2023 with amendments
 
-  | ``gnu++2b``
+  | ``gnu++23``
 
-   Working draft for ISO C++ 2023 with GNU extensions
+   ISO C++ 2023 with amendments and GNU extensions
 
  The default C++ language standard is ``gnu++17``.
 

diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index ff391c6cb3b99..8fda486228dbc 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -93,7 +93,7 @@ C++20 Feature Support
   error again in the future once there is a less fragile way to mark a module
   as being part of the implementation rather than a user module.
 
-C++2b Feature Support
+C++23 Feature Support
 ^^^^^^^^^^^^^^^^^^^^^
 
 - Implemented `P2036R3: Change scope of lambda trailing-return-type <https://wg21.link/P2036R3>`_
@@ -181,6 +181,8 @@ Non-comprehensive list of changes in this release
 
 New Compiler Flags
 ------------------
+- The flag ``-std=c++23`` has been added. This behaves the same as the existing
+  flag ``-std=c++2b``.
 
 Deprecated Compiler Flags
 -------------------------
@@ -386,7 +388,7 @@ Bug Fixes to C++ Support
   (`#58674 <https://github.com/llvm/llvm-project/issues/58674>`_)
 - Fix incorrect deletion of the default constructor of unions in some
   cases. (`#48416 <https://github.com/llvm/llvm-project/issues/48416>`_)
-- No longer issue a pre-C++2b compatibility warning in ``-pedantic`` mode
+- No longer issue a pre-C++23 compatibility warning in ``-pedantic`` mode
   regading overloaded `operator[]` with more than one parmeter or for static
   lambdas. (`#61582 <https://github.com/llvm/llvm-project/issues/61582>`_)
 - Stop stripping CV qualifiers from the type of ``this`` when capturing it by value in

diff  --git a/clang/docs/StandardCPlusPlusModules.rst b/clang/docs/StandardCPlusPlusModules.rst
index 0b44265374a8b..a59a3edbbbac2 100644
--- a/clang/docs/StandardCPlusPlusModules.rst
+++ b/clang/docs/StandardCPlusPlusModules.rst
@@ -434,7 +434,7 @@ The following example is not allowed:
 .. code-block:: console
 
   $ clang++ -std=c++20 M.cppm --precompile -o M.pcm
-  $ clang++ -std=c++2b Use.cpp -fprebuilt-module-path=.
+  $ clang++ -std=c++23 Use.cpp -fprebuilt-module-path=.
 
 The compiler would reject the example due to the inconsistent language options.
 Not all options are language options.
@@ -611,7 +611,7 @@ The following describes issues in the current implementation of modules.
 Please see https://github.com/llvm/llvm-project/labels/clang%3Amodules for more issues
 or file a new issue if you don't find an existing one.
 If you're going to create a new issue for standard C++ modules,
-please start the title with ``[C++20] [Modules]`` (or ``[C++2b] [Modules]``, etc)
+please start the title with ``[C++20] [Modules]`` (or ``[C++23] [Modules]``, etc)
 and add the label ``clang:modules`` (if you have permissions for that).
 
 For higher level support for proposals, you could visit https://clang.llvm.org/cxx_status.html.

diff  --git a/clang/include/clang/Basic/DiagnosticCommonKinds.td b/clang/include/clang/Basic/DiagnosticCommonKinds.td
index da4e2b42dc2ea..42d8a0abfbceb 100644
--- a/clang/include/clang/Basic/DiagnosticCommonKinds.td
+++ b/clang/include/clang/Basic/DiagnosticCommonKinds.td
@@ -210,14 +210,14 @@ def ext_cxx11_longlong : Extension<
 def warn_cxx98_compat_longlong : Warning<
   "'long long' is incompatible with C++98">,
   InGroup<CXX98CompatPedantic>, DefaultIgnore;
-def ext_cxx2b_size_t_suffix : ExtWarn<
-  "'size_t' suffix for literals is a C++2b extension">,
-  InGroup<CXX2b>;
+def ext_cxx23_size_t_suffix : ExtWarn<
+  "'size_t' suffix for literals is a C++23 extension">,
+  InGroup<CXX23>;
 def warn_cxx20_compat_size_t_suffix : Warning<
   "'size_t' suffix for literals is incompatible with C++ standards before "
-  "C++2b">, InGroup<CXXPre2bCompat>, DefaultIgnore;
-def err_cxx2b_size_t_suffix: Error<
-  "'size_t' suffix for literals is a C++2b feature">;
+  "C++23">, InGroup<CXXPre23Compat>, DefaultIgnore;
+def err_cxx23_size_t_suffix: Error<
+  "'size_t' suffix for literals is a C++23 feature">;
 def err_size_t_literal_too_large: Error<
   "%select{signed |}0'size_t' literal is out of range of possible "
   "%select{signed |}0'size_t' values">;

diff  --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index 0ee43fb8837a1..87e72f000d494 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -304,9 +304,9 @@ def CXXPre20CompatPedantic : DiagGroup<"pre-c++20-compat-pedantic",
                                        [CXXPre20Compat]>;
 def : DiagGroup<"c++98-c++11-c++14-c++17-compat-pedantic",
                 [CXXPre20CompatPedantic]>;
-def CXXPre2bCompat : DiagGroup<"pre-c++2b-compat">;
-def CXXPre2bCompatPedantic :
-  DiagGroup<"pre-c++2b-compat-pedantic", [CXXPre2bCompat]>;
+def CXXPre23Compat : DiagGroup<"pre-c++23-compat">;
+def CXXPre23CompatPedantic :
+  DiagGroup<"pre-c++23-compat-pedantic", [CXXPre23Compat]>;
 
 def CXX98CompatBindToTemporaryCopy :
   DiagGroup<"c++98-compat-bind-to-temporary-copy">;
@@ -321,7 +321,7 @@ def CXX98Compat : DiagGroup<"c++98-compat",
                              CXXPre14Compat,
                              CXXPre17Compat,
                              CXXPre20Compat,
-                             CXXPre2bCompat]>;
+                             CXXPre23Compat]>;
 // Warnings for C++11 features which are Extensions in C++98 mode.
 def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic",
                                     [CXX98Compat,
@@ -330,7 +330,7 @@ def CXX98CompatPedantic : DiagGroup<"c++98-compat-pedantic",
                                      CXXPre14CompatPedantic,
                                      CXXPre17CompatPedantic,
                                      CXXPre20CompatPedantic,
-                                     CXXPre2bCompatPedantic]>;
+                                     CXXPre23CompatPedantic]>;
 
 def CXX11Narrowing : DiagGroup<"c++11-narrowing">;
 
@@ -360,39 +360,39 @@ def CXX11Compat : DiagGroup<"c++11-compat",
                              CXXPre14Compat,
                              CXXPre17Compat,
                              CXXPre20Compat,
-                             CXXPre2bCompat]>;
+                             CXXPre23Compat]>;
 def : DiagGroup<"c++0x-compat", [CXX11Compat]>;
 def CXX11CompatPedantic : DiagGroup<"c++11-compat-pedantic",
                                     [CXX11Compat,
                                      CXXPre14CompatPedantic,
                                      CXXPre17CompatPedantic,
                                      CXXPre20CompatPedantic,
-                                     CXXPre2bCompatPedantic]>;
+                                     CXXPre23CompatPedantic]>;
 
 def CXX14Compat : DiagGroup<"c++14-compat", [CXXPre17Compat,
                                              CXXPre20Compat,
-                                             CXXPre2bCompat]>;
+                                             CXXPre23Compat]>;
 def CXX14CompatPedantic : DiagGroup<"c++14-compat-pedantic",
                                     [CXX14Compat,
                                      CXXPre17CompatPedantic,
                                      CXXPre20CompatPedantic,
-                                     CXXPre2bCompatPedantic]>;
+                                     CXXPre23CompatPedantic]>;
 
 def CXX17Compat : DiagGroup<"c++17-compat", [DeprecatedRegister,
                                              DeprecatedIncrementBool,
                                              CXX17CompatMangling,
                                              CXXPre20Compat,
-                                             CXXPre2bCompat]>;
+                                             CXXPre23Compat]>;
 def CXX17CompatPedantic : DiagGroup<"c++17-compat-pedantic",
                                     [CXX17Compat,
                                      CXXPre20CompatPedantic,
-                                     CXXPre2bCompatPedantic]>;
+                                     CXXPre23CompatPedantic]>;
 def : DiagGroup<"c++1z-compat", [CXX17Compat]>;
 
-def CXX20Compat : DiagGroup<"c++20-compat", [CXXPre2bCompat]>;
+def CXX20Compat : DiagGroup<"c++20-compat", [CXXPre23Compat]>;
 def CXX20CompatPedantic : DiagGroup<"c++20-compat-pedantic",
                                     [CXX20Compat,
-                                     CXXPre2bCompatPedantic]>;
+                                     CXXPre23CompatPedantic]>;
 def : DiagGroup<"c++2a-compat", [CXX20Compat]>;
 def : DiagGroup<"c++2a-compat-pedantic", [CXX20CompatPedantic]>;
 
@@ -1108,9 +1108,9 @@ def CXX17 : DiagGroup<"c++17-extensions", [CXX17Attrs]>;
 // earlier C++ versions.
 def CXX20 : DiagGroup<"c++20-extensions", [CXX20Designator, CXX20Attrs]>;
 
-// A warning group for warnings about using C++2b features as extensions in
+// A warning group for warnings about using C++23 features as extensions in
 // earlier C++ versions.
-def CXX2b : DiagGroup<"c++2b-extensions">;
+def CXX23 : DiagGroup<"c++23-extensions">;
 
 def : DiagGroup<"c++0x-extensions", [CXX11]>;
 def : DiagGroup<"c++1y-extensions", [CXX14]>;

diff  --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td
index b77c19b816d86..ef5b1d8be0fd5 100644
--- a/clang/include/clang/Basic/DiagnosticLexKinds.td
+++ b/clang/include/clang/Basic/DiagnosticLexKinds.td
@@ -138,13 +138,13 @@ def ext_mathematical_notation : ExtWarn<
 
 def ext_delimited_escape_sequence : Extension<
   "%select{delimited|named}0 escape sequences are a "
-  "%select{Clang|C++2b}1 extension">,
+  "%select{Clang|C++23}1 extension">,
   InGroup<DiagGroup<"delimited-escape-sequence-extension">>;
 
-def warn_cxx2b_delimited_escape_sequence : Warning<
+def warn_cxx23_delimited_escape_sequence : Warning<
   "%select{delimited|named}0 escape sequences are "
-  "incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 
 def err_delimited_escape_empty : Error<
   "delimited escape sequence cannot be empty">;
@@ -396,10 +396,10 @@ def ext_pp_include_next_directive : Extension<
   "#include_next is a language extension">, InGroup<GNUIncludeNext>;
 
 def ext_pp_warning_directive : Extension<
-  "#warning is a %select{C2x|C++2b}0 extension">;
-def warn_cxx2b_compat_warning_directive : Warning<
-  "#warning is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "#warning is a %select{C2x|C++23}0 extension">;
+def warn_cxx23_compat_warning_directive : Warning<
+  "#warning is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 def warn_c2x_compat_warning_directive : Warning<
   "#warning is incompatible with C standards before C2x">,
   InGroup<CPre2xCompat>, DefaultIgnore;
@@ -739,14 +739,14 @@ def ext_c2x_pp_directive : ExtWarn<
   "use of a '#%select{<BUG IF SEEN>|elifdef|elifndef}0' directive "
   "is a C2x extension">,
   InGroup<C2x>;
-def warn_cxx2b_compat_pp_directive : Warning<
+def warn_cxx23_compat_pp_directive : Warning<
   "use of a '#%select{<BUG IF SEEN>|elifdef|elifndef}0' directive "
-  "is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
-def ext_cxx2b_pp_directive : ExtWarn<
+  "is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
+def ext_cxx23_pp_directive : ExtWarn<
   "use of a '#%select{<BUG IF SEEN>|elifdef|elifndef}0' directive "
-  "is a C++2b extension">,
-  InGroup<CXX2b>;
+  "is a C++23 extension">,
+  InGroup<CXX23>;
 
 def err_pp_visibility_non_macro : Error<"no macro named %0">;
 

diff  --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td
index d8ad04728b32d..5d5048a7d2c04 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -300,14 +300,14 @@ def ext_c_label_end_of_compound_statement : ExtWarn<
   "label at end of compound statement is a C2x extension">,
    InGroup<C2x>;
 def ext_cxx_label_end_of_compound_statement : ExtWarn<
-  "label at end of compound statement is a C++2b extension">,
-   InGroup<CXX2b>;
+  "label at end of compound statement is a C++23 extension">,
+   InGroup<CXX23>;
 def warn_c2x_compat_label_end_of_compound_statement : Warning<
   "label at end of compound statement is incompatible with C standards before C2x">,
   InGroup<CPre2xCompat>, DefaultIgnore;
 def warn_cxx20_compat_label_end_of_compound_statement : Warning<
-  "label at end of compound statement is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "label at end of compound statement is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 def err_address_of_label_outside_fn : Error<
   "use of address-of-label extension outside of a function body">;
 def err_asm_operand_wide_string_literal : Error<
@@ -566,11 +566,11 @@ def err_expected_init_in_condition_lparen : Error<
 def err_extraneous_rparen_in_condition : Error<
   "extraneous ')' after condition, expected a statement">;
 def ext_alias_in_init_statement : ExtWarn<
-  "alias declaration in this context is a C++2b extension">,
-  InGroup<CXX2b>;
+  "alias declaration in this context is a C++23 extension">,
+  InGroup<CXX23>;
 def warn_cxx20_alias_in_init_statement  : Warning<
-  "alias declaration in this context is incompatible with C++ standards before C++2b">,
-  DefaultIgnore, InGroup<CXXPre2bCompat>;
+  "alias declaration in this context is incompatible with C++ standards before C++23">,
+  DefaultIgnore, InGroup<CXXPre23Compat>;
 def warn_dangling_else : Warning<
   "add explicit braces to avoid dangling else">,
   InGroup<DanglingElse>;
@@ -652,11 +652,11 @@ def warn_cxx14_compat_constexpr_if : Warning<
   "constexpr if is incompatible with C++ standards before C++17">,
   DefaultIgnore, InGroup<CXXPre17Compat>;
 def ext_consteval_if : ExtWarn<
-  "consteval if is a C++2b extension">,
-   InGroup<CXX2b>;
+  "consteval if is a C++23 extension">,
+   InGroup<CXX23>;
 def warn_cxx20_compat_consteval_if : Warning<
-  "consteval if is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "consteval if is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 
 def ext_init_statement : ExtWarn<
   "'%select{if|switch}0' initialization statements are a C++17 extension">,
@@ -1014,14 +1014,14 @@ def err_lambda_capture_multiple_ellipses : Error<
 def err_capture_default_first : Error<
   "capture default must be first">;
 def ext_decl_attrs_on_lambda : ExtWarn<
-  "an attribute specifier sequence in this position is a C++2b extension">,
-  InGroup<CXX2b>;
+  "an attribute specifier sequence in this position is a C++23 extension">,
+  InGroup<CXX23>;
 def ext_lambda_missing_parens : ExtWarn<
-  "lambda without a parameter clause is a C++2b extension">,
-  InGroup<CXX2b>;
+  "lambda without a parameter clause is a C++23 extension">,
+  InGroup<CXX23>;
 def warn_cxx20_compat_decl_attrs_on_lambda : Warning<
   "an attribute specifier sequence in this position is incompatible with C++ "
-  "standards before C++2b">, InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "standards before C++23">, InGroup<CXXPre23Compat>, DefaultIgnore;
 
 // C++17 lambda expressions
 def err_expected_star_this_capture : Error<
@@ -1044,12 +1044,12 @@ def warn_cxx17_compat_lambda_template_parameter_list: Warning<
 def err_lambda_template_parameter_list_empty : Error<
   "lambda template parameter list cannot be empty">;
 
-// C++2b static lambdas
+// C++23 static lambdas
 def err_static_lambda: ExtWarn<
-  "static lambdas are a C++2b extension">, InGroup<CXX2b>;
+  "static lambdas are a C++23 extension">, InGroup<CXX23>;
 def warn_cxx20_compat_static_lambda : Warning<
-  "static lambdas are incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "static lambdas are incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 def err_static_mutable_lambda : Error<
   "lambda cannot be both mutable and static">;
 def err_static_lambda_captures : Error<

diff  --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 17585752edf8e..7a20f2acbdede 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2370,7 +2370,7 @@ def err_auto_expr_init_paren_braces : Error<
   "%select{parenthesized|nested}0 initializer list">;
 def warn_cxx20_compat_auto_expr : Warning<
   "'auto' as a functional-style cast is incompatible with C++ standards "
-  "before C++2b">, InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "before C++23">, InGroup<CXXPre23Compat>, DefaultIgnore;
 def err_auto_missing_trailing_return : Error<
   "'auto' return without trailing return type; deduced return types are a "
   "C++14 extension">;
@@ -2727,13 +2727,13 @@ def warn_cxx17_compat_constexpr_body_invalid_stmt : Warning<
   "use of this statement in a constexpr %select{function|constructor}0 "
   "is incompatible with C++ standards before C++20">,
   InGroup<CXXPre20Compat>, DefaultIgnore;
-def ext_constexpr_body_invalid_stmt_cxx2b : ExtWarn<
+def ext_constexpr_body_invalid_stmt_cxx23 : ExtWarn<
   "use of this statement in a constexpr %select{function|constructor}0 "
-  "is a C++2b extension">, InGroup<CXX2b>;
+  "is a C++23 extension">, InGroup<CXX23>;
 def warn_cxx20_compat_constexpr_body_invalid_stmt : Warning<
   "use of this statement in a constexpr %select{function|constructor}0 "
-  "is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 def ext_constexpr_type_definition : ExtWarn<
   "type definition in a constexpr %select{function|constructor}0 "
   "is a C++14 extension">, InGroup<CXX14>;
@@ -2754,15 +2754,15 @@ def warn_cxx11_compat_constexpr_local_var : Warning<
 def ext_constexpr_static_var : ExtWarn<
   "definition of a %select{static|thread_local}1 variable "
   "in a constexpr %select{function|constructor}0 "
-  "is a C++2b extension">, InGroup<CXX2b>;
+  "is a C++23 extension">, InGroup<CXX23>;
 def warn_cxx20_compat_constexpr_var : Warning<
   "definition of a %select{static variable|thread_local variable|variable "
   "of non-literal type}1 in a constexpr %select{function|constructor}0 "
-  "is incompatible with C++ standards before C++2b">,
-  InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "is incompatible with C++ standards before C++23">,
+  InGroup<CXXPre23Compat>, DefaultIgnore;
 def err_constexpr_local_var_non_literal_type : Error<
   "variable of non-literal type %1 cannot be defined in a constexpr "
-  "%select{function|constructor}0 before C++2b">;
+  "%select{function|constructor}0 before C++23">;
 def ext_constexpr_local_var_no_init : ExtWarn<
   "uninitialized variable in a constexpr %select{function|constructor}0 "
   "is a C++20 extension">, InGroup<CXX20>;
@@ -6744,7 +6744,7 @@ def err_arithmetic_nonfragile_interface : Error<
 
 def warn_deprecated_comma_subscript : Warning<
   "top-level comma expression in array subscript is deprecated "
-  "in C++20 and unsupported in C++2b">,
+  "in C++20 and unsupported in C++23">,
   InGroup<DeprecatedCommaSubscript>;
 
 def ext_subscript_non_lvalue : Extension<
@@ -9148,9 +9148,9 @@ def err_operator_overload_needs_class_or_enum : Error<
 def err_operator_overload_variadic : Error<"overloaded %0 cannot be variadic">;
 def warn_cxx20_compat_operator_overload_static : Warning<
   "declaring overloaded %0 as 'static' is incompatible with C++ standards "
-  "before C++2b">, InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "before C++23">, InGroup<CXXPre23Compat>, DefaultIgnore;
 def ext_operator_overload_static : ExtWarn<
-  "declaring overloaded %0 as 'static' is a C++2b extension">, InGroup<CXX2b>;
+  "declaring overloaded %0 as 'static' is a C++23 extension">, InGroup<CXX23>;
 def err_operator_overload_static : Error<
   "overloaded %0 cannot be a static member function">;
 def err_operator_overload_default_arg : Error<
@@ -9158,9 +9158,9 @@ def err_operator_overload_default_arg : Error<
 
 def ext_subscript_overload : Warning<
   "overloaded %0 with %select{no|a defaulted|more than one}1 parameter is a "
-  "C++2b extension">, InGroup<CXXPre2bCompat>, DefaultIgnore;
+  "C++23 extension">, InGroup<CXXPre23Compat>, DefaultIgnore;
 def error_subscript_overload : Error<
-  "overloaded %0 cannot have %select{no|a defaulted|more than one}1 parameter before C++2b">;
+  "overloaded %0 cannot have %select{no|a defaulted|more than one}1 parameter before C++23">;
 
 def err_operator_overload_must_be : Error<
   "overloaded %0 must be a %select{unary|binary|unary or binary}2 operator "

diff  --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
index 20bddca48cba1..495b17e769e5d 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -97,7 +97,7 @@ LANGOPT(CPlusPlus11       , 1, 0, "C++11")
 LANGOPT(CPlusPlus14       , 1, 0, "C++14")
 LANGOPT(CPlusPlus17       , 1, 0, "C++17")
 LANGOPT(CPlusPlus20       , 1, 0, "C++20")
-LANGOPT(CPlusPlus2b       , 1, 0, "C++2b")
+LANGOPT(CPlusPlus23       , 1, 0, "C++23")
 LANGOPT(ObjC              , 1, 0, "Objective-C")
 BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0,
                "Objective-C auto-synthesized properties")

diff  --git a/clang/include/clang/Basic/LangStandard.h b/clang/include/clang/Basic/LangStandard.h
index 4e78570ff733b..ebe14c8a3f8fd 100644
--- a/clang/include/clang/Basic/LangStandard.h
+++ b/clang/include/clang/Basic/LangStandard.h
@@ -55,7 +55,7 @@ enum LangFeatures {
   CPlusPlus14 = (1 << 7),
   CPlusPlus17 = (1 << 8),
   CPlusPlus20 = (1 << 9),
-  CPlusPlus2b = (1 << 10),
+  CPlusPlus23 = (1 << 10),
   Digraphs = (1 << 11),
   GNUMode = (1 << 12),
   HexFloat = (1 << 13),
@@ -118,8 +118,8 @@ struct LangStandard {
   /// isCPlusPlus20 - Language is a C++20 variant (or later).
   bool isCPlusPlus20() const { return Flags & CPlusPlus20; }
 
-  /// isCPlusPlus2b - Language is a post-C++20 variant (or later).
-  bool isCPlusPlus2b() const { return Flags & CPlusPlus2b; }
+  /// isCPlusPlus23 - Language is a post-C++23 variant (or later).
+  bool isCPlusPlus23() const { return Flags & CPlusPlus23; }
 
   /// hasDigraphs - Language supports digraphs.
   bool hasDigraphs() const { return Flags & Digraphs; }

diff  --git a/clang/include/clang/Basic/LangStandards.def b/clang/include/clang/Basic/LangStandards.def
index c5d4da1cb2f90..8e4d3759f33b7 100644
--- a/clang/include/clang/Basic/LangStandards.def
+++ b/clang/include/clang/Basic/LangStandards.def
@@ -151,15 +151,17 @@ LANGSTANDARD(gnucxx20, "gnu++20",
              CPlusPlus20 | Digraphs | HexFloat | GNUMode)
 LANGSTANDARD_ALIAS_DEPR(gnucxx20, "gnu++2a")
 
-LANGSTANDARD(cxx2b, "c++2b",
-             CXX, "Working draft for ISO C++ 2023 DIS",
+LANGSTANDARD(cxx23, "c++23",
+             CXX, "ISO C++ 2023 DIS",
              LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
-             CPlusPlus20 | CPlusPlus2b | Digraphs | HexFloat)
+             CPlusPlus20 | CPlusPlus23 | Digraphs | HexFloat)
+LANGSTANDARD_ALIAS_DEPR(cxx23, "c++2b")
 
-LANGSTANDARD(gnucxx2b, "gnu++2b",
-             CXX, "Working draft for ISO C++ 2023 DIS with GNU extensions",
+LANGSTANDARD(gnucxx23, "gnu++23",
+             CXX, "ISO C++ 2023 DIS with GNU extensions",
              LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | CPlusPlus17 |
-             CPlusPlus20 | CPlusPlus2b | Digraphs | HexFloat | GNUMode)
+             CPlusPlus20 | CPlusPlus23 | Digraphs | HexFloat | GNUMode)
+LANGSTANDARD_ALIAS_DEPR(gnucxx23, "gnu++2b")
 
 // OpenCL
 LANGSTANDARD(opencl10, "cl1.0",

diff  --git a/clang/include/clang/Lex/LiteralSupport.h b/clang/include/clang/Lex/LiteralSupport.h
index fd237c2c9cd87..313af292af372 100644
--- a/clang/include/clang/Lex/LiteralSupport.h
+++ b/clang/include/clang/Lex/LiteralSupport.h
@@ -63,7 +63,7 @@ class NumericLiteralParser {
   bool isUnsigned : 1;
   bool isLong : 1;          // This is *not* set for long long.
   bool isLongLong : 1;
-  bool isSizeT : 1;         // 1z, 1uz (C++2b)
+  bool isSizeT : 1;         // 1z, 1uz (C++23)
   bool isHalf : 1;          // 1.0h
   bool isFloat : 1;         // 1.0f
   bool isImaginary : 1;     // 1.0i

diff  --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 7e3cd9cdc60a9..92f3e6f0ff848 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -1370,7 +1370,7 @@ class Sema final {
       return Context == ExpressionEvaluationContext::ImmediateFunctionContext ||
              (Context == ExpressionEvaluationContext::DiscardedStatement &&
               InImmediateFunctionContext) ||
-             // C++2b [expr.const]p14:
+             // C++23 [expr.const]p14:
              // An expression or conversion is in an immediate function
              // context if it is potentially evaluated and either:
              //   * its innermost enclosing non-block scope is a function

diff  --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 49572b0f5869b..03eb5dfe6ff60 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -5043,7 +5043,7 @@ static EvalStmtResult EvaluateSwitch(StmtResult &Result, EvalInfo &Info,
 
 static bool CheckLocalVariableDeclaration(EvalInfo &Info, const VarDecl *VD) {
   // An expression E is a core constant expression unless the evaluation of E
-  // would evaluate one of the following: [C++2b] - a control flow that passes
+  // would evaluate one of the following: [C++23] - a control flow that passes
   // through a declaration of a variable with static or thread storage duration
   // unless that variable is usable in constant expressions.
   if (VD->isLocalVarDecl() && VD->isStaticLocal() &&

diff  --git a/clang/lib/Basic/LangOptions.cpp b/clang/lib/Basic/LangOptions.cpp
index f22fe9a82bda4..1abbaa9e4b2b4 100644
--- a/clang/lib/Basic/LangOptions.cpp
+++ b/clang/lib/Basic/LangOptions.cpp
@@ -117,7 +117,7 @@ void LangOptions::setLangDefaults(LangOptions &Opts, Language Lang,
   Opts.CPlusPlus14 = Std.isCPlusPlus14();
   Opts.CPlusPlus17 = Std.isCPlusPlus17();
   Opts.CPlusPlus20 = Std.isCPlusPlus20();
-  Opts.CPlusPlus2b = Std.isCPlusPlus2b();
+  Opts.CPlusPlus23 = Std.isCPlusPlus23();
   Opts.GNUMode = Std.isGNUMode();
   Opts.GNUCVersion = 0;
   Opts.HexFloats = Std.hasHexFloats();

diff  --git a/clang/lib/Basic/Targets/OSTargets.cpp b/clang/lib/Basic/Targets/OSTargets.cpp
index 763235fb10a52..627bc912fa231 100644
--- a/clang/lib/Basic/Targets/OSTargets.cpp
+++ b/clang/lib/Basic/Targets/OSTargets.cpp
@@ -214,7 +214,8 @@ static void addVisualCDefines(const LangOptions &Opts, MacroBuilder &Builder) {
       Builder.defineMacro("_HAS_CHAR16_T_LANGUAGE_SUPPORT", Twine(1));
 
     if (Opts.isCompatibleWithMSVC(LangOptions::MSVC2015)) {
-      if (Opts.CPlusPlus2b)
+      if (Opts.CPlusPlus23)
+        // TODO update to the proper value.
         Builder.defineMacro("_MSVC_LANG", "202004L");
       else if (Opts.CPlusPlus20)
         Builder.defineMacro("_MSVC_LANG", "202002L");

diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 509191762f8b4..a2deb9b0dd9ad 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1395,8 +1395,9 @@ Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
   const Arg *Std = Args.getLastArg(options::OPT_std_EQ);
   ModulesModeCXX20 =
       !Args.hasArg(options::OPT_fmodules) && Std &&
-      (Std->containsValue("c++20") || Std->containsValue("c++2b") ||
-       Std->containsValue("c++2a") || Std->containsValue("c++latest"));
+      (Std->containsValue("c++20") || Std->containsValue("c++2a") ||
+       Std->containsValue("c++23") || Std->containsValue("c++2b") ||
+       Std->containsValue("c++latest"));
 
   // Process -fmodule-header{=} flags.
   if (Arg *A = Args.getLastArg(options::OPT_fmodule_header_EQ,

diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 5b93b84dfcf15..32ba56066af58 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -3673,7 +3673,8 @@ static bool RenderModulesOptions(Compilation &C, const Driver &D,
   bool HaveStdCXXModules =
       IsCXX && Std &&
       (Std->containsValue("c++2a") || Std->containsValue("c++20") ||
-       Std->containsValue("c++2b") || Std->containsValue("c++latest"));
+       Std->containsValue("c++2b") || Std->containsValue("c++23") ||
+       Std->containsValue("c++latest"));
   bool HaveModules = HaveStdCXXModules;
 
   // -fmodules enables the use of precompiled modules (off by default).
@@ -6637,7 +6638,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
                              .Case("c++14", "-std=c++14")
                              .Case("c++17", "-std=c++17")
                              .Case("c++20", "-std=c++20")
-                             .Case("c++latest", "-std=c++2b")
+                             // TODO add c++23 when MSVC supports it.
+                             .Case("c++latest", "-std=c++23")
                              .Default("");
       if (LanguageStandard.empty())
         D.Diag(clang::diag::warn_drv_unused_argument)

diff  --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 0b39dd1c84f7d..0c4e73ed931c9 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -452,7 +452,7 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,
   } else {
     //   -- __cplusplus
     // FIXME: Use correct value for C++23.
-    if (LangOpts.CPlusPlus2b)
+    if (LangOpts.CPlusPlus23)
       Builder.defineMacro("__cplusplus", "202101L");
     //      [C++20] The integer literal 202002L.
     else if (LangOpts.CPlusPlus20)
@@ -606,7 +606,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
     Builder.defineMacro("__cpp_unicode_literals", "200710L");
     Builder.defineMacro("__cpp_user_defined_literals", "200809L");
     Builder.defineMacro("__cpp_lambdas", "200907L");
-    Builder.defineMacro("__cpp_constexpr", LangOpts.CPlusPlus2b   ? "202211L"
+    Builder.defineMacro("__cpp_constexpr", LangOpts.CPlusPlus23   ? "202211L"
                                            : LangOpts.CPlusPlus20 ? "201907L"
                                            : LangOpts.CPlusPlus17 ? "201603L"
                                            : LangOpts.CPlusPlus14 ? "201304L"
@@ -690,15 +690,15 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
     //Builder.defineMacro("__cpp_modules", "201907L");
     Builder.defineMacro("__cpp_using_enum", "201907L");
   }
-  // C++2b features.
-  if (LangOpts.CPlusPlus2b) {
+  // C++23 features.
+  if (LangOpts.CPlusPlus23) {
     Builder.defineMacro("__cpp_implicit_move", "202011L");
     Builder.defineMacro("__cpp_size_t_suffix", "202011L");
     Builder.defineMacro("__cpp_if_consteval", "202106L");
     Builder.defineMacro("__cpp_multidimensional_subscript", "202211L");
   }
 
-  // We provide those C++2b features as extensions in earlier language modes, so
+  // We provide those C++23 features as extensions in earlier language modes, so
   // we also define their feature test macros.
   if (LangOpts.CPlusPlus11)
     Builder.defineMacro("__cpp_static_call_operator", "202207L");

diff  --git a/clang/lib/Headers/stdatomic.h b/clang/lib/Headers/stdatomic.h
index 48b3ab98c640c..aed33d4333e84 100644
--- a/clang/lib/Headers/stdatomic.h
+++ b/clang/lib/Headers/stdatomic.h
@@ -49,7 +49,7 @@ extern "C" {
    in C2x mode; switch to the correct values once they've been published. */
 #if (defined(__STDC_VERSION__) && __STDC_VERSION__ < 202000L) ||               \
     defined(__cplusplus)
-/* ATOMIC_VAR_INIT was removed in C2x, but still remains in C++2b. */
+/* ATOMIC_VAR_INIT was removed in C2x, but still remains in C++23. */
 #define ATOMIC_VAR_INIT(value) (value)
 #endif
 

diff  --git a/clang/lib/Lex/Lexer.cpp b/clang/lib/Lex/Lexer.cpp
index 1b00f7cde1fb8..82f65ef3aaf8c 100644
--- a/clang/lib/Lex/Lexer.cpp
+++ b/clang/lib/Lex/Lexer.cpp
@@ -3348,8 +3348,8 @@ std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr,
   }
 
   if (Delimited && PP) {
-    Diag(SlashLoc, PP->getLangOpts().CPlusPlus2b
-                       ? diag::warn_cxx2b_delimited_escape_sequence
+    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23
+                       ? diag::warn_cxx23_delimited_escape_sequence
                        : diag::ext_delimited_escape_sequence)
         << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);
   }
@@ -3436,8 +3436,8 @@ std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr,
   }
 
   if (Diagnose && Match)
-    Diag(SlashLoc, PP->getLangOpts().CPlusPlus2b
-                       ? diag::warn_cxx2b_delimited_escape_sequence
+    Diag(SlashLoc, PP->getLangOpts().CPlusPlus23
+                       ? diag::warn_cxx23_delimited_escape_sequence
                        : diag::ext_delimited_escape_sequence)
         << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);
 

diff  --git a/clang/lib/Lex/LiteralSupport.cpp b/clang/lib/Lex/LiteralSupport.cpp
index 9cc0215fb6250..c066e1daa618d 100644
--- a/clang/lib/Lex/LiteralSupport.cpp
+++ b/clang/lib/Lex/LiteralSupport.cpp
@@ -312,7 +312,7 @@ static unsigned ProcessCharEscape(const char *ThisTokBegin,
           << tok::r_brace;
     else if (!HadError) {
       Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf,
-           Features.CPlusPlus2b ? diag::warn_cxx2b_delimited_escape_sequence
+           Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence
                                 : diag::ext_delimited_escape_sequence)
           << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);
     }
@@ -641,7 +641,7 @@ static bool ProcessUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf,
 
   if ((IsDelimitedEscapeSequence || IsNamedEscapeSequence) && Diags)
     Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf,
-         Features.CPlusPlus2b ? diag::warn_cxx2b_delimited_escape_sequence
+         Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence
                               : diag::ext_delimited_escape_sequence)
         << (IsNamedEscapeSequence ? 1 : 0) << (Features.CPlusPlus ? 1 : 0);
 

diff  --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index 7e4ba9851446a..62e51e133b3af 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -434,7 +434,7 @@ void Preprocessor::SuggestTypoedDirective(const Token &Tok,
   std::vector<StringRef> Candidates = {
       "if", "ifdef", "ifndef", "elif", "else", "endif"
   };
-  if (LangOpts.C2x || LangOpts.CPlusPlus2b)
+  if (LangOpts.C2x || LangOpts.CPlusPlus23)
     Candidates.insert(Candidates.end(), {"elifdef", "elifndef"});
 
   if (std::optional<StringRef> Sugg = findSimilarStr(Directive, Candidates)) {
@@ -745,12 +745,12 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc,
         if (!CondInfo.WasSkipping)
           SkippingRangeState.endLexPass(Hashptr);
 
-        // Warn if using `#elifdef` & `#elifndef` in not C2x & C++2b mode even
+        // Warn if using `#elifdef` & `#elifndef` in not C2x & C++23 mode even
         // if this branch is in a skipping block.
         unsigned DiagID;
         if (LangOpts.CPlusPlus)
-          DiagID = LangOpts.CPlusPlus2b ? diag::warn_cxx2b_compat_pp_directive
-                                        : diag::ext_cxx2b_pp_directive;
+          DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive
+                                        : diag::ext_cxx23_pp_directive;
         else
           DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive
                                 : diag::ext_c2x_pp_directive;
@@ -1256,10 +1256,10 @@ void Preprocessor::HandleDirective(Token &Result) {
 
     case tok::pp_warning:
       if (LangOpts.CPlusPlus)
-        Diag(Result, LangOpts.CPlusPlus2b
-                         ? diag::warn_cxx2b_compat_warning_directive
+        Diag(Result, LangOpts.CPlusPlus23
+                         ? diag::warn_cxx23_compat_warning_directive
                          : diag::ext_pp_warning_directive)
-            << /*C++2b*/ 1;
+            << /*C++23*/ 1;
       else
         Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive
                                   : diag::ext_pp_warning_directive)
@@ -3423,14 +3423,14 @@ void Preprocessor::HandleElifFamilyDirective(Token &ElifToken,
                                                  : PED_Elifndef;
   ++NumElse;
 
-  // Warn if using `#elifdef` & `#elifndef` in not C2x & C++2b mode.
+  // Warn if using `#elifdef` & `#elifndef` in not C2x & C++23 mode.
   switch (DirKind) {
   case PED_Elifdef:
   case PED_Elifndef:
     unsigned DiagID;
     if (LangOpts.CPlusPlus)
-      DiagID = LangOpts.CPlusPlus2b ? diag::warn_cxx2b_compat_pp_directive
-                                    : diag::ext_cxx2b_pp_directive;
+      DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive
+                                    : diag::ext_cxx23_pp_directive;
     else
       DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive
                             : diag::ext_c2x_pp_directive;

diff  --git a/clang/lib/Lex/PPExpressions.cpp b/clang/lib/Lex/PPExpressions.cpp
index aa411cfc5f2c0..6c935148f4072 100644
--- a/clang/lib/Lex/PPExpressions.cpp
+++ b/clang/lib/Lex/PPExpressions.cpp
@@ -323,13 +323,13 @@ static bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT,
         PP.Diag(PeekTok, diag::ext_c99_longlong);
     }
 
-    // 'z/uz' literals are a C++2b feature.
+    // 'z/uz' literals are a C++23 feature.
     if (Literal.isSizeT)
       PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus
-                           ? PP.getLangOpts().CPlusPlus2b
+                           ? PP.getLangOpts().CPlusPlus23
                                  ? diag::warn_cxx20_compat_size_t_suffix
-                                 : diag::ext_cxx2b_size_t_suffix
-                           : diag::err_cxx2b_size_t_suffix);
+                                 : diag::ext_cxx23_size_t_suffix
+                           : diag::err_cxx23_size_t_suffix);
 
     // 'wb/uwb' literals are a C2x feature. We explicitly do not support the
     // suffix in C++ as an extension because a library-based UDL that resolves

diff  --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 4aecd489fd287..717c014520892 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -1076,7 +1076,7 @@ SourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {
     // Check for C++1y 'decltype(auto)'.
     if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {
       // the typename-specifier in a function-style cast expression may
-      // be 'auto' since C++2b.
+      // be 'auto' since C++23.
       Diag(Tok.getLocation(),
            getLangOpts().CPlusPlus14
                ? diag::warn_cxx11_compat_decltype_auto_type_specifier

diff  --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp
index 14f48c7bce99e..b99baf476592f 100644
--- a/clang/lib/Parse/ParseExpr.cpp
+++ b/clang/lib/Parse/ParseExpr.cpp
@@ -1871,7 +1871,7 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
 ///         primary-expression
 ///         postfix-expression '[' expression ']'
 ///         postfix-expression '[' braced-init-list ']'
-///         postfix-expression '[' expression-list [opt] ']'  [C++2b 12.4.5]
+///         postfix-expression '[' expression-list [opt] ']'  [C++23 12.4.5]
 ///         postfix-expression '(' argument-expression-list[opt] ')'
 ///         postfix-expression '.' identifier
 ///         postfix-expression '->' identifier
@@ -1946,10 +1946,10 @@ Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {
 
       // We try to parse a list of indexes in all language mode first
       // and, in we find 0 or one index, we try to parse an OpenMP array
-      // section. This allow us to support C++2b multi dimensional subscript and
+      // section. This allow us to support C++23 multi dimensional subscript and
       // OpenMp sections in the same language mode.
       if (!getLangOpts().OpenMP || Tok.isNot(tok::colon)) {
-        if (!getLangOpts().CPlusPlus2b) {
+        if (!getLangOpts().CPlusPlus23) {
           ExprResult Idx;
           if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {
             Diag(Tok, diag::warn_cxx98_compat_generalized_initializer_lists);

diff  --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp
index 54f5408829329..8f56316cefcdf 100644
--- a/clang/lib/Parse/ParseExprCXX.cpp
+++ b/clang/lib/Parse/ParseExprCXX.cpp
@@ -725,7 +725,7 @@ ExprResult Parser::ParseCXXIdExpression(bool isAddressOfOperand) {
 ///         '&' identifier initializer
 ///
 ///       lambda-declarator:
-///         lambda-specifiers     [C++2b]
+///         lambda-specifiers     [C++23]
 ///         '(' parameter-declaration-clause ')' lambda-specifiers
 ///             requires-clause[opt]
 ///
@@ -1205,7 +1205,7 @@ static void tryConsumeLambdaSpecifierToken(Parser &P,
 static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc,
                                            DeclSpec &DS) {
   if (StaticLoc.isValid()) {
-    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus2b
+    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23
                           ? diag::err_static_lambda
                           : diag::warn_cxx20_compat_static_lambda);
     const char *PrevSpec = nullptr;
@@ -1362,7 +1362,7 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
   // or operator template declaration. We accept this as a conforming extension
   // in all language modes that support lambdas.
   if (isCXX11AttributeSpecifier()) {
-    Diag(Tok, getLangOpts().CPlusPlus2b
+    Diag(Tok, getLangOpts().CPlusPlus23
                   ? diag::warn_cxx20_compat_decl_attrs_on_lambda
                   : diag::ext_decl_attrs_on_lambda);
     MaybeParseCXX11Attributes(D);
@@ -1501,7 +1501,7 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer(
                   tok::kw_requires, tok::kw_noexcept) ||
       (Tok.is(tok::l_square) && NextToken().is(tok::l_square));
 
-  if (HasSpecifiers && !HasParentheses && !getLangOpts().CPlusPlus2b) {
+  if (HasSpecifiers && !HasParentheses && !getLangOpts().CPlusPlus23) {
     // It's common to forget that one needs '()' before 'mutable', an
     // attribute specifier, the result type, or the requires clause. Deal with
     // this.
@@ -1996,7 +1996,7 @@ Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context,
   if (!DG)
     return DG;
 
-  Diag(DeclStart, !getLangOpts().CPlusPlus2b
+  Diag(DeclStart, !getLangOpts().CPlusPlus23
                       ? diag::ext_alias_in_init_statement
                       : diag::warn_cxx20_alias_in_init_statement)
       << SourceRange(DeclStart, DeclEnd);

diff  --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index 5a68e74629124..b423c5c47051f 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -1053,7 +1053,7 @@ void Parser::ParseCompoundStatementLeadingPragmas() {
 
 void Parser::DiagnoseLabelAtEndOfCompoundStatement() {
   if (getLangOpts().CPlusPlus) {
-    Diag(Tok, getLangOpts().CPlusPlus2b
+    Diag(Tok, getLangOpts().CPlusPlus23
                   ? diag::warn_cxx20_compat_label_end_of_compound_statement
                   : diag::ext_cxx_label_end_of_compound_statement);
   } else {
@@ -1457,7 +1457,7 @@ StmtResult Parser::ParseIfStatement(SourceLocation *TrailingElseLoc) {
     }
 
     if (Tok.is(tok::kw_consteval)) {
-      Diag(Tok, getLangOpts().CPlusPlus2b ? diag::warn_cxx20_compat_consteval_if
+      Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if
                                           : diag::ext_consteval_if);
       IsConsteval = true;
       ConstevalLoc = ConsumeToken();
@@ -1929,7 +1929,7 @@ bool Parser::isForRangeIdentifier() {
 /// [C++] for-init-statement:
 /// [C++]   expression-statement
 /// [C++]   simple-declaration
-/// [C++2b] alias-declaration
+/// [C++23] alias-declaration
 ///
 /// [C++0x] for-range-declaration:
 /// [C++0x]   attribute-specifier-seq[opt] type-specifier-seq declarator

diff  --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp
index 2df9b193f73ed..07ece4078474e 100644
--- a/clang/lib/Sema/Sema.cpp
+++ b/clang/lib/Sema/Sema.cpp
@@ -2169,7 +2169,7 @@ static void checkEscapingByref(VarDecl *VD, Sema &S) {
       new (S.Context) DeclRefExpr(S.Context, VD, false, T, VK_LValue, Loc);
   ExprResult Result;
   auto IE = InitializedEntity::InitializeBlock(Loc, T);
-  if (S.getLangOpts().CPlusPlus2b) {
+  if (S.getLangOpts().CPlusPlus23) {
     auto *E = ImplicitCastExpr::Create(S.Context, T, CK_NoOp, VarRef, nullptr,
                                        VK_XValue, FPOptionsOverride());
     Result = S.PerformCopyInitialization(IE, SourceLocation(), E);

diff  --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index eb31081809d3a..a746d8c50a0cc 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -762,7 +762,7 @@ Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D,
   // C++20 [dcl.dcl]/8:
   //   If decl-specifier-seq contains any decl-specifier other than static,
   //   thread_local, auto, or cv-qualifiers, the program is ill-formed.
-  // C++2b [dcl.pre]/6:
+  // C++23 [dcl.pre]/6:
   //   Each decl-specifier in the decl-specifier-seq shall be static,
   //   thread_local, auto (9.2.9.6 [dcl.spec.auto]), or a cv-qualifier.
   auto &DS = D.getDeclSpec();
@@ -1928,16 +1928,16 @@ static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl,
         if (VD->isStaticLocal()) {
           if (Kind == Sema::CheckConstexprKind::Diagnose) {
             SemaRef.Diag(VD->getLocation(),
-                         SemaRef.getLangOpts().CPlusPlus2b
+                         SemaRef.getLangOpts().CPlusPlus23
                              ? diag::warn_cxx20_compat_constexpr_var
                              : diag::ext_constexpr_static_var)
                 << isa<CXXConstructorDecl>(Dcl)
                 << (VD->getTLSKind() == VarDecl::TLS_Dynamic);
-          } else if (!SemaRef.getLangOpts().CPlusPlus2b) {
+          } else if (!SemaRef.getLangOpts().CPlusPlus23) {
             return false;
           }
         }
-        if (SemaRef.LangOpts.CPlusPlus2b) {
+        if (SemaRef.LangOpts.CPlusPlus23) {
           CheckLiteralType(SemaRef, Kind, VD->getLocation(), VD->getType(),
                            diag::warn_cxx20_compat_constexpr_var,
                            isa<CXXConstructorDecl>(Dcl),
@@ -2276,15 +2276,15 @@ static bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl,
   if (Kind == Sema::CheckConstexprKind::CheckValid) {
     // If this is only valid as an extension, report that we don't satisfy the
     // constraints of the current language.
-    if ((Cxx2bLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus2b) ||
+    if ((Cxx2bLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus23) ||
         (Cxx2aLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus20) ||
         (Cxx1yLoc.isValid() && !SemaRef.getLangOpts().CPlusPlus17))
       return false;
   } else if (Cxx2bLoc.isValid()) {
     SemaRef.Diag(Cxx2bLoc,
-                 SemaRef.getLangOpts().CPlusPlus2b
+                 SemaRef.getLangOpts().CPlusPlus23
                      ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt
-                     : diag::ext_constexpr_body_invalid_stmt_cxx2b)
+                     : diag::ext_constexpr_body_invalid_stmt_cxx23)
         << isa<CXXConstructorDecl>(Dcl);
   } else if (Cxx2aLoc.isValid()) {
     SemaRef.Diag(Cxx2aLoc,
@@ -15976,7 +15976,7 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
     if (MethodDecl->isStatic()) {
       if (Op == OO_Call || Op == OO_Subscript)
         Diag(FnDecl->getLocation(),
-             (LangOpts.CPlusPlus2b
+             (LangOpts.CPlusPlus23
                   ? diag::warn_cxx20_compat_operator_overload_static
                   : diag::ext_operator_overload_static))
             << FnDecl;
@@ -16017,7 +16017,7 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
     }
     if (FirstDefaultedParam) {
       if (Op == OO_Subscript) {
-        Diag(FnDecl->getLocation(), LangOpts.CPlusPlus2b
+        Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23
                                         ? diag::ext_subscript_overload
                                         : diag::error_subscript_overload)
             << FnDecl->getDeclName() << 1
@@ -16068,7 +16068,7 @@ bool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {
   }
 
   if (Op == OO_Subscript && NumParams != 2) {
-    Diag(FnDecl->getLocation(), LangOpts.CPlusPlus2b
+    Diag(FnDecl->getLocation(), LangOpts.CPlusPlus23
                                     ? diag::ext_subscript_overload
                                     : diag::error_subscript_overload)
         << FnDecl->getDeclName() << (NumParams == 1 ? 0 : 2);

diff  --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index ce5f5fa6e1491..622b36407495b 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -3957,13 +3957,13 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {
   } else {
     QualType Ty;
 
-    // 'z/uz' literals are a C++2b feature.
+    // 'z/uz' literals are a C++23 feature.
     if (Literal.isSizeT)
       Diag(Tok.getLocation(), getLangOpts().CPlusPlus
-                                  ? getLangOpts().CPlusPlus2b
+                                  ? getLangOpts().CPlusPlus23
                                         ? diag::warn_cxx20_compat_size_t_suffix
-                                        : diag::ext_cxx2b_size_t_suffix
-                                  : diag::err_cxx2b_size_t_suffix);
+                                        : diag::ext_cxx23_size_t_suffix
+                                  : diag::err_cxx23_size_t_suffix);
 
     // 'wb/uwb' literals are a C2x feature. We support _BitInt as a type in C++,
     // but we do not currently support the suffix in C++ mode because it's not
@@ -4043,7 +4043,7 @@ ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {
         Ty = Context.getBitIntType(Literal.isUnsigned, Width);
       }
 
-      // Check C++2b size_t literals.
+      // Check C++23 size_t literals.
       if (Literal.isSizeT) {
         assert(!Literal.MicrosoftInteger &&
                "size_t literals can't be Microsoft literals");

diff  --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index c440a4d7ffad7..2bf5e6a473e30 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -1467,10 +1467,10 @@ Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
           : InitializationKind::CreateValue(TyBeginLoc, LParenOrBraceLoc,
                                             RParenOrBraceLoc);
 
-  // C++1z [expr.type.conv]p1:
+  // C++17 [expr.type.conv]p1:
   //   If the type is a placeholder for a deduced class type, [...perform class
   //   template argument deduction...]
-  // C++2b:
+  // C++23:
   //   Otherwise, if the type contains a placeholder type, it is replaced by the
   //   type determined by placeholder type deduction.
   DeducedType *Deduced = Ty->getContainedDeducedType();
@@ -1497,7 +1497,7 @@ Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
                             diag::err_auto_expr_init_multiple_expressions)
                        << Ty << FullRange);
     }
-    if (getLangOpts().CPlusPlus2b) {
+    if (getLangOpts().CPlusPlus23) {
       if (Ty->getAs<AutoType>())
         Diag(TyBeginLoc, diag::warn_cxx20_compat_auto_expr) << FullRange;
     }
@@ -4022,7 +4022,7 @@ ExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr, bool IsConstexpr) {
   // The value of a condition that is an expression is the value of the
   // expression, implicitly converted to bool.
   //
-  // C++2b 8.5.2p2
+  // C++23 8.5.2p2
   // If the if statement is of the form if constexpr, the value of the condition
   // is contextually converted to bool and the converted expression shall be
   // a constant expression.

diff  --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp
index 84a1fd854d804..53e453b117e17 100644
--- a/clang/lib/Sema/SemaModule.cpp
+++ b/clang/lib/Sema/SemaModule.cpp
@@ -255,7 +255,7 @@ Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc,
     }
   }
 
-  // C++2b [module.unit]p1: ... The identifiers module and import shall not
+  // C++23 [module.unit]p1: ... The identifiers module and import shall not
   // appear as identifiers in a module-name or module-partition. All
   // module-names either beginning with an identifier consisting of std
   // followed by zero or more digits or containing a reserved identifier

diff  --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 2f26c8f3fd401..135bf8053a964 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -9929,7 +9929,7 @@ bool clang::isBetterOverloadCandidate(
     }
   }
 
-  // C++ [over.match.best]p1: (Changed in C++2b)
+  // C++ [over.match.best]p1: (Changed in C++23)
   //
   //   -- if F is a static member function, ICS1(F) is defined such
   //      that ICS1(F) is neither better nor worse than ICS1(G) for
@@ -15099,7 +15099,7 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
   bool IsError = false;
 
   // Initialize the implicit object parameter if needed.
-  // Since C++2b, this could also be a call to a static call operator
+  // Since C++23, this could also be a call to a static call operator
   // which we emit as a regular CallExpr.
   if (Method->isInstance()) {
     ExprResult ObjRes = PerformObjectArgumentInitialization(

diff  --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 1af5f733edbfc..7daebbd914024 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -3364,7 +3364,7 @@ Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {
 /// might be modified by the implementation.
 ///
 /// \param Mode Overrides detection of current language mode
-/// and uses the rules for C++2b.
+/// and uses the rules for C++23.
 ///
 /// \returns An aggregate which contains the Candidate and isMoveEligible
 /// and isCopyElidable methods. If Candidate is non-null, it means
@@ -3385,7 +3385,7 @@ Sema::NamedReturnInfo Sema::getNamedReturnInfo(Expr *&E,
   if (Res.Candidate && !E->isXValue() &&
       (Mode == SimplerImplicitMoveMode::ForceOn ||
        (Mode != SimplerImplicitMoveMode::ForceOff &&
-        getLangOpts().CPlusPlus2b))) {
+        getLangOpts().CPlusPlus23))) {
     E = ImplicitCastExpr::Create(Context, VD->getType().getNonReferenceType(),
                                  CK_NoOp, E, nullptr, VK_XValue,
                                  FPOptionsOverride());
@@ -3529,7 +3529,7 @@ ExprResult Sema::PerformMoveOrCopyInitialization(
     const InitializedEntity &Entity, const NamedReturnInfo &NRInfo, Expr *Value,
     bool SupressSimplerImplicitMoves) {
   if (getLangOpts().CPlusPlus &&
-      (!getLangOpts().CPlusPlus2b || SupressSimplerImplicitMoves) &&
+      (!getLangOpts().CPlusPlus23 || SupressSimplerImplicitMoves) &&
       NRInfo.isMoveEligible()) {
     ImplicitCastExpr AsRvalue(ImplicitCastExpr::OnStack, Value->getType(),
                               CK_NoOp, Value, VK_XValue, FPOptionsOverride());
@@ -3902,7 +3902,7 @@ Sema::ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp,
 
 static bool CheckSimplerImplicitMovesMSVCWorkaround(const Sema &S,
                                                     const Expr *E) {
-  if (!E || !S.getLangOpts().CPlusPlus2b || !S.getLangOpts().MSVCCompat)
+  if (!E || !S.getLangOpts().CPlusPlus23 || !S.getLangOpts().MSVCCompat)
     return false;
   const Decl *D = E->getReferencedDeclOfCallee();
   if (!D || !S.SourceMgr.isInSystemHeader(D->getLocation()))

diff  --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 19a41b022ecda..da105e3d6ad28 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -3645,7 +3645,7 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state,
     case DeclaratorContext::FunctionalCast:
       if (isa<DeducedTemplateSpecializationType>(Deduced))
         break;
-      if (SemaRef.getLangOpts().CPlusPlus2b && IsCXXAutoType &&
+      if (SemaRef.getLangOpts().CPlusPlus23 && IsCXXAutoType &&
           !Auto->isDecltypeAuto())
         break; // auto(x)
       [[fallthrough]];

diff  --git a/clang/test/AST/Interp/if.cpp b/clang/test/AST/Interp/if.cpp
index 5d35868cd00ec..2449ace4dd6c6 100644
--- a/clang/test/AST/Interp/if.cpp
+++ b/clang/test/AST/Interp/if.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -fexperimental-new-constant-interpreter %s -verify
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only %s -verify=ref
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -fexperimental-new-constant-interpreter %s -verify
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only %s -verify=ref
 
 // expected-no-diagnostics
 // ref-no-diagnostics

diff  --git a/clang/test/AST/ast-dump-if-json.cpp b/clang/test/AST/ast-dump-if-json.cpp
index 9ec68ed6c66f6..fe8fc88cdb751 100644
--- a/clang/test/AST/ast-dump-if-json.cpp
+++ b/clang/test/AST/ast-dump-if-json.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++2b -ast-dump=json %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-pc-linux -std=c++23 -ast-dump=json %s | FileCheck %s
 
 void func(int val) {
   if (val)

diff  --git a/clang/test/AST/ast-dump-stmt.cpp b/clang/test/AST/ast-dump-stmt.cpp
index 6a1b0d366eda6..4be66756e6c1e 100644
--- a/clang/test/AST/ast-dump-stmt.cpp
+++ b/clang/test/AST/ast-dump-stmt.cpp
@@ -1,10 +1,10 @@
 // Test without serialization:
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-linux-gnu -fcxx-exceptions -ast-dump %s \
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-linux-gnu -fcxx-exceptions -ast-dump %s \
 // RUN: | FileCheck -strict-whitespace %s
 //
 // Test with serialization:
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-linux-gnu -fcxx-exceptions -emit-pch -o %t %s
-// RUN: %clang_cc1 -x c++ -std=c++2b -triple x86_64-linux-gnu -fcxx-exceptions -include-pch %t -ast-dump-all /dev/null \
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-linux-gnu -fcxx-exceptions -emit-pch -o %t %s
+// RUN: %clang_cc1 -x c++ -std=c++23 -triple x86_64-linux-gnu -fcxx-exceptions -include-pch %t -ast-dump-all /dev/null \
 // RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
 // RUN: | FileCheck -strict-whitespace %s
 

diff  --git a/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp b/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
index e1a25c71c6ed1..24aef8a1a91c3 100644
--- a/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
+++ b/clang/test/CXX/class/class.init/class.copy.elision/p3.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx11_2b,cxx2b    %s
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx98_20,cxx11_2b,cxx11_20 %s
-// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx98_20,cxx11_2b,cxx11_20 %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx11_23,cxx23    %s
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx98_20,cxx11_23,cxx11_20 %s
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions                       -verify=expected,cxx98_20,cxx11_23,cxx11_20 %s
 // RUN: %clang_cc1 -std=c++98 -fsyntax-only -fcxx-exceptions -Wno-c++11-extensions -verify=expected,cxx98_20,cxx98 %s
 
 namespace test_delete_function {
@@ -98,7 +98,7 @@ struct A1 {
   A1(const A1 &);
   A1(A1 &&) = delete;
   // expected-note at -1 2{{'A1' has been explicitly marked deleted here}}
-  // cxx11_2b-note at -2 3{{'A1' has been explicitly marked deleted here}}
+  // cxx11_23-note at -2 3{{'A1' has been explicitly marked deleted here}}
 };
 void test1() {
   try {
@@ -208,7 +208,7 @@ struct NeedRvalueRef {
 struct NeedValue {
   NeedValue(A1); // cxx98-note 2 {{passing argument to parameter here}}
   NeedValue(A2);
-  NeedValue(B1); // cxx11_2b-note 2 {{passing argument to parameter here}}
+  NeedValue(B1); // cxx11_23-note 2 {{passing argument to parameter here}}
   NeedValue(B2);
 };
 
@@ -267,14 +267,14 @@ NeedValue test_2_3() {
 struct B1 {
   B1();
   B1(const B1 &);
-  B1(B1 &&) = delete; // cxx11_2b-note 3 {{'B1' has been explicitly marked deleted here}}
+  B1(B1 &&) = delete; // cxx11_23-note 3 {{'B1' has been explicitly marked deleted here}}
                       // cxx98-note at -1 {{'B1' has been explicitly marked deleted here}}
 };
 NeedValue test_3_1() {
   // not rvalue reference
   // same type
   B1 b;
-  return b; // cxx11_2b-error {{call to deleted constructor of 'B1'}}
+  return b; // cxx11_23-error {{call to deleted constructor of 'B1'}}
 }
 class DerivedB1 : public B1 {};
 B1 test_3_2() {
@@ -287,7 +287,7 @@ NeedValue test_3_3() {
   // not rvalue reference
   // not same type
   DerivedB1 b;
-  return b; // cxx11_2b-error {{call to deleted constructor of 'B1'}}
+  return b; // cxx11_23-error {{call to deleted constructor of 'B1'}}
 }
 
 struct B2 {
@@ -295,14 +295,14 @@ struct B2 {
   B2(const B2 &);
 
 private:
-  B2(B2 &&); // cxx11_2b-note 3 {{declared private here}}
+  B2(B2 &&); // cxx11_23-note 3 {{declared private here}}
              // cxx98-note at -1 {{declared private here}}
 };
 NeedValue test_4_1() {
   // not rvalue reference
   // same type
   B2 b;
-  return b; // cxx11_2b-error {{calling a private constructor of class 'test_ctor_param_rvalue_ref::B2'}}
+  return b; // cxx11_23-error {{calling a private constructor of class 'test_ctor_param_rvalue_ref::B2'}}
 }
 class DerivedB2 : public B2 {};
 B2 test_4_2() {
@@ -315,7 +315,7 @@ NeedValue test_4_3() {
   // not rvalue reference
   // not same type
   DerivedB2 b;
-  return b; // cxx11_2b-error {{calling a private constructor of class 'test_ctor_param_rvalue_ref::B2'}}
+  return b; // cxx11_23-error {{calling a private constructor of class 'test_ctor_param_rvalue_ref::B2'}}
 }
 } // namespace test_ctor_param_rvalue_ref
 
@@ -323,7 +323,7 @@ namespace test_lvalue_ref_is_not_moved_from {
 
 struct Target {};
 // expected-note at -1  {{candidate constructor (the implicit copy constructor) not viable}}
-// cxx11_2b-note at -2  {{candidate constructor (the implicit move constructor) not viable}}
+// cxx11_23-note at -2  {{candidate constructor (the implicit move constructor) not viable}}
 
 struct CopyOnly {
   CopyOnly(CopyOnly &&) = delete; // expected-note {{has been explicitly marked deleted here}}
@@ -333,7 +333,7 @@ struct CopyOnly {
 };
 
 struct MoveOnly {
-  MoveOnly(MoveOnly &&); // cxx11_2b-note {{copy constructor is implicitly deleted because}}
+  MoveOnly(MoveOnly &&); // cxx11_23-note {{copy constructor is implicitly deleted because}}
   operator Target() &&;  // expected-note {{candidate function not viable}}
 };
 
@@ -352,7 +352,7 @@ CopyOnly t2() {
 
 MoveOnly t3() {
     MoveOnly& r = moveonly;
-    return r; // cxx11_2b-error {{call to implicitly-deleted copy constructor}}
+    return r; // cxx11_23-error {{call to implicitly-deleted copy constructor}}
 }
 
 MoveOnly t4() {
@@ -437,11 +437,11 @@ ConstCopyOnly t1() {
 struct NonConstCopyOnly {
   NonConstCopyOnly();
   NonConstCopyOnly(NonConstCopyOnly &);
-  NonConstCopyOnly(const NonConstCopyOnly &) = delete; // cxx11_2b-note {{marked deleted here}}
+  NonConstCopyOnly(const NonConstCopyOnly &) = delete; // cxx11_23-note {{marked deleted here}}
 };
 NonConstCopyOnly t2() {
   NonConstCopyOnly x;
-  return x; // cxx11_2b-error {{call to deleted constructor}}
+  return x; // cxx11_23-error {{call to deleted constructor}}
 }
 
 } // namespace test_constandnonconstcopy
@@ -469,10 +469,10 @@ C test2(D x) { return x; } // expected-error {{invokes a deleted function}}
 namespace test_simpler_implicit_move {
 
 struct CopyOnly {
-  CopyOnly(); // cxx2b-note {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
-  // cxx2b-note at -1 {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
-  CopyOnly(CopyOnly &); // cxx2b-note {{candidate constructor not viable: expects an lvalue for 1st argument}}
-  // cxx2b-note at -1 {{candidate constructor not viable: expects an lvalue for 1st argument}}
+  CopyOnly(); // cxx23-note {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+  // cxx23-note at -1 {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}
+  CopyOnly(CopyOnly &); // cxx23-note {{candidate constructor not viable: expects an lvalue for 1st argument}}
+  // cxx23-note at -1 {{candidate constructor not viable: expects an lvalue for 1st argument}}
 };
 struct MoveOnly {
   MoveOnly();
@@ -490,7 +490,7 @@ CopyOnly test2(bool b) {
   if (b) {
     return w1;
   } else {
-    return w2; // cxx2b-error {{no matching constructor for initialization}}
+    return w2; // cxx23-error {{no matching constructor for initialization}}
   }
 }
 
@@ -505,7 +505,7 @@ MoveOnly &&test4() {
 
 void test5() try {
   CopyOnly x;
-  throw x; // cxx2b-error {{no matching constructor for initialization}}
+  throw x; // cxx23-error {{no matching constructor for initialization}}
 } catch (...) {
 }
 

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
index 88334031ec456..7ad2e582a8126 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -std=c++2a -verify=expected,cxx2a %s
-// RUN: %clang_cc1 -std=c++2b -verify=expected %s
+// RUN: %clang_cc1 -std=c++23 -verify=expected %s
 
 // p3: if the function is a constructor or destructor, its class shall not have
 // any virtual base classes;
@@ -14,13 +14,13 @@ namespace contents {
   struct A {
     constexpr ~A() {
       return;
-      goto x; // cxx2a-warning {{use of this statement in a constexpr function is a C++2b extension}}
+      goto x; // cxx2a-warning {{use of this statement in a constexpr function is a C++23 extension}}
       x: ;
     }
   };
   struct B {
     constexpr ~B() {
-    x:; // cxx2a-warning {{use of this statement in a constexpr function is a C++2b extension}}
+    x:; // cxx2a-warning {{use of this statement in a constexpr function is a C++23 extension}}
     }
   };
   struct Nonlit { // cxx2a-note {{'Nonlit' is not literal because}}
@@ -29,19 +29,19 @@ namespace contents {
   struct C {
     constexpr ~C() {
       return;
-      Nonlit nl; // cxx2a-error {{variable of non-literal type 'Nonlit' cannot be defined in a constexpr function before C++2b}}
+      Nonlit nl; // cxx2a-error {{variable of non-literal type 'Nonlit' cannot be defined in a constexpr function before C++23}}
     }
   };
   struct D {
     constexpr ~D() {
       return;
-      static int a; // cxx2a-warning {{definition of a static variable in a constexpr function is a C++2b extension}}
+      static int a; // cxx2a-warning {{definition of a static variable in a constexpr function is a C++23 extension}}
     }
   };
   struct E {
     constexpr ~E() {
       return;
-      thread_local int e; // cxx2a-warning {{definition of a thread_local variable in a constexpr function is a C++2b extension}}
+      thread_local int e; // cxx2a-warning {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
     }
   };
   struct F {

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
index 3ba5cbba79ce2..c07502c0555b5 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
@@ -1,28 +1,28 @@
-// RUN: %clang_cc1 -verify -std=c++2b -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -verify -std=c++23 -Wpre-c++23-compat %s
 
 constexpr int h(int n) {
   if (!n)
     return 0;
-  static const int m = n; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  static const int m = n; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int i(int n) {
   if (!n)
     return 0;
-  thread_local const int m = n; // expected-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  thread_local const int m = n; // expected-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int g() { // expected-error {{constexpr function never produces a constant expression}}
   goto test;        // expected-note {{subexpression not valid in a constant expression}} \
-           // expected-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++2b}}
+           // expected-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++23}}
 test:
   return 0;
 }
 
 constexpr void h() {
-label:; // expected-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++2b}}
+label:; // expected-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++23}}
 }
 
 struct NonLiteral { // expected-note 2 {{'NonLiteral' is not literal}}
@@ -31,18 +31,18 @@ struct NonLiteral { // expected-note 2 {{'NonLiteral' is not literal}}
 
 constexpr void non_literal() { // expected-error {{constexpr function never produces a constant expression}}
   NonLiteral n;                // expected-note {{non-literal type 'NonLiteral' cannot be used in a constant expression}} \
-                               // expected-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++2b}}
+                               // expected-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23}}
 }
 
 constexpr void non_literal2(bool b) {
   if (!b)
-    NonLiteral n; // expected-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++2b}}
+    NonLiteral n; // expected-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23}}
 }
 
 constexpr int c_thread_local(int n) {
   if (!n)
     return 0;
-  static _Thread_local int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  static _Thread_local int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   _Thread_local int b;        // // expected-error {{'_Thread_local' variables must have global storage}}
   return 0;
 }
@@ -50,7 +50,7 @@ constexpr int c_thread_local(int n) {
 constexpr int gnu_thread_local(int n) {
   if (!n)
     return 0;
-  static __thread int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  static __thread int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   __thread int b;        // expected-error {{'__thread' variables must have global storage}}
   return 0;
 }

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
index 2db0995127506..abfd76fd0b03c 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,beforecxx14,beforecxx20,beforecxx2b -std=c++11 %s
-// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,beforecxx20,beforecxx2b -std=c++14 %s
-// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,aftercxx20,beforecxx2b -std=c++20  %s
-// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,aftercxx20 -std=c++2b %s
+// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,beforecxx14,beforecxx20,beforecxx23 -std=c++11 %s
+// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,beforecxx20,beforecxx23 -std=c++14 %s
+// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,aftercxx20,beforecxx23 -std=c++20  %s
+// RUN: %clang_cc1 -fcxx-exceptions -verify=expected,aftercxx14,aftercxx20 -std=c++23 %s
 
 namespace N {
   typedef char C;
@@ -124,12 +124,12 @@ constexpr int DisallowedStmtsCXX14_1(bool b) {
 constexpr int DisallowedStmtsCXX14_2() {
   return 0; // beforecxx14-note {{previous}}
   //  - a goto statement
-  goto x; // beforecxx2b-warning {{use of this statement in a constexpr function is a C++2b extension}}
+  goto x; // beforecxx23-warning {{use of this statement in a constexpr function is a C++23 extension}}
   x:;
     return 0; // beforecxx14-warning {{multiple return}}
 }
 constexpr int DisallowedStmtsCXX14_2_1() {
-merp: // beforecxx2b-warning {{use of this statement in a constexpr function is a C++2b extension}}
+merp: // beforecxx23-warning {{use of this statement in a constexpr function is a C++23 extension}}
   return 0;
 }
 constexpr int DisallowedStmtsCXX14_3() {
@@ -141,14 +141,14 @@ constexpr int DisallowedStmtsCXX14_3() {
 constexpr int DisallowedStmtsCXX14_4() {
   //  - a definition of a variable of non-literal type
   return 0;
-  NonLiteral nl; // beforecxx2b-error {{variable of non-literal type 'NonLiteral' cannot be defined in a constexpr function before C++2b}} \
-                 // beforecxx2b-note at 14  {{'NonLiteral' is not literal}}
+  NonLiteral nl; // beforecxx23-error {{variable of non-literal type 'NonLiteral' cannot be defined in a constexpr function before C++23}} \
+                 // beforecxx23-note at 14  {{'NonLiteral' is not literal}}
 }
 
 constexpr int DisallowedStmtsCXX14_5() {
   return 0;
   //  - a definition of a variable of static storage duration
-  static constexpr int n = 123; // beforecxx2b-warning {{definition of a static variable in a constexpr function is a C++2b extension}} \
+  static constexpr int n = 123; // beforecxx23-warning {{definition of a static variable in a constexpr function is a C++23 extension}} \
                                //  beforecxx14-warning {{variable declaration in a constexpr function is a C++14 extension}}
 }
 
@@ -156,7 +156,7 @@ constexpr int DisallowedStmtsCXX14_6() {
   //  - a definition of a variable of thread storage duration
   return 0;
   thread_local constexpr int n = 123; // beforecxx14-warning {{variable declaration in a constexpr function is a C++14 extension}} \
-                                      // beforecxx2b-warning {{definition of a thread_local variable in a constexpr function is a C++2b extension}}
+                                      // beforecxx23-warning {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
 }
 constexpr int DisallowedStmtsCXX14_7() {
   //  - a definition of a variable for which no initialization is performed
@@ -262,7 +262,7 @@ namespace std_example {
   }
   constexpr int first(int n) {
     return 0;
-    static int value = n; // beforecxx2b-warning {{definition of a static variable in a constexpr function is a C++2b extension}} \
+    static int value = n; // beforecxx23-warning {{definition of a static variable in a constexpr function is a C++23 extension}} \
                           // beforecxx14-warning {{variable declaration in a constexpr function is a C++14 extension}}
   }
   constexpr int uninit() {

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp
index 609ab8c999ff8..97e860f91dcd3 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -verify -std=c++2b -verify=expected,cxx2b    %s
+// RUN: %clang_cc1 -verify -std=c++23 -verify=expected,cxx23    %s
 // RUN: %clang_cc1 -verify -std=c++20 -verify=expected,cxx14_20 %s
 // RUN: %clang_cc1 -verify -std=c++14 -verify=expected,cxx14_20 %s
 
@@ -30,7 +30,7 @@ using Int = decltype(x3d);
 auto x4a = (i);
 decltype(auto) x4d = (i);
 using Int = decltype(x4a);
-using IntLRef = decltype(x4d); // cxx2b-note {{previous definition is here}}
+using IntLRef = decltype(x4d); // cxx23-note {{previous definition is here}}
 
 auto x5a = f();
 decltype(auto) x5d = f();
@@ -81,7 +81,7 @@ using Int = decltype(f2d(0));
 auto f3a(int n) { return (n); }
 decltype(auto) f3d(int n) { return (n); } // expected-warning {{reference to stack memory}}
 using Int = decltype(f3a(0));
-using IntLRef = decltype(f3d(0)); // cxx2b-error {{type alias redefinition with 
diff erent types ('decltype(f3d(0))' (aka 'int &&') vs 'decltype(x4d)' (aka 'int &'))}}
+using IntLRef = decltype(f3d(0)); // cxx23-error {{type alias redefinition with 
diff erent types ('decltype(f3d(0))' (aka 'int &&') vs 'decltype(x4d)' (aka 'int &'))}}
 
 auto f4a(int n) { return f(); }
 decltype(auto) f4d(int n) { return f(); }

diff  --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.auto.deduct/p2.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.auto.deduct/p2.cpp
index 49bd5e9168ac9..1655685f44808 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.auto.deduct/p2.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.auto.deduct/p2.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 // p2.3 allows only T = auto in T(x).
 

diff  --git a/clang/test/CXX/drs/dr0xx.cpp b/clang/test/CXX/drs/dr0xx.cpp
index 6e7c5c557ec11..5a127ff4f4164 100644
--- a/clang/test/CXX/drs/dr0xx.cpp
+++ b/clang/test/CXX/drs/dr0xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -triple %itanium_abi_triple
 
 namespace dr1 { // dr1: no
   namespace X { extern "C" void dr1_f(int a = 1); }

diff  --git a/clang/test/CXX/drs/dr10xx.cpp b/clang/test/CXX/drs/dr10xx.cpp
index 76b0e0876d7a0..f30ed1cb3e496 100644
--- a/clang/test/CXX/drs/dr10xx.cpp
+++ b/clang/test/CXX/drs/dr10xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 namespace std {
   __extension__ typedef __SIZE_TYPE__ size_t;

diff  --git a/clang/test/CXX/drs/dr12xx.cpp b/clang/test/CXX/drs/dr12xx.cpp
index 863e5be9a5d16..ce8b0e370b420 100644
--- a/clang/test/CXX/drs/dr12xx.cpp
+++ b/clang/test/CXX/drs/dr12xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 // dr1200: na
 

diff  --git a/clang/test/CXX/drs/dr18xx.cpp b/clang/test/CXX/drs/dr18xx.cpp
index cb9d02db01c62..3d57f5e5b74db 100644
--- a/clang/test/CXX/drs/dr18xx.cpp
+++ b/clang/test/CXX/drs/dr18xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 
 #if __cplusplus < 201103L
 // expected-error at +1 {{variadic macro}}

diff  --git a/clang/test/CXX/drs/dr1xx.cpp b/clang/test/CXX/drs/dr1xx.cpp
index f70cd20133ebc..60e80a4c0e1c4 100644
--- a/clang/test/CXX/drs/dr1xx.cpp
+++ b/clang/test/CXX/drs/dr1xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 namespace dr100 { // dr100: yes
   template<const char (*)[4]> struct A {}; // expected-note 0-1{{declared here}}

diff  --git a/clang/test/CXX/drs/dr20xx.cpp b/clang/test/CXX/drs/dr20xx.cpp
index aea1e23527181..dd60af14bb6b7 100644
--- a/clang/test/CXX/drs/dr20xx.cpp
+++ b/clang/test/CXX/drs/dr20xx.cpp
@@ -4,7 +4,7 @@
 // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 #if __cplusplus < 201103L
 #define static_assert(...) _Static_assert(__VA_ARGS__)

diff  --git a/clang/test/CXX/drs/dr21xx.cpp b/clang/test/CXX/drs/dr21xx.cpp
index 80db71bccc8db..bd6f8b7cb6e68 100644
--- a/clang/test/CXX/drs/dr21xx.cpp
+++ b/clang/test/CXX/drs/dr21xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-unknown-unknown %s -verify -fexceptions -Wno-deprecated-builtins -fcxx-exceptions -pedantic-errors
 
 #if __cplusplus < 201103L
 // expected-error at +1 {{variadic macro}}

diff  --git a/clang/test/CXX/drs/dr23xx.cpp b/clang/test/CXX/drs/dr23xx.cpp
index ac448994c6932..6cb10067739f8 100644
--- a/clang/test/CXX/drs/dr23xx.cpp
+++ b/clang/test/CXX/drs/dr23xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors 2>&1 | FileCheck %s
 
 #if __cplusplus >= 201103L
 namespace dr2303 { // dr2303: 12

diff  --git a/clang/test/CXX/drs/dr2xx.cpp b/clang/test/CXX/drs/dr2xx.cpp
index d8fb8941121de..de8ce2b77da4d 100644
--- a/clang/test/CXX/drs/dr2xx.cpp
+++ b/clang/test/CXX/drs/dr2xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 // PR13819 -- __SIZE_TYPE__ is incompatible.
 typedef __SIZE_TYPE__ size_t; // expected-error 0-1 {{extension}}

diff  --git a/clang/test/CXX/drs/dr3xx.cpp b/clang/test/CXX/drs/dr3xx.cpp
index e3fe8d932b30a..253fc5d07521e 100644
--- a/clang/test/CXX/drs/dr3xx.cpp
+++ b/clang/test/CXX/drs/dr3xx.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b -verify=expected,cxx20_2b,cxx2b    -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++20 -verify=expected,cxx98_20,cxx20_2b -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 -verify=expected,cxx20_23,cxx23    -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++20 -verify=expected,cxx98_20,cxx20_23 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 -verify=expected,cxx98_17,cxx98_20 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++14 -verify=expected,cxx98_17,cxx98_20 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++11 -verify=expected,cxx98_17,cxx98_20 -triple %itanium_abi_triple %s -fexceptions -fcxx-exceptions -pedantic-errors
@@ -20,8 +20,8 @@ namespace dr301 { // dr301: yes
   void f() {
     bool a = (void(*)(S, S))operator+<S> < // expected-warning {{ordered comparison of function pointers}}
              (void(*)(S, S))operator+<S>;
-    bool b = (void(*)(S, S))operator- < // cxx20_2b-note {{to match this '<'}} cxx98_17-warning {{ordered comparison of function pointers}}
-             (void(*)(S, S))operator-; // cxx20_2b-error {{expected '>'}}
+    bool b = (void(*)(S, S))operator- < // cxx20_23-note {{to match this '<'}} cxx98_17-warning {{ordered comparison of function pointers}}
+             (void(*)(S, S))operator-; // cxx20_23-error {{expected '>'}}
     bool c = (void(*)(S, S))operator+ < // expected-note {{to match this '<'}}
              (void(*)(S, S))operator-; // expected-error {{expected '>'}}
   }
@@ -459,10 +459,10 @@ namespace dr331 { // dr331: yes
 
 namespace dr332 { // dr332: dup 577
   void f(volatile void); // expected-error {{'void' as parameter must not have type qualifiers}}
-  // cxx20_2b-warning at -1 {{volatile-qualified parameter type 'volatile void' is deprecated}}
+  // cxx20_23-warning at -1 {{volatile-qualified parameter type 'volatile void' is deprecated}}
   void g(const void); // expected-error {{'void' as parameter must not have type qualifiers}}
   void h(int n, volatile void); // expected-error {{'void' must be the first and only parameter}}
-  // cxx20_2b-warning at -1 {{volatile-qualified parameter type 'volatile void' is deprecated}}
+  // cxx20_23-warning at -1 {{volatile-qualified parameter type 'volatile void' is deprecated}}
 }
 
 namespace dr333 { // dr333: yes
@@ -647,7 +647,7 @@ namespace dr349 { // dr349: no
     template <class T> operator T ***() {
       int ***p = 0;
       return p; // cxx98_20-error {{cannot initialize return object of type 'const int ***' with an lvalue of type 'int ***'}}
-      // cxx2b-error at -1 {{cannot initialize return object of type 'const int ***' with an rvalue of type 'int ***'}}
+      // cxx23-error at -1 {{cannot initialize return object of type 'const int ***' with an rvalue of type 'int ***'}}
     }
   };
 
@@ -961,12 +961,12 @@ namespace dr368 { // dr368: yes
   template<typename T, T> struct S {}; // expected-note {{here}}
   template<typename T> int f(S<T, T()> *); // expected-error {{function type}}
   template<typename T> int g(S<T, (T())> *); // cxx98_17-note {{type 'X'}}
-  // cxx20_2b-note at -1 {{candidate function [with T = dr368::X]}}
+  // cxx20_23-note at -1 {{candidate function [with T = dr368::X]}}
   template<typename T> int g(S<T, true ? T() : T()> *); // cxx98_17-note {{type 'X'}}
-  // cxx20_2b-note at -1 {{candidate function [with T = dr368::X]}}
+  // cxx20_23-note at -1 {{candidate function [with T = dr368::X]}}
   struct X {};
   int n = g<X>(0); // cxx98_17-error {{no matching}}
-  // cxx20_2b-error at -1 {{call to 'g' is ambiguous}}
+  // cxx20_23-error at -1 {{call to 'g' is ambiguous}}
 }
 
 // dr370: na

diff  --git a/clang/test/CXX/drs/dr4xx.cpp b/clang/test/CXX/drs/dr4xx.cpp
index f1ba2a0471389..d8bdf49d0b2dd 100644
--- a/clang/test/CXX/drs/dr4xx.cpp
+++ b/clang/test/CXX/drs/dr4xx.cpp
@@ -3,7 +3,7 @@
 // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: env ASAN_OPTIONS=detect_stack_use_after_return=0 %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 // FIXME: __SIZE_TYPE__ expands to 'long long' on some targets.
 __extension__ typedef __SIZE_TYPE__ size_t;

diff  --git a/clang/test/CXX/drs/dr5xx.cpp b/clang/test/CXX/drs/dr5xx.cpp
index 1477a40fd25d0..cba0c4e1241c5 100644
--- a/clang/test/CXX/drs/dr5xx.cpp
+++ b/clang/test/CXX/drs/dr5xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 // FIXME: This is included to avoid a diagnostic with no source location
 // pointing at the implicit operator new. We can't match such a diagnostic

diff  --git a/clang/test/CXX/drs/dr6xx.cpp b/clang/test/CXX/drs/dr6xx.cpp
index b74e466c62ee6..59331e7de7687 100644
--- a/clang/test/CXX/drs/dr6xx.cpp
+++ b/clang/test/CXX/drs/dr6xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors -fno-spell-checking
 
 namespace dr600 { // dr600: yes
 struct S {

diff  --git a/clang/test/CXX/drs/dr9xx.cpp b/clang/test/CXX/drs/dr9xx.cpp
index 2c1d620c6e4bf..3d45dc8e72d2d 100644
--- a/clang/test/CXX/drs/dr9xx.cpp
+++ b/clang/test/CXX/drs/dr9xx.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++17 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 // RUN: %clang_cc1 -std=c++20 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
-// RUN: %clang_cc1 -std=c++2b %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
+// RUN: %clang_cc1 -std=c++23 %s -verify -fexceptions -fcxx-exceptions -pedantic-errors
 
 namespace std {
   __extension__ typedef __SIZE_TYPE__ size_t;

diff  --git a/clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp b/clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp
index a7137447e506f..bbfce5e698d15 100644
--- a/clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp
+++ b/clang/test/CXX/expr/expr.post/expr.type.conv/p1-2b.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 template <class T>
 void foo(T);
@@ -9,7 +9,7 @@ struct A {
   float g(double);
 } a{1};
 
-// C++2b [dcl.type.auto.deduct]p2.3
+// C++23 [dcl.type.auto.deduct]p2.3
 // For an explicit type conversion, T is the specified type, which shall be auto.
 void diagnostics() {
   foo(auto());   // expected-error {{initializer for functional-style cast to 'auto' is empty}}

diff  --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4-cxx14.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4-cxx14.cpp
index 2933532627d4c..a5e4b6a2c3bbd 100644
--- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4-cxx14.cpp
+++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4-cxx14.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx2b    %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx23    %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20 %s
 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify=expected,cxx14_20 %s
 
@@ -9,7 +9,7 @@ int &d = [] (int &r) -> auto & { return r; } (a);
 int &e = [] (int &r) -> auto { return r; } (a); // expected-error {{cannot bind to a temporary}}
 int &f = [] (int r) -> decltype(auto) { return r; } (a); // expected-error {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
 int &g = [] (int r) -> decltype(auto) { return (r); } (a); // expected-warning {{reference to stack}}
-// cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+// cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
 
 int test_explicit_auto_return()
 {
@@ -17,7 +17,7 @@ int test_explicit_auto_return()
     auto L = [](auto F, auto a) { return F(a); };
     auto M = [](auto a) -> auto { return a; }; // OK
     auto MRef = [](auto b) -> auto & { return b; }; //cxx14_20-warning{{reference to stack}}
-    // cxx2b-error at -1 {{non-const lvalue reference to type 'X' cannot bind to a temporary of type 'X'}}
+    // cxx23-error at -1 {{non-const lvalue reference to type 'X' cannot bind to a temporary of type 'X'}}
     auto MPtr = [](auto c) -> auto* { return &c; }; //expected-warning{{address of stack}}
     auto MDeclType = [](auto&& d) -> decltype(auto) { return static_cast<decltype(d)>(d); }; //OK
     M(3);
@@ -57,7 +57,7 @@ int test_no_parameter_list()
     auto M = [] { return 5; }; // OK
     auto M2 = [] -> auto && { return si; };
 #if __cplusplus <= 202002L
-      // expected-warning at -2{{is a C++2b extension}}
+      // expected-warning at -2{{is a C++23 extension}}
 #endif
     M();
 }

diff  --git a/clang/test/CXX/expr/expr.unary/expr.new/p2-cxx1z.cpp b/clang/test/CXX/expr/expr.unary/expr.new/p2-cxx1z.cpp
index b8383b83a589a..633f46fdd621d 100644
--- a/clang/test/CXX/expr/expr.unary/expr.new/p2-cxx1z.cpp
+++ b/clang/test/CXX/expr/expr.unary/expr.new/p2-cxx1z.cpp
@@ -2,7 +2,7 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++17 -pedantic
 
 // [expr.new]p2 ... the invented declaration: T x init ;
-// C++2b [dcl.type.auto.deduct]p2.2
+// C++23 [dcl.type.auto.deduct]p2.2
 // For a variable declared with a type that contains a placeholder type, T is the declared type of the variable.
 void f() {
   // - If the initializer is a parenthesized expression-list, the expression-list shall be a single assignmentexpression and E is the assignment-expression.

diff  --git a/clang/test/CXX/over/over.match/over.match.best/over.best.ics/p6.cpp b/clang/test/CXX/over/over.match/over.match.best/over.best.ics/p6.cpp
index d33b1a4b7438b..909ff47560d35 100644
--- a/clang/test/CXX/over/over.match/over.match.best/over.best.ics/p6.cpp
+++ b/clang/test/CXX/over/over.match/over.match.best/over.best.ics/p6.cpp
@@ -1,9 +1,9 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=cxx2b -std=c++2b %s
+// RUN: %clang_cc1 -fsyntax-only -verify=cxx23 -std=c++23 %s
 // RUN: %clang_cc1 -fsyntax-only -verify=cxx20 -std=c++20 %s
-// cxx2b-no-diagnostics
+// cxx23-no-diagnostics
 
 struct __unique {
-    static constexpr auto operator()() { return 4; };  // cxx20-warning {{is a C++2b extension}}
+    static constexpr auto operator()() { return 4; };  // cxx20-warning {{is a C++23 extension}}
 
     using P = int();
     constexpr operator P*() { return operator(); }

diff  --git a/clang/test/CXX/over/over.oper/p7.cpp b/clang/test/CXX/over/over.oper/p7.cpp
index 7d304762c57f8..9d1201a103426 100644
--- a/clang/test/CXX/over/over.oper/p7.cpp
+++ b/clang/test/CXX/over/over.oper/p7.cpp
@@ -1,15 +1,15 @@
 // RUN: %clang_cc1 -std=c++11 %s -verify=expected,cxx11
-// RUN: %clang_cc1 -std=c++2b %s -verify=expected,cxx2b
-// RUN: %clang_cc1 -std=c++2b -Wpre-c++2b-compat %s -verify=expected,precxx2b
+// RUN: %clang_cc1 -std=c++23 %s -verify=expected,cxx23
+// RUN: %clang_cc1 -std=c++23 -Wpre-c++23-compat %s -verify=expected,precxx23
 
 
 struct Functor {
   static int operator()(int a, int b);
   static int operator[](int a1);
-  // cxx11-warning at -2 {{declaring overloaded 'operator()' as 'static' is a C++2b extension}}
-  // cxx11-warning at -2 {{declaring overloaded 'operator[]' as 'static' is a C++2b extension}}
-  // precxx2b-warning at -4 {{incompatible with C++ standards before C++2b}}
-  // precxx2b-warning at -4 {{incompatible with C++ standards before C++2b}}
+  // cxx11-warning at -2 {{declaring overloaded 'operator()' as 'static' is a C++23 extension}}
+  // cxx11-warning at -2 {{declaring overloaded 'operator[]' as 'static' is a C++23 extension}}
+  // precxx23-warning at -4 {{incompatible with C++ standards before C++23}}
+  // precxx23-warning at -4 {{incompatible with C++ standards before C++23}}
 };
 
 struct InvalidParsing1 {

diff  --git a/clang/test/CXX/special/class.copy/p3-cxx11.cpp b/clang/test/CXX/special/class.copy/p3-cxx11.cpp
index bee2d02c96911..8d27f1c2eacb2 100644
--- a/clang/test/CXX/special/class.copy/p3-cxx11.cpp
+++ b/clang/test/CXX/special/class.copy/p3-cxx11.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++2b -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++23 -fsyntax-only -verify %s
 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++20 -fsyntax-only -verify %s
 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++11 -fsyntax-only -verify %s
 class X {

diff  --git a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp
index 661b7c5987351..8d43be6fc9047 100644
--- a/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 void test_consteval() {
   if consteval ({(void)1;});  // expected-error {{expected { after consteval}}

diff  --git a/clang/test/CXX/temp/temp.decls/temp.mem/p5.cpp b/clang/test/CXX/temp/temp.decls/temp.mem/p5.cpp
index f5cadc75e6d3d..668941b401419 100644
--- a/clang/test/CXX/temp/temp.decls/temp.mem/p5.cpp
+++ b/clang/test/CXX/temp/temp.decls/temp.mem/p5.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx2b    %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx23    %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx98_20 %s
 // RUN: %clang_cc1 -std=c++98 -fsyntax-only -verify=expected,cxx98_20 %s
 // RUN: %clang_cc1            -fsyntax-only -verify=expected,cxx98_20 %s
@@ -69,8 +69,8 @@ struct X0 {
     T x = T();
     return x; // cxx98_20-error{{cannot initialize return object of type 'const char *' with an lvalue of type 'char'}} \
     // cxx98_20-error{{cannot initialize return object of type 'const int *' with an lvalue of type 'int'}} \
-    // cxx2b-error{{cannot initialize return object of type 'const char *' with an rvalue of type 'char'}} \
-    // cxx2b-error{{cannot initialize return object of type 'const int *' with an rvalue of type 'int'}}
+    // cxx23-error{{cannot initialize return object of type 'const char *' with an rvalue of type 'char'}} \
+    // cxx23-error{{cannot initialize return object of type 'const int *' with an rvalue of type 'int'}}
   }
 };
 

diff  --git a/clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp b/clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp
index 7542186c22c71..10af03eeaf0a9 100644
--- a/clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp
+++ b/clang/test/CXX/temp/temp.decls/temp.variadic/p5.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++11 -fblocks -fms-extensions -fsyntax-only -verify=expected,cxx11 %s
-// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++2b -fblocks -fms-extensions -fsyntax-only -verify=expected %s
+// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++23 -fblocks -fms-extensions -fsyntax-only -verify=expected %s
 
 template<typename T, typename U> struct pair;
 template<typename ...> struct tuple;

diff  --git a/clang/test/CodeGenCXX/cxx2b-consteval-if.cpp b/clang/test/CodeGenCXX/cxx2b-consteval-if.cpp
index a69a2271f661b..343b6a0bbd8a6 100644
--- a/clang/test/CodeGenCXX/cxx2b-consteval-if.cpp
+++ b/clang/test/CodeGenCXX/cxx2b-consteval-if.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b %s -emit-llvm -o - | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -emit-llvm -o - | FileCheck %s
 
 void should_be_used_1();
 void should_be_used_2();

diff  --git a/clang/test/CodeGenCXX/cxx2b-static-call-operator.cpp b/clang/test/CodeGenCXX/cxx2b-static-call-operator.cpp
index 1d0b05ba10aa3..fd53649c9b061 100644
--- a/clang/test/CodeGenCXX/cxx2b-static-call-operator.cpp
+++ b/clang/test/CodeGenCXX/cxx2b-static-call-operator.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b %s -emit-llvm -triple x86_64-linux -o - | FileCheck %s
-// RUN: %clang_cc1 -std=c++2b %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -emit-llvm -triple x86_64-linux -o - | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s
 
 struct Functor {
   static int operator()(int x, int y) {

diff  --git a/clang/test/CodeGenCXX/cxx2b-static-subscript-operator.cpp b/clang/test/CodeGenCXX/cxx2b-static-subscript-operator.cpp
index 3d8957698f5a7..5dbd2c50cc56b 100644
--- a/clang/test/CodeGenCXX/cxx2b-static-subscript-operator.cpp
+++ b/clang/test/CodeGenCXX/cxx2b-static-subscript-operator.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b %s -emit-llvm -triple x86_64-linux -o - | FileCheck %s
-// RUN: %clang_cc1 -std=c++2b %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -emit-llvm -triple x86_64-linux -o - | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 %s -emit-llvm -triple x86_64-windows-msvc -o - | FileCheck %s
 
 struct Functor {
   static int operator[](int x, int y) {

diff  --git a/clang/test/CoverageMapping/if.cpp b/clang/test/CoverageMapping/if.cpp
index f477db980e7f4..4326add3b3443 100644
--- a/clang/test/CoverageMapping/if.cpp
+++ b/clang/test/CoverageMapping/if.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fms-extensions -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++2b -triple %itanium_abi_triple -main-file-name if.cpp %s | FileCheck %s
+// RUN: %clang_cc1 -fms-extensions -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++23 -triple %itanium_abi_triple -main-file-name if.cpp %s | FileCheck %s
 
 int nop() { return 0; }
 struct S {

diff  --git a/clang/test/CoverageMapping/strong_order.cpp b/clang/test/CoverageMapping/strong_order.cpp
index ebda311d2489b..eeed85f826069 100644
--- a/clang/test/CoverageMapping/strong_order.cpp
+++ b/clang/test/CoverageMapping/strong_order.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++2b -triple %itanium_abi_triple -main-file-name if.cpp %s
+// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++23 -triple %itanium_abi_triple -main-file-name if.cpp %s
 
 // No crash for following example.
 // See https://github.com/llvm/llvm-project/issues/45481

diff  --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index 1d588bdfc1b00..b32b44ab31648 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -604,7 +604,7 @@
 // STDCXX20: -std=c++20
 
 // RUN: %clang_cl -fmsc-version=1900 -TP -std:c++latest -### -- %s 2>&1 | FileCheck -check-prefix=STDCXXLATEST %s
-// STDCXXLATEST: -std=c++2b
+// STDCXXLATEST: -std=c++23
 
 // RUN: env CL="/Gy" %clang_cl -### -- %s 2>&1 | FileCheck -check-prefix=ENV-CL %s
 // ENV-CL: "-ffunction-sections"

diff  --git a/clang/test/Driver/modules-fprebuilt-mdoule-path.cpp b/clang/test/Driver/modules-fprebuilt-mdoule-path.cpp
index a2c830bfda00b..900645546394b 100644
--- a/clang/test/Driver/modules-fprebuilt-mdoule-path.cpp
+++ b/clang/test/Driver/modules-fprebuilt-mdoule-path.cpp
@@ -1,6 +1,6 @@
 // RUN: %clang -std=c++2a -fprebuilt-module-path=. -### -c %s 2>&1 | FileCheck %s
 // RUN: %clang -std=c++20 -fprebuilt-module-path=. -### -c %s 2>&1 | FileCheck %s
-// RUN: %clang -std=c++2b -fprebuilt-module-path=. -### -c %s 2>&1 | FileCheck %s
+// RUN: %clang -std=c++23 -fprebuilt-module-path=. -### -c %s 2>&1 | FileCheck %s
 // RUN: %clang -std=c++latest -fprebuilt-module-path=. -### -c %s 2>&1 | FileCheck %s
 //
 // CHECK-NOT: warning: argument unused during compilation

diff  --git a/clang/test/Driver/std.cpp b/clang/test/Driver/std.cpp
index c04221b363d7f..fff604fa98ece 100644
--- a/clang/test/Driver/std.cpp
+++ b/clang/test/Driver/std.cpp
@@ -11,8 +11,8 @@
 // RUN: not %clang -std=gnu++1z %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX1Z %s
 // RUN: not %clang -std=c++2a %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CXX2A %s
 // RUN: not %clang -std=gnu++2a %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX2A %s
-// RUN: not %clang -std=c++2b %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CXX2B %s
-// RUN: not %clang -std=gnu++2b %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX2B %s
+// RUN: not %clang -std=c++23 %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CXX2B %s
+// RUN: not %clang -std=gnu++23 %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX2B %s
 
 void f(int n) {
   typeof(n)();

diff  --git a/clang/test/Driver/unknown-std.cpp b/clang/test/Driver/unknown-std.cpp
index d1722b78499ab..1490e9e3a1164 100644
--- a/clang/test/Driver/unknown-std.cpp
+++ b/clang/test/Driver/unknown-std.cpp
@@ -17,8 +17,8 @@
 // CHECK-NEXT: note: use 'gnu++17' for 'ISO C++ 2017 with amendments and GNU extensions' standard
 // CHECK-NEXT: note: use 'c++20' for 'ISO C++ 2020 DIS' standard
 // CHECK-NEXT: note: use 'gnu++20' for 'ISO C++ 2020 DIS with GNU extensions' standard
-// CHECK-NEXT: note: use 'c++2b' for 'Working draft for ISO C++ 2023 DIS' standard
-// CHECK-NEXT: note: use 'gnu++2b' for 'Working draft for ISO C++ 2023 DIS with GNU extensions' standard
+// CHECK-NEXT: note: use 'c++23' for 'ISO C++ 2023 DIS' standard
+// CHECK-NEXT: note: use 'gnu++23' for 'ISO C++ 2023 DIS with GNU extensions' standard
 // CUDA-NEXT: note: use 'cuda' for 'NVIDIA CUDA(tm)' standard
 
 // Make sure that no other output is present.

diff  --git a/clang/test/FixIt/fixit-c++11.cpp b/clang/test/FixIt/fixit-c++11.cpp
index 9a2020c41870a..a5a47b7c937ba 100644
--- a/clang/test/FixIt/fixit-c++11.cpp
+++ b/clang/test/FixIt/fixit-c++11.cpp
@@ -59,8 +59,8 @@ void S2::f(int i) {
   (void)[] mutable {};
   (void)[]->int{};
 #if __cplusplus <= 202002L
-  // expected-warning at -3{{is a C++2b extension}}
-  // expected-warning at -3{{is a C++2b extension}}
+  // expected-warning at -3{{is a C++23 extension}}
+  // expected-warning at -3{{is a C++23 extension}}
 #endif
 
   delete []() { return new int; }(); // expected-error{{'[]' after delete interpreted as 'delete[]'}}

diff  --git a/clang/test/Lexer/char-escapes-delimited.c b/clang/test/Lexer/char-escapes-delimited.c
index 3b1deffe936db..5327ef700b0e2 100644
--- a/clang/test/Lexer/char-escapes-delimited.c
+++ b/clang/test/Lexer/char-escapes-delimited.c
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -x c++ -std=gnu++11 -fsyntax-only -pedantic -verify=ext,expected %s
 // RUN: %clang_cc1 -x c -std=gnu11 -fsyntax-only -pedantic -verify=ext,expected %s
-// RUN: %clang_cc1 -x c++ -std=c++2b -fsyntax-only -pedantic -verify=cxx2b,expected -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -x c++ -std=c++23 -fsyntax-only -pedantic -verify=cxx23,expected -Wpre-c++23-compat %s
 // RUN: %clang_cc1 -x c++ -std=gnu++11 -fwchar-type=short -fno-signed-wchar -fsyntax-only -pedantic -verify=ext,expected %s
 // RUN: %clang_cc1 -x c -std=gnu11 -fwchar-type=short -fno-signed-wchar -fsyntax-only -pedantic -verify=ext,expected %s
 // RUN: %clang_cc1 -x c++ -std=c++17 -ftrigraphs -fsyntax-only -pedantic -verify=ext,expected -DTRIGRAPHS=1 %s
@@ -21,47 +21,47 @@ const char *errors =
 
 void ucn(void) {
   char a = '\u{1234}'; // expected-error {{character too large for enclosing character literal type}} \
-                       // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+                       // ext-warning {{extension}} cxx23-warning {{C++23}}
 
-  unsigned b = U'\u{1234}';   // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned b = U'\u{1234}';   // ext-warning {{extension}} cxx23-warning {{C++23}}
 
 #ifdef __cplusplus
-  unsigned b2 = U'\u{1}';     // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned b2 = U'\u{1}';     // ext-warning {{extension}} cxx23-warning {{C++23}}
 #else
   unsigned b2 = U'\u{1}';     //expected-error {{universal character name refers to a control character}}
 #endif
 
-  unsigned c = U'\u{000000000001234}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned c = U'\u{000000000001234}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned d = U'\u{111111111}';       //expected-error {{hex escape sequence out of range}}
 }
 
 void hex(void) {
-  char a = '\x{1}';             // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  char a = '\x{1}';             // ext-warning {{extension}} cxx23-warning {{C++23}}
   char b = '\x{abcdegggggabc}'; // expected-error 5{{invalid digit 'g' in escape sequence}}
   char c = '\x{ff1}';           // expected-error {{hex escape sequence out of range}}
 
 #if __WCHAR_MAX__ > 0xFFFF
-  unsigned d = L'\x{FFFFFFFF}';  // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned d = L'\x{FFFFFFFF}';  // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned e = L'\x{100000000}'; // expected-error {{hex escape sequence out of range}}
 #else
-  unsigned f = L'\x{FFFF}';   // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned f = L'\x{FFFF}';   // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned g = L'\x{10000}';  // expected-error {{hex escape sequence out of range}}
 #endif
-  unsigned h = U'\x{FFFFFFFF}';  // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned h = U'\x{FFFFFFFF}';  // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned i = U'\x{100000000}'; // expected-error {{hex escape sequence out of range}}
 }
 
 void octal(void) {
-  char a = '\o{1}';              // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  char a = '\o{1}';              // ext-warning {{extension}} cxx23-warning {{C++23}}
   char b = '\o{12345678881238}'; // expected-error 4{{invalid digit '8' in escape sequence}}
   char c = '\o{777}';            // //expected-error {{octal escape sequence out of range}}
 #if __WCHAR_MAX__ > 0xFFFF
-  unsigned d = L'\o{37777777777}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned d = L'\o{37777777777}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned e = L'\o{40000000000}'; // expected-error {{octal escape sequence out of range}}
   unsigned f = L'\o{100000000000}'; // expected-error {{octal escape sequence out of range}}
   unsigned g = L'\o{200000000000}'; // expected-error {{octal escape sequence out of range}}
 #else
-  unsigned d = L'\o{177777}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned d = L'\o{177777}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
   unsigned e = L'\o{200000}'; // expected-error {{octal escape sequence out of range}}
 #endif
 }
@@ -78,9 +78,9 @@ void concat(void) {
 
 void named(void) {
   char a = '\N{LOTUS}'; // expected-error{{character too large for enclosing character literal type}} \
-                        // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+                        // ext-warning {{extension}} cxx23-warning {{C++23}}
 
-  char b  = '\N{DOLLAR SIGN}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  char b  = '\N{DOLLAR SIGN}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
   char b_ = '\N{ DOL-LAR _SIGN }'; // expected-error {{' DOL-LAR _SIGN ' is not a valid Unicode character name}} \
                                // expected-note {{characters names in Unicode escape sequences are sensitive to case and whitespaces}}
 
@@ -89,13 +89,13 @@ void named(void) {
   char d = '\N{}';          // expected-error {{delimited escape sequence cannot be empty}}
   char e = '\N{';           // expected-error {{incomplete universal character name}}
 
-  unsigned f = L'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned f = L'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
 
   unsigned g = u'\N{LOTUS}'; // expected-error {{character too large for enclosing character literal type}} \
-                             // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+                             // ext-warning {{extension}} cxx23-warning {{C++23}}
 
-  unsigned h = U'\N{LOTUS}';                      // ext-warning {{extension}} cxx2b-warning {{C++2b}}
-  unsigned i = u'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+  unsigned h = U'\N{LOTUS}';                      // ext-warning {{extension}} cxx23-warning {{C++23}}
+  unsigned i = u'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx23-warning {{C++23}}
   char j = '\NN';                                 // expected-error {{expected '{' after '\N' escape sequence}} expected-warning {{multi-character character constant}}
   unsigned k = u'\N{LOTUS';                       // expected-error {{incomplete universal character name}}
 
@@ -115,11 +115,11 @@ void separators(void) {
                  // expected-warning at -2 3{{expression result unused}}
 }
 
-#if L'\N{GREEK CAPITAL LETTER GAMMA}' != L'Γ' // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+#if L'\N{GREEK CAPITAL LETTER GAMMA}' != L'Γ' // ext-warning {{extension}} cxx23-warning {{C++23}}
 #error "oh no!"
 #endif
 
 #ifdef TRIGRAPHS
 static_assert('\N??<DOLLAR SIGN??>' == '$'); // expected-warning 2{{trigraph converted}} \
-                                             // ext-warning {{extension}} cxx2b-warning {{C++2b}}
+                                             // ext-warning {{extension}} cxx23-warning {{C++23}}
 #endif

diff  --git a/clang/test/Lexer/cxx-features.cpp b/clang/test/Lexer/cxx-features.cpp
index ca7f987b78ab5..5d157ea2fac1c 100644
--- a/clang/test/Lexer/cxx-features.cpp
+++ b/clang/test/Lexer/cxx-features.cpp
@@ -3,7 +3,7 @@
 // RUN: %clang_cc1 -std=c++14 -fcxx-exceptions -fsized-deallocation -verify %s
 // RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -verify %s
 // RUN: %clang_cc1 -std=c++20 -fcxx-exceptions -fsized-deallocation -verify %s
-// RUN: %clang_cc1 -std=c++2b -fcxx-exceptions -fsized-deallocation -verify %s
+// RUN: %clang_cc1 -std=c++23 -fcxx-exceptions -fsized-deallocation -verify %s
 //
 // RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -frelaxed-template-template-args -DRELAXED_TEMPLATE_TEMPLATE_ARGS=1 -verify %s
 // RUN: %clang_cc1 -std=c++17 -fcxx-exceptions -fsized-deallocation -DCONCEPTS_TS=1 -verify %s
@@ -28,7 +28,7 @@
 #define check(macro, cxx98, cxx11, cxx14, cxx17, cxx20, cxx23) (cxx23 == 0 ? defined(__cpp_##macro) : __cpp_##macro != cxx23)
 #endif
 
-// --- C++2b features ---
+// --- C++23 features ---
 
 #if check(implicit_move, 0, 0, 0, 0, 0, 202011)
 #error "wrong value for __cpp_implicit_move"

diff  --git a/clang/test/Lexer/size_t-literal.cpp b/clang/test/Lexer/size_t-literal.cpp
index 3e3e8094b070d..d056feae39729 100644
--- a/clang/test/Lexer/size_t-literal.cpp
+++ b/clang/test/Lexer/size_t-literal.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify %s
 
 #if 1z != 1
 #error "z suffix must be recognized by preprocessor"

diff  --git a/clang/test/Modules/gmodules-deduction-guide.cpp b/clang/test/Modules/gmodules-deduction-guide.cpp
index 6b5a4086b3635..eab7db653ee55 100644
--- a/clang/test/Modules/gmodules-deduction-guide.cpp
+++ b/clang/test/Modules/gmodules-deduction-guide.cpp
@@ -1,6 +1,6 @@
 // REQUIRES: asserts
 
-// RUN: %clang_cc1 -std=c++2b -x c++-header -emit-pch -fmodule-format=obj -I %S/Inputs \
+// RUN: %clang_cc1 -std=c++23 -x c++-header -emit-pch -fmodule-format=obj -I %S/Inputs \
 // RUN:   -o %t.pch %S/Inputs/gmodules-deduction-guide.h \
 // RUN:   -mllvm -debug-only=pchcontainer &>%t-pch.ll
 // RUN: cat %t-pch.ll | FileCheck %s

diff  --git a/clang/test/Modules/merge-constrained-friends.cpp b/clang/test/Modules/merge-constrained-friends.cpp
index 13147d566e614..8f0e9ed83cf29 100644
--- a/clang/test/Modules/merge-constrained-friends.cpp
+++ b/clang/test/Modules/merge-constrained-friends.cpp
@@ -2,8 +2,8 @@
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
 //
-// RUN: %clang_cc1 -std=c++2b %t/A.cppm -emit-module-interface -o %t/A.pcm
-// RUN: %clang_cc1 -std=c++2b %t/Use.cpp -fprebuilt-module-path=%t -fsyntax-only -verify
+// RUN: %clang_cc1 -std=c++23 %t/A.cppm -emit-module-interface -o %t/A.pcm
+// RUN: %clang_cc1 -std=c++23 %t/Use.cpp -fprebuilt-module-path=%t -fsyntax-only -verify
 
 //--- A.cppm
 module;

diff  --git a/clang/test/OpenMP/target_update_messages.cpp b/clang/test/OpenMP/target_update_messages.cpp
index f936a075e1b48..a8505626196f8 100644
--- a/clang/test/OpenMP/target_update_messages.cpp
+++ b/clang/test/OpenMP/target_update_messages.cpp
@@ -6,7 +6,7 @@
 // RUN: %clang_cc1 -verify=expected,ge50,lt51 -fopenmp-simd -fopenmp-version=50 -ferror-limit 100 -o - -std=c++11 %s -Wuninitialized
 // RUN: %clang_cc1 -verify=expected,ge50,ge51 -fopenmp-simd -fopenmp-version=51 -ferror-limit 100 -o - -std=c++11 %s -Wuninitialized
 
-// RUN: %clang_cc1 -verify=expected,ge50,ge51,cxx2b -fopenmp -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++2b %s -Wuninitialized
+// RUN: %clang_cc1 -verify=expected,ge50,ge51,cxx23 -fopenmp -fopenmp-simd -fopenmp-version=51 -x c++ -std=c++23 %s -Wuninitialized
 
 void xxx(int argc) {
   int x; // expected-note {{initialize the variable 'x' to silence this warning}}
@@ -228,7 +228,7 @@ struct bar {
 
 #if defined(__cplusplus) && __cplusplus >= 202101L
 
-namespace cxx2b {
+namespace cxx23 {
 
 struct S {
   int operator[](auto...);
@@ -240,22 +240,22 @@ void f() {
 
 #pragma omp target update to(test[1])
 
-#pragma omp target update to(test[1, 2]) // cxx2b-error {{type 'int[10]' does not provide a subscript operator}} \
-                                         // cxx2b-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+#pragma omp target update to(test[1, 2]) // cxx23-error {{type 'int[10]' does not provide a subscript operator}} \
+                                         // cxx23-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
 
 #pragma omp target update to(test [1:1:1])
 
-#pragma omp target update to(test [1, 2:1:1]) // cxx2b-error {{expected ']'}} // expected-note {{'['}} \
-                                            // cxx2b-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+#pragma omp target update to(test [1, 2:1:1]) // cxx23-error {{expected ']'}} // expected-note {{'['}} \
+                                            // cxx23-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
 
-#pragma omp target update to(test [1, 2:]) // cxx2b-error {{expected ']'}} // expected-note {{'['}} \
-                                            // cxx2b-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+#pragma omp target update to(test [1, 2:]) // cxx23-error {{expected ']'}} // expected-note {{'['}} \
+                                            // cxx23-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
 
-#pragma omp target update to(test[1, 2 ::]) // cxx2b-error {{expected ']'}} // expected-note {{'['}} \
-                                            // cxx2b-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+#pragma omp target update to(test[1, 2 ::]) // cxx23-error {{expected ']'}} // expected-note {{'['}} \
+                                            // cxx23-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
 
-#pragma omp target update to(test[]) // cxx2b-error {{type 'int[10]' does not provide a subscript operator}} \
-                                            // cxx2b-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
+#pragma omp target update to(test[]) // cxx23-error {{type 'int[10]' does not provide a subscript operator}} \
+                                            // cxx23-error {{expected at least one 'to' clause or 'from' clause specified to '#pragma omp target update'}}
   S s;
   (void)s[0];
   (void)s[];

diff  --git a/clang/test/Parser/cxx-concepts-requires-clause.cpp b/clang/test/Parser/cxx-concepts-requires-clause.cpp
index e4bdd28f61ec1..1ec1eefa12865 100644
--- a/clang/test/Parser/cxx-concepts-requires-clause.cpp
+++ b/clang/test/Parser/cxx-concepts-requires-clause.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify
-// RUN: %clang_cc1 -std=c++2b -x c++ %s -verify
+// RUN: %clang_cc1 -std=c++20 -x c++ %s -verify
+// RUN: %clang_cc1 -std=c++23 -x c++ %s -verify
 
 // Test parsing of the optional requires-clause in a template-declaration.
 
@@ -166,5 +166,5 @@ auto lambda3 = []<auto> requires(sizeof(char) == 1){};
 
 auto lambda4 = [] requires(sizeof(char) == 1){}; // expected-error {{expected body of lambda expression}}
 #if __cplusplus <= 202002L
-// expected-warning at -2{{lambda without a parameter clause is a C++2b extension}}
+// expected-warning at -2{{lambda without a parameter clause is a C++23 extension}}
 #endif

diff  --git a/clang/test/Parser/cxx0x-lambda-expressions.cpp b/clang/test/Parser/cxx0x-lambda-expressions.cpp
index 00a9b70ccd016..72b315a497c06 100644
--- a/clang/test/Parser/cxx0x-lambda-expressions.cpp
+++ b/clang/test/Parser/cxx0x-lambda-expressions.cpp
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify -std=c++11 -Wno-c99-designator %s
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify -std=c++2a -Wno-c99-designator %s
-// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify -std=c++2b -Wno-c99-designator %s
+// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify -std=c++20 -Wno-c99-designator %s
+// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify -std=c++23 -Wno-c99-designator %s
 
 enum E { e };
 
@@ -31,8 +31,8 @@ class C {
     [] -> int { return 0; };
     [] mutable -> int { return 0; };
 #if __cplusplus <= 202002L
-    // expected-warning at -3 {{lambda without a parameter clause is a C++2b extension}}
-    // expected-warning at -3 {{is a C++2b extension}}
+    // expected-warning at -3 {{lambda without a parameter clause is a C++23 extension}}
+    // expected-warning at -3 {{is a C++23 extension}}
 #endif
     [](int) -> {}; // PR13652 expected-error {{expected a type}}
     return 1;
@@ -108,7 +108,7 @@ class C {
   void attributes() {
     [] __attribute__((noreturn)){};
 #if __cplusplus <= 202002L
-    // expected-warning at -2 {{is a C++2b extension}}
+    // expected-warning at -2 {{is a C++23 extension}}
 #endif
     []() [[]]
       mutable {}; // expected-error {{expected body of lambda expression}}
@@ -128,17 +128,17 @@ class C {
     // rather than the type.
     [][[]](){};
 #if __cplusplus <= 202002L
-    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++2b extension}}
+    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++23 extension}}
 #endif
 #if __cplusplus > 201703L
     []<typename>[[]](){};
 #if __cplusplus <= 202002L
-    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++2b extension}}
+    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++23 extension}}
 #endif
 #endif
     [][[]]{};
 #if __cplusplus <= 202002L
-    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++2b extension}}
+    // expected-warning at -2 {{an attribute specifier sequence in this position is a C++23 extension}}
 #endif
   }
 
@@ -146,8 +146,8 @@ class C {
     [] mutable {};
     [] noexcept {};
 #if __cplusplus <= 202002L
-    // expected-warning at -3 {{is a C++2b extension}}
-    // expected-warning at -3 {{is a C++2b extension}}
+    // expected-warning at -3 {{is a C++23 extension}}
+    // expected-warning at -3 {{is a C++23 extension}}
 #endif
   }
 };

diff  --git a/clang/test/Parser/cxx1z-constexpr-lambdas.cpp b/clang/test/Parser/cxx1z-constexpr-lambdas.cpp
index 0c2f81d318a14..87584ee5ca91b 100644
--- a/clang/test/Parser/cxx1z-constexpr-lambdas.cpp
+++ b/clang/test/Parser/cxx1z-constexpr-lambdas.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b %s -verify
+// RUN: %clang_cc1 -std=c++23 %s -verify
 // RUN: %clang_cc1 -std=c++20 %s -verify
 // RUN: %clang_cc1 -std=c++17 %s -verify
 // RUN: %clang_cc1 -std=c++14 %s -verify
@@ -9,7 +9,7 @@ auto XL0 = [] constexpr { return true; };
 // expected-warning at -2 {{is a C++17 extension}}
 #endif
 #if __cplusplus <= 202002L
-// expected-warning at -5 {{lambda without a parameter clause is a C++2b extension}}
+// expected-warning at -5 {{lambda without a parameter clause is a C++23 extension}}
 #endif
 auto XL1 = []() mutable //
     mutable             // expected-error{{cannot appear multiple times}}

diff  --git a/clang/test/Parser/cxx2a-template-lambdas.cpp b/clang/test/Parser/cxx2a-template-lambdas.cpp
index f85280f7ece50..5cf1a862d878c 100644
--- a/clang/test/Parser/cxx2a-template-lambdas.cpp
+++ b/clang/test/Parser/cxx2a-template-lambdas.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b %s -verify
-// RUN: %clang_cc1 -std=c++2a %s -verify
+// RUN: %clang_cc1 -std=c++23 %s -verify
+// RUN: %clang_cc1 -std=c++20 %s -verify
 
 auto L0 = []<> { }; //expected-error {{cannot be empty}}
 
@@ -14,14 +14,14 @@ auto L6 = []<auto>{};
 auto L7 = []<auto>() noexcept {};
 auto L8 = []<auto> noexcept {};
 #if __cplusplus <= 202002L
-// expected-warning at -2 {{lambda without a parameter clause is a C++2b extension}}
+// expected-warning at -2 {{lambda without a parameter clause is a C++23 extension}}
 #endif
 auto L9 = []<auto> requires true {};
 auto L10 = []<auto> requires true(){};
 auto L11 = []<auto> requires true() noexcept {};
 auto L12 = []<auto> requires true noexcept {};
 #if __cplusplus <= 202002L
-// expected-warning at -2 {{is a C++2b extension}}
+// expected-warning at -2 {{is a C++23 extension}}
 #endif
 auto L13 = []<auto>() noexcept requires true {};
 auto L14 = []<auto> requires true() noexcept requires true {};
@@ -29,6 +29,6 @@ auto L14 = []<auto> requires true() noexcept requires true {};
 auto XL0 = []<auto> noexcept requires true {};               // expected-error {{expected body of lambda expression}}
 auto XL1 = []<auto> requires true noexcept requires true {}; // expected-error {{expected body}}
 #if __cplusplus <= 202002L
-// expected-warning at -3 {{is a C++2b extension}}
-// expected-warning at -3 {{is a C++2b extension}}
+// expected-warning at -3 {{is a C++23 extension}}
+// expected-warning at -3 {{is a C++23 extension}}
 #endif

diff  --git a/clang/test/Parser/cxx2b-auto-x.cpp b/clang/test/Parser/cxx2b-auto-x.cpp
index 28687dced5445..5ca11d5f39950 100644
--- a/clang/test/Parser/cxx2b-auto-x.cpp
+++ b/clang/test/Parser/cxx2b-auto-x.cpp
@@ -1,14 +1,14 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx2b -std=c++2b -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx23 -std=c++23 -Wpre-c++23-compat %s
 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx20 -std=c++20 %s
 
 void looks_like_decltype_auto() {
   decltype(auto(42)) b = 42; // cxx20-error {{'auto' not allowed here}} \
-                                cxx2b-warning {{'auto' as a functional-style cast is incompatible with C++ standards before C++2b}}
+                                cxx23-warning {{'auto' as a functional-style cast is incompatible with C++ standards before C++23}}
   decltype(long *) a = 42;   // expected-error {{expected '(' for function-style cast or type construction}} \
                                 expected-error {{expected expression}}
   decltype(auto *) a = 42;   // expected-error {{expected '(' for function-style cast or type construction}} \
                                 expected-error {{expected expression}}
-  decltype(auto()) c = 42;   // cxx2b-error {{initializer for functional-style cast to 'auto' is empty}} \
+  decltype(auto()) c = 42;   // cxx23-error {{initializer for functional-style cast to 'auto' is empty}} \
                                 cxx20-error {{'auto' not allowed here}}
 }
 

diff  --git a/clang/test/Parser/cxx2b-init-statement.cpp b/clang/test/Parser/cxx2b-init-statement.cpp
index 8f99b46edeb65..4986b402bf51d 100644
--- a/clang/test/Parser/cxx2b-init-statement.cpp
+++ b/clang/test/Parser/cxx2b-init-statement.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=expected -std=c++2b -Wall %s
+// RUN: %clang_cc1 -fsyntax-only -verify=expected -std=c++23 -Wall %s
 // RUN: %clang_cc1 -fsyntax-only -verify=expected,expected-cxx20 -std=c++20 -Wall %s
 
 namespace ns {
@@ -7,13 +7,13 @@ namespace ns {
 }
 void f() {
 
-    for (using foo = int;true;); //expected-cxx20-warning {{alias declaration in this context is a C++2b extension}}
+    for (using foo = int;true;); //expected-cxx20-warning {{alias declaration in this context is a C++23 extension}}
 
-    switch(using foo = int; 0) { //expected-cxx20-warning {{alias declaration in this context is a C++2b extension}}
+    switch(using foo = int; 0) { //expected-cxx20-warning {{alias declaration in this context is a C++23 extension}}
         case 0: break;
     }
 
-    if(using foo = int; false) {} //expected-cxx20-warning {{alias declaration in this context is a C++2b extension}}
+    if(using foo = int; false) {} //expected-cxx20-warning {{alias declaration in this context is a C++23 extension}}
 
 
     if (using enum ns::e; false){}  // expected-error {{expected '='}}

diff  --git a/clang/test/Parser/cxx2b-label.cpp b/clang/test/Parser/cxx2b-label.cpp
index 2560c8d71b982..a490370409cc0 100644
--- a/clang/test/Parser/cxx2b-label.cpp
+++ b/clang/test/Parser/cxx2b-label.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx2b -std=c++2b -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx23 -std=c++23 -Wpre-c++23-compat %s
 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx20 -std=c++20 %s
 
 void test_label_in_func() {
@@ -7,8 +7,8 @@ void test_label_in_func() {
 label2:
     x = 1;
 label3: label4: label5:
-} // cxx20-warning {{label at end of compound statement is a C++2b extension}} \
-     cxx2b-warning {{label at end of compound statement is incompatible with C++ standards before C++2b}}
+} // cxx20-warning {{label at end of compound statement is a C++23 extension}} \
+     cxx23-warning {{label at end of compound statement is incompatible with C++ standards before C++23}}
 
 int test_label_in_switch(int v) {
     switch (v) {
@@ -17,15 +17,15 @@ int test_label_in_switch(int v) {
     case 2:
         return 2;
     case 3: case 4: case 5:
-    } // cxx20-warning {{label at end of compound statement is a C++2b extension}} \
-         cxx2b-warning {{label at end of compound statement is incompatible with C++ standards before C++2b}}
+    } // cxx20-warning {{label at end of compound statement is a C++23 extension}} \
+         cxx23-warning {{label at end of compound statement is incompatible with C++ standards before C++23}}
 
     switch (v) {
     case 6:
         return 6;
     default:
-    } // cxx20-warning {{label at end of compound statement is a C++2b extension}} \
-         cxx2b-warning {{label at end of compound statement is incompatible with C++ standards before C++2b}}
+    } // cxx20-warning {{label at end of compound statement is a C++23 extension}} \
+         cxx23-warning {{label at end of compound statement is incompatible with C++ standards before C++23}}
 
     return 0;
 }

diff  --git a/clang/test/Parser/cxx2b-lambdas-ext-warns.cpp b/clang/test/Parser/cxx2b-lambdas-ext-warns.cpp
index 3a80f59aba565..7ffb7aae9d391 100644
--- a/clang/test/Parser/cxx2b-lambdas-ext-warns.cpp
+++ b/clang/test/Parser/cxx2b-lambdas-ext-warns.cpp
@@ -1,16 +1,16 @@
 // RUN: %clang_cc1 -std=c++20 %s -verify=cxx20
-// RUN: %clang_cc1 -std=c++2b %s -verify=cxx2b
-// RUN: %clang_cc1 -std=c++2b -Wpre-c++2b-compat %s -verify=precxx2b
-// RUN: %clang_cc1 -std=c++2b -pedantic %s -verify=cxx2b
+// RUN: %clang_cc1 -std=c++23 %s -verify=cxx23
+// RUN: %clang_cc1 -std=c++23 -Wpre-c++23-compat %s -verify=precxx23
+// RUN: %clang_cc1 -std=c++23 -pedantic %s -verify=cxx23
 
-//cxx2b-no-diagnostics
+//cxx23-no-diagnostics
 
 auto L1 = [] constexpr {};
-// cxx20-warning at -1 {{lambda without a parameter clause is a C++2b extension}}
+// cxx20-warning at -1 {{lambda without a parameter clause is a C++23 extension}}
 auto L2 = []() static {};
-// cxx20-warning at -1 {{static lambdas are a C++2b extension}}
-// precxx2b-warning at -2 {{static lambdas are incompatible with C++ standards before C++2b}}
+// cxx20-warning at -1 {{static lambdas are a C++23 extension}}
+// precxx23-warning at -2 {{static lambdas are incompatible with C++ standards before C++23}}
 auto L3 = [] static {};
-// cxx20-warning at -1 {{lambda without a parameter clause is a C++2b extension}}
-// cxx20-warning at -2 {{static lambdas are a C++2b extension}}
-// precxx2b-warning at -3 {{static lambdas are incompatible with C++ standards before C++2b}}
+// cxx20-warning at -1 {{lambda without a parameter clause is a C++23 extension}}
+// cxx20-warning at -2 {{static lambdas are a C++23 extension}}
+// precxx23-warning at -3 {{static lambdas are incompatible with C++ standards before C++23}}

diff  --git a/clang/test/Parser/cxx2b-lambdas.cpp b/clang/test/Parser/cxx2b-lambdas.cpp
index 2de4b6593cd3c..bb9ed226afffa 100644
--- a/clang/test/Parser/cxx2b-lambdas.cpp
+++ b/clang/test/Parser/cxx2b-lambdas.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b %s -verify
+// RUN: %clang_cc1 -std=c++23 %s -verify
 
 auto LL0 = [] {};
 auto LL1 = []() {};

diff  --git a/clang/test/Parser/cxx2b-subscript.cpp b/clang/test/Parser/cxx2b-subscript.cpp
index c56df48a379d9..478bf36272e37 100644
--- a/clang/test/Parser/cxx2b-subscript.cpp
+++ b/clang/test/Parser/cxx2b-subscript.cpp
@@ -1,34 +1,34 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx2b -std=c++2b %s
+// RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx23 -std=c++23 %s
 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx20 -std=c++20 %s
 
-//cxx2b-no-diagnostics
+//cxx23-no-diagnostics
 
 struct S {
   constexpr int operator[](int i) {
     return i;
   }
-  constexpr int operator[](int a, int b) { // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++2b}}
+  constexpr int operator[](int a, int b) { // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++23}}
     return a + b;
   }
-  constexpr int operator[]() { // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++2b}}
+  constexpr int operator[]() { // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++23}}
     return 42;
   }
 };
 
 struct Defaults {
-  constexpr int operator[](int i = 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++2b}}
+  constexpr int operator[](int i = 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++23}}
     return 0;
   }
-  constexpr int operator[](int a, int b, int c = 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++2b}}\
-                                                         // cxx20-error {{cannot have more than one parameter before C++2b}}
+  constexpr int operator[](int a, int b, int c = 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++23}}\
+                                                         // cxx20-error {{cannot have more than one parameter before C++23}}
     return 0;
   }
 };
 
 template <typename... T>
 struct T1 {
-  constexpr auto operator[](T &&...arg); // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++2b}} \
-                                           // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++2b}}
+  constexpr auto operator[](T &&...arg); // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++23}} \
+                                           // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++23}}
 };
 
 T1<> t10;         // cxx20-note {{requested here}}
@@ -43,16 +43,16 @@ void f() {
   S s;
   (void)s[0];
   (void)s[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
-                   // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++2b}}
+                   // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}
   (void)S{}[];   // cxx20-error {{expected expression}}
 
   (void)Defaults{}[1];
   (void)Defaults{}[];     // cxx20-error {{expected expression}}
   (void)Defaults{}[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
-                            // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++2b}}
+                            // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}
 
   Variadic{}[]; // cxx20-error {{expected expression}}
   Variadic{}[1];
   Variadic{}[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
-                       // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++2b}}
+                       // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}
 }

diff  --git a/clang/test/Parser/switch-recovery.cpp b/clang/test/Parser/switch-recovery.cpp
index f422a8757d963..861e520ec4465 100644
--- a/clang/test/Parser/switch-recovery.cpp
+++ b/clang/test/Parser/switch-recovery.cpp
@@ -161,14 +161,14 @@ void missing_statement_case(int x) {
   switch (x) {
     case 1:
     case 0:
-  } // expected-warning {{label at end of compound statement is a C++2b extension}}
+  } // expected-warning {{label at end of compound statement is a C++23 extension}}
 }
 
 void missing_statement_default(int x) {
   switch (x) {
     case 0:
     default:
-  } // expected-warning {{label at end of compound statement is a C++2b extension}}
+  } // expected-warning {{label at end of compound statement is a C++23 extension}}
 }
 
 void pr19022_1() {
@@ -179,7 +179,7 @@ void pr19022_1() {
 void pr19022_1a(int x) {
   switch(x) {
   case 1  // expected-error{{expected ':' after 'case'}}
-  } // expected-warning {{label at end of compound statement is a C++2b extension}}
+  } // expected-warning {{label at end of compound statement is a C++23 extension}}
 }
 
 void pr19022_1b(int x) {
@@ -211,7 +211,7 @@ void pr19022_5(int x) {
   switch(x) {
   case 1: case // expected-error{{expected ':' after 'case'}}
   }  // expected-error{{expected expression}} \
-     // expected-warning {{label at end of compound statement is a C++2b extension}}
+     // expected-warning {{label at end of compound statement is a C++23 extension}}
 }
 
 namespace pr19022 {

diff  --git a/clang/test/Preprocessor/ext-pp-directive.c b/clang/test/Preprocessor/ext-pp-directive.c
index 97454b4d9002a..a3d74143dfbc6 100644
--- a/clang/test/Preprocessor/ext-pp-directive.c
+++ b/clang/test/Preprocessor/ext-pp-directive.c
@@ -6,11 +6,11 @@
 // RUN: not %clang_cc1 -std=c2x -fsyntax-only -verify %s
 
 // For C++
-// RUN: %clang_cc1 -x c++ -fsyntax-only -verify=pre-cpp2b-pedantic -pedantic %s
-// RUN: %clang_cc1 -x c++ -std=c++2b -fsyntax-only -verify=pre-cpp2b-compat -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -x c++ -fsyntax-only -verify=pre-cpp23-pedantic -pedantic %s
+// RUN: %clang_cc1 -x c++ -std=c++23 -fsyntax-only -verify=pre-cpp23-compat -Wpre-c++23-compat %s
 // RUN: not %clang_cc1 -x c++ -fsyntax-only -verify %s
-// RUN: not %clang_cc1 -x c++ -std=c++2b -fsyntax-only -verify -pedantic %s
-// RUN: not %clang_cc1 -x c++ -std=c++2b -fsyntax-only -verify %s
+// RUN: not %clang_cc1 -x c++ -std=c++23 -fsyntax-only -verify -pedantic %s
+// RUN: not %clang_cc1 -x c++ -std=c++23 -fsyntax-only -verify %s
 
 int x;
 
@@ -22,8 +22,8 @@ int x;
 // pre-c2x-compat-warning@#1 {{use of a '#elifdef' directive is incompatible with C standards before C2x}}
 
 // For C++
-// pre-cpp2b-pedantic-warning@#1 {{use of a '#elifdef' directive is a C++2b extension}}
-// pre-cpp2b-compat-warning@#1 {{use of a '#elifdef' directive is incompatible with C++ standards before C++2b}}
+// pre-cpp23-pedantic-warning@#1 {{use of a '#elifdef' directive is a C++23 extension}}
+// pre-cpp23-compat-warning@#1 {{use of a '#elifdef' directive is incompatible with C++ standards before C++23}}
 
 #if 1
 #elifndef B // #2
@@ -33,8 +33,8 @@ int x;
 // pre-c2x-compat-warning@#2 {{use of a '#elifndef' directive is incompatible with C standards before C2x}}
 
 // For C++
-// pre-cpp2b-pedantic-warning@#2 {{use of a '#elifndef' directive is a C++2b extension}}
-// pre-cpp2b-compat-warning@#2 {{use of a '#elifndef' directive is incompatible with C++ standards before C++2b}}
+// pre-cpp23-pedantic-warning@#2 {{use of a '#elifndef' directive is a C++23 extension}}
+// pre-cpp23-compat-warning@#2 {{use of a '#elifndef' directive is incompatible with C++ standards before C++23}}
 
 #if 0
 #elifdef C
@@ -44,8 +44,8 @@ int x;
 // pre-c2x-compat-warning at -4 {{use of a '#elifdef' directive is incompatible with C standards before C2x}}
 
 // For C++
-// pre-cpp2b-pedantic-warning at -7 {{use of a '#elifdef' directive is a C++2b extension}}
-// pre-cpp2b-compat-warning at -8 {{use of a '#elifdef' directive is incompatible with C++ standards before C++2b}}
+// pre-cpp23-pedantic-warning at -7 {{use of a '#elifdef' directive is a C++23 extension}}
+// pre-cpp23-compat-warning at -8 {{use of a '#elifdef' directive is incompatible with C++ standards before C++23}}
 
 #if 0
 #elifndef D
@@ -55,8 +55,8 @@ int x;
 // pre-c2x-compat-warning at -4 {{use of a '#elifndef' directive is incompatible with C standards before C2x}}
 
 // For C++
-// pre-cpp2b-pedantic-warning at -7 {{use of a '#elifndef' directive is a C++2b extension}}
-// pre-cpp2b-compat-warning at -8 {{use of a '#elifndef' directive is incompatible with C++ standards before C++2b}}
+// pre-cpp23-pedantic-warning at -7 {{use of a '#elifndef' directive is a C++23 extension}}
+// pre-cpp23-compat-warning at -8 {{use of a '#elifndef' directive is incompatible with C++ standards before C++23}}
 
 #warning foo
 // For C
@@ -66,7 +66,7 @@ int x;
 // pre-c2x-compat-warning at -5 {{foo}}
 
 // For C++
-// pre-cpp2b-pedantic-warning at -8 {{#warning is a C++2b extension}}
-// pre-cpp2b-pedantic-warning at -9 {{foo}}
-// pre-cpp2b-compat-warning at -10 {{#warning is incompatible with C++ standards before C++2b}}
-// pre-cpp2b-compat-warning at -11 {{foo}}
+// pre-cpp23-pedantic-warning at -8 {{#warning is a C++23 extension}}
+// pre-cpp23-pedantic-warning at -9 {{foo}}
+// pre-cpp23-compat-warning at -10 {{#warning is incompatible with C++ standards before C++23}}
+// pre-cpp23-compat-warning at -11 {{foo}}

diff  --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index 46f79414fb7c3..f4d4a5793b080 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -9,7 +9,7 @@
 // BLOCKS:#define __block __attribute__((__blocks__(byref)))
 //
 //
-// RUN: %clang_cc1 -x c++ -fgnuc-version=4.2.1 -std=c++2b -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix CXX2B %s
+// RUN: %clang_cc1 -x c++ -fgnuc-version=4.2.1 -std=c++23 -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix CXX2B %s
 //
 // CXX2B:#define __GNUG__ 4
 // CXX2B:#define __GXX_EXPERIMENTAL_CXX0X__ 1
@@ -133,7 +133,7 @@
 // RUN: %clang_cc1 -ffreestanding -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix FREESTANDING %s
 // FREESTANDING:#define __STDC_HOSTED__ 0
 //
-// RUN: %clang_cc1 -x c++ -fgnuc-version=4.2.1 -std=gnu++2b -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix GXX2B %s
+// RUN: %clang_cc1 -x c++ -fgnuc-version=4.2.1 -std=gnu++23 -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix GXX2B %s
 //
 // GXX2B:#define __GNUG__ 4
 // GXX2B:#define __GXX_WEAK__ 1

diff  --git a/clang/test/Preprocessor/macro_vaopt_check.cpp b/clang/test/Preprocessor/macro_vaopt_check.cpp
index d0469d7e884cf..28f92fc17c6c5 100644
--- a/clang/test/Preprocessor/macro_vaopt_check.cpp
+++ b/clang/test/Preprocessor/macro_vaopt_check.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++2b-extensions -pedantic -std=c++20
-// RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++2b-extensions -pedantic -std=c++11
+// RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++23-extensions -pedantic -std=c++20
+// RUN: %clang_cc1 %s -Eonly -verify -Wno-all -Wno-c++23-extensions -pedantic -std=c++11
 // RUN: %clang_cc1 -x c %s -Eonly -verify -Wno-all -Wno-c2x-extensions -pedantic -std=c99
 
 //expected-error at +1{{missing '('}}

diff  --git a/clang/test/Preprocessor/predefined-win-macros.c b/clang/test/Preprocessor/predefined-win-macros.c
index 4497d14c6a5ef..1ac249550a489 100644
--- a/clang/test/Preprocessor/predefined-win-macros.c
+++ b/clang/test/Preprocessor/predefined-win-macros.c
@@ -52,7 +52,7 @@
 // CHECK-MS-CPP20: #define _MSVC_LANG 202002L
 
 // RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \
-// RUN:     -fms-compatibility-version=19.00 -std=c++2b -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP2B
+// RUN:     -fms-compatibility-version=19.00 -std=c++23 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS-CPP2B
 // CHECK-MS-CPP2B: #define _MSC_VER 1900
 // CHECK-MS-CPP2B: #define _MSVC_LANG 202004L
 

diff  --git a/clang/test/Preprocessor/suggest-typoed-directive.c b/clang/test/Preprocessor/suggest-typoed-directive.c
index cc15efee09e1c..c7130ad8031ca 100644
--- a/clang/test/Preprocessor/suggest-typoed-directive.c
+++ b/clang/test/Preprocessor/suggest-typoed-directive.c
@@ -1,19 +1,19 @@
-// RUN: %clang_cc1 -fsyntax-only -verify=pre-c2x-cpp2b %s
-// RUN: %clang_cc1 -std=c2x -fsyntax-only -verify=c2x-cpp2b %s
-// RUN: %clang_cc1 -x c++ -std=c++2b -fsyntax-only -verify=c2x-cpp2b %s
-// RUN: %clang_cc1 -x c++ -std=c++2b -fsyntax-only %s -fdiagnostics-parseable-fixits 2>&1 | FileCheck %s
+// RUN: %clang_cc1 -fsyntax-only -verify=pre-c2x-cpp23 %s
+// RUN: %clang_cc1 -std=c2x -fsyntax-only -verify=c2x-cpp23 %s
+// RUN: %clang_cc1 -x c++ -std=c++23 -fsyntax-only -verify=c2x-cpp23 %s
+// RUN: %clang_cc1 -x c++ -std=c++23 -fsyntax-only %s -fdiagnostics-parseable-fixits 2>&1 | FileCheck %s
 
-// id:        pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#if'?}}
-// ifd:       pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#if'?}}
-// ifde:      pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#ifdef'?}}
-// elf:       pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
-// elsif:     pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
-// elseif:    pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// id:        pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#if'?}}
+// ifd:       pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#if'?}}
+// ifde:      pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#ifdef'?}}
+// elf:       pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// elsif:     pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// elseif:    pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#elif'?}}
 // elfidef:   not suggested to '#elifdef'
 // elfindef:  not suggested to '#elifdef'
 // elfinndef: not suggested to '#elifndef'
-// els:       pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#else'?}}
-// endi:      pre-c2x-cpp2b-warning at +12 {{invalid preprocessing directive, did you mean '#endif'?}}
+// els:       pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#else'?}}
+// endi:      pre-c2x-cpp23-warning at +12 {{invalid preprocessing directive, did you mean '#endif'?}}
 #ifdef UNDEFINED
 #id
 #ifd
@@ -27,17 +27,17 @@
 #els
 #endi
 #endif
-// id:        c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#if'?}}
-// ifd:       c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#if'?}}
-// ifde:      c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#ifdef'?}}
-// elf:       c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
-// elsif:     c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
-// elseif:    c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
-// elfidef:   c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elifdef'?}}
-// elfindef:  c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elifdef'?}}
-// elfinndef: c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#elifndef'?}}
-// els:       c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#else'?}}
-// endi:      c2x-cpp2b-warning at -12 {{invalid preprocessing directive, did you mean '#endif'?}}
+// id:        c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#if'?}}
+// ifd:       c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#if'?}}
+// ifde:      c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#ifdef'?}}
+// elf:       c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// elsif:     c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// elseif:    c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elif'?}}
+// elfidef:   c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elifdef'?}}
+// elfindef:  c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elifdef'?}}
+// elfinndef: c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#elifndef'?}}
+// els:       c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#else'?}}
+// endi:      c2x-cpp23-warning at -12 {{invalid preprocessing directive, did you mean '#endif'?}}
 
 // CHECK: fix-it:{{.*}}:{[[@LINE-24]]:2-[[@LINE-24]]:4}:"if"
 // CHECK: fix-it:{{.*}}:{[[@LINE-24]]:2-[[@LINE-24]]:5}:"if"

diff  --git a/clang/test/Preprocessor/ucn-pp-identifier.c b/clang/test/Preprocessor/ucn-pp-identifier.c
index c47ed21ff3158..e1bcdfdcaa364 100644
--- a/clang/test/Preprocessor/ucn-pp-identifier.c
+++ b/clang/test/Preprocessor/ucn-pp-identifier.c
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 %s -fsyntax-only -std=c99 -pedantic -verify=expected,ext -Wundef -DTRIGRAPHS=1
 // RUN: %clang_cc1 %s -fsyntax-only -x c++ -pedantic -verify=expected,ext -Wundef -fno-trigraphs
-// RUN: %clang_cc1 %s -fsyntax-only -x c++ -std=c++2b -pedantic -ftrigraphs -DTRIGRAPHS=1 -verify=expected,cxx2b -Wundef -Wpre-c++2b-compat
+// RUN: %clang_cc1 %s -fsyntax-only -x c++ -std=c++23 -pedantic -ftrigraphs -DTRIGRAPHS=1 -verify=expected,cxx23 -Wundef -Wpre-c++23-compat
 // RUN: %clang_cc1 %s -fsyntax-only -x c++ -pedantic -verify=expected,ext -Wundef -ftrigraphs -DTRIGRAPHS=1
 // RUN: not %clang_cc1 %s -fsyntax-only -std=c99 -pedantic -Wundef 2>&1 | FileCheck -strict-whitespace %s
 
@@ -18,7 +18,7 @@
 #error "This should never happen"
 #endif
 
-#if a\u{FD}() // ext-warning {{extension}} cxx2b-warning {{before C++2b}}
+#if a\u{FD}() // ext-warning {{extension}} cxx23-warning {{before C++23}}
 #error "This should never happen"
 #endif
 
@@ -34,12 +34,12 @@
 #define \U10000000      // expected-error {{macro name must be an identifier}}
 #define \u0061          // expected-error {{character 'a' cannot be specified by a universal character name}} expected-error {{macro name must be an identifier}}
 #define \u{fffe}        // expected-error {{macro name must be an identifier}} \
-                        // ext-warning {{extension}} cxx2b-warning {{before C++2b}}
+                        // ext-warning {{extension}} cxx23-warning {{before C++23}}
 #define \N{ALERT}       // expected-error {{universal character name refers to a control character}} \
                    // expected-error {{macro name must be an identifier}} \
-                   // ext-warning {{extension}} cxx2b-warning {{before C++2b}}
+                   // ext-warning {{extension}} cxx23-warning {{before C++23}}
 #define \N{WASTEBASKET} // expected-error {{macro name must be an identifier}} \
-                        // ext-warning {{extension}} cxx2b-warning {{before C++2b}}
+                        // ext-warning {{extension}} cxx23-warning {{before C++23}}
 #define a\u0024
 
 #if \u0110 // expected-warning {{is not defined, evaluates to 0}}
@@ -141,10 +141,10 @@ int CONCAT(\N{GREEK
 
 int \N{\
 LATIN CAPITAL LETTER A WITH GRAVE};
-//ext-warning at -2 {{extension}} cxx2b-warning at -2 {{before C++2b}}
+//ext-warning at -2 {{extension}} cxx23-warning at -2 {{before C++23}}
 
 #ifdef TRIGRAPHS
-int \N??<GREEK CAPITAL LETTER ALPHA??> = 0; // cxx2b-warning {{before C++2b}} \
+int \N??<GREEK CAPITAL LETTER ALPHA??> = 0; // cxx23-warning {{before C++23}} \
                                             //ext-warning {{extension}}\
                                             // expected-warning 2{{trigraph converted}}
 

diff  --git a/clang/test/Sema/gnu-asm-pmf.cpp b/clang/test/Sema/gnu-asm-pmf.cpp
index 30677c85696df..3758dbc992da9 100644
--- a/clang/test/Sema/gnu-asm-pmf.cpp
+++ b/clang/test/Sema/gnu-asm-pmf.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -std=c++2b -fsyntax-only %s -verify
-// RUN: %clang_cc1 -triple x86_64-unknown-windows-itanium -std=c++2b -fsyntax-only %s -verify
+// RUN: %clang_cc1 -triple x86_64-unknown-windows-msvc -std=c++23 -fsyntax-only %s -verify
+// RUN: %clang_cc1 -triple x86_64-unknown-windows-itanium -std=c++23 -fsyntax-only %s -verify
 
 struct S {
   void operator()();

diff  --git a/clang/test/Sema/stmtexpr-init.c b/clang/test/Sema/stmtexpr-init.c
index 73c87e0d4b726..4ad31adecf20a 100644
--- a/clang/test/Sema/stmtexpr-init.c
+++ b/clang/test/Sema/stmtexpr-init.c
@@ -6,7 +6,7 @@ void T1(void) {
   int *x[1] = {({ static int _x = 10; &_x; })}; // expected-no-error
 
   /* Before commit
-     683e83c5 [Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr
+     683e83c5 [Clang][C++23] P2242R3: Non-literal variables [...] in constexpr
      (i.e in clang-14 and earlier)
      this was silently accepted, but generated incorrect code.
   */

diff  --git a/clang/test/SemaCXX/P1155.cpp b/clang/test/SemaCXX/P1155.cpp
index 6dcbaa750557d..87f71ca3bd76c 100644
--- a/clang/test/SemaCXX/P1155.cpp
+++ b/clang/test/SemaCXX/P1155.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -fcxx-exceptions -verify %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -fcxx-exceptions -verify %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only -fcxx-exceptions -verify %s
 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions -verify %s
 // expected-no-diagnostics

diff  --git a/clang/test/SemaCXX/constant-expression-cxx11.cpp b/clang/test/SemaCXX/constant-expression-cxx11.cpp
index 5e7a80c81eaee..fa9ad786b289e 100644
--- a/clang/test/SemaCXX/constant-expression-cxx11.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx11.cpp
@@ -1,12 +1,12 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx20_2b,cxx2b    -triple x86_64-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -Wno-c99-designator -fcxx-exceptions -pedantic %s -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx11_20,cxx20_2b -triple x86_64-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -Wno-c99-designator -fcxx-exceptions -pedantic %s -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx20_23,cxx23    -triple x86_64-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -Wno-c99-designator -fcxx-exceptions -pedantic %s -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx11_20,cxx20_23 -triple x86_64-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -Wno-c99-designator -fcxx-exceptions -pedantic %s -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion
 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify=expected,cxx11_20,cxx11    -triple x86_64-linux -Wno-string-plus-int -Wno-pointer-arith -Wno-zero-length-array -Wno-c99-designator -fcxx-exceptions -pedantic %s -Wno-comment -Wno-tautological-pointer-compare -Wno-bool-conversion
 
 namespace StaticAssertFoldTest {
 
 int x;
 static_assert(++x, "test"); // expected-error {{not an integral constant expression}}
-// cxx20_2b-note at -1 {{cannot modify an object that is visible outside that expression}}
+// cxx20_23-note at -1 {{cannot modify an object that is visible outside that expression}}
 static_assert(false, "test"); // expected-error {{test}}
 
 }
@@ -360,7 +360,7 @@ extern char externalvar[];
 constexpr bool constaddress = (void *)externalvar == (void *)0x4000UL; // expected-error {{must be initialized by a constant expression}} expected-note {{reinterpret_cast}}
 constexpr bool litaddress = "foo" == "foo"; // expected-error {{must be initialized by a constant expression}}
 // expected-note at -1 {{comparison of addresses of literals has unspecified value}}
-// cxx20_2b-warning at -2 {{comparison between two arrays is deprecated}}
+// cxx20_23-warning at -2 {{comparison between two arrays is deprecated}}
 static_assert(0 != "foo", "");
 
 }
@@ -1777,12 +1777,12 @@ namespace std { struct type_info; }
 namespace TypeId {
   struct A { virtual ~A(); };
   A f();
-  A &g(); // cxx20_2b-note {{declared here}}
+  A &g(); // cxx20_23-note {{declared here}}
   constexpr auto &x = typeid(f());
   constexpr auto &y = typeid(g()); // expected-error{{constant expression}}
   // cxx11-note at -1 {{typeid applied to expression of polymorphic type 'A' is not allowed in a constant expression}}
   // expected-warning at -2 {{expression with side effects will be evaluated despite being used as an operand to 'typeid'}}
-  // cxx20_2b-note at -3 {{non-constexpr function 'g' cannot be used in a constant expression}}
+  // cxx20_23-note at -3 {{non-constexpr function 'g' cannot be used in a constant expression}}
 }
 
 namespace PR14203 {
@@ -1921,14 +1921,14 @@ namespace VirtualFromBase {
   static_assert(p->f() == sizeof(X<S1>), "");
   // cxx11-error at -1    {{not an integral constant expression}}
   // cxx11-note at -2     {{call to virtual function}}
-  // cxx20_2b-error at -3 {{static assertion failed}}
-  // cxx20_2b-note at -4 {{8 == 16}}
+  // cxx20_23-error at -3 {{static assertion failed}}
+  // cxx20_23-note at -4 {{8 == 16}}
 
   // Non-virtual f(), OK.
   constexpr X<X<S2>> xxs2;
   constexpr X<S2> *q = const_cast<X<X<S2>>*>(&xxs2);
-  static_assert(q->f() == sizeof(S2), ""); // cxx20_2b-error {{static assertion failed}} \
-                                           // cxx20_2b-note {{16 == 8}}
+  static_assert(q->f() == sizeof(S2), ""); // cxx20_23-error {{static assertion failed}} \
+                                           // cxx20_23-note {{16 == 8}}
 }
 
 namespace ConstexprConstructorRecovery {
@@ -1954,7 +1954,7 @@ namespace Lifetime {
   }
 
   constexpr int &get(int &&n) { return n; }
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
   constexpr int &&get_rv(int &&n) { return static_cast<int&&>(n); }
   struct S {
     int &&r;
@@ -2281,13 +2281,13 @@ namespace InheritedCtor {
   constexpr D d(0); // cxx11-error {{constant expression}} cxx11-note {{derived class}}
 
   struct E : virtual A { using A::A; }; // expected-note {{here}}
-  // cxx20_2b-note at -1 {{struct with virtual base class is not a literal type}}
+  // cxx20_23-note at -1 {{struct with virtual base class is not a literal type}}
   // We wrap a function around this to avoid implicit zero-initialization
   // happening first; the zero-initialization step would produce the same
   // error and defeat the point of this test.
   void f() {
     constexpr E e(0); // cxx11-error {{constant expression}} cxx11-note {{derived class}}
-    // cxx20_2b-error at -1 {{constexpr variable cannot have non-literal type}}
+    // cxx20_23-error at -1 {{constexpr variable cannot have non-literal type}}
   }
   // FIXME: This produces a note with no source location.
   //constexpr E e(0);

diff  --git a/clang/test/SemaCXX/constant-expression-cxx14.cpp b/clang/test/SemaCXX/constant-expression-cxx14.cpp
index 9f8d8f7954b12..52a7cceea2a3f 100644
--- a/clang/test/SemaCXX/constant-expression-cxx14.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx14.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx20_2b,cxx2b          %s -fcxx-exceptions -triple=x86_64-linux-gnu
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_2b,cxx20 %s -fcxx-exceptions -triple=x86_64-linux-gnu
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx20_23,cxx23          %s -fcxx-exceptions -triple=x86_64-linux-gnu
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_23,cxx20 %s -fcxx-exceptions -triple=x86_64-linux-gnu
 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify=expected,cxx14_20,cxx14          %s -fcxx-exceptions -triple=x86_64-linux-gnu
 
 struct S {
@@ -46,12 +46,12 @@ constexpr int g(int k) {
 static_assert(g(2) == 42, "");
 constexpr int h(int n) {  // expected-error {{constexpr function never produces a constant expression}}
   static const int m = n; // expected-note {{control flows through the definition of a static variable}} \
-                          // cxx14_20-warning {{definition of a static variable in a constexpr function is a C++2b extension}}
+                          // cxx14_20-warning {{definition of a static variable in a constexpr function is a C++23 extension}}
   return m;
 }
 constexpr int i(int n) {        // expected-error {{constexpr function never produces a constant expression}}
   thread_local const int m = n; // expected-note {{control flows through the definition of a thread_local variable}} \
-                                // cxx14_20-warning {{definition of a thread_local variable in a constexpr function is a C++2b extension}}
+                                // cxx14_20-warning {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
   return m;
 }
 
@@ -229,7 +229,7 @@ namespace subobject {
     // expected-note at -2 {{assignment to member 'c' of union with active member 'n'}}
   }
   constexpr bool check(D &d) { return d.c.a.y == 3; }
-  // cxx20_2b-note at -1 {{read of member 'y' of union with active member 'x'}}
+  // cxx20_23-note at -1 {{read of member 'y' of union with active member 'x'}}
 
   constexpr bool g() { D d; f(d); return d.c.a.y == 3; }
   static_assert(g(), "");
@@ -242,7 +242,7 @@ namespace subobject {
   static_assert(i(), ""); // expected-error {{constant expression}} expected-note {{in call}}
 
   constexpr bool j() { D d; d.c.a.x = 3; return check(d); } // cxx14-note {{assignment to member 'x' of union with active member 'y'}}
-  // cxx20_2b-note at -1 {{in call to 'check(d)'}}
+  // cxx20_23-note at -1 {{in call to 'check(d)'}}
   static_assert(j(), ""); // expected-error {{constant expression}} expected-note {{in call}}
 }
 
@@ -271,12 +271,12 @@ namespace null {
 
 namespace incdec {
   template<typename T> constexpr T &ref(T &&r) { return r; }
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
   template<typename T> constexpr T postinc(T &&r) { return (r++, r); }
   template<typename T> constexpr T postdec(T &&r) { return (r--, r); }
 
   template int &ref<int>(int &&);
-  // cxx2b-note at -1  {{in instantiation of function template specialization}}
+  // cxx23-note at -1  {{in instantiation of function template specialization}}
 
   static_assert(postinc(0) == 1, "");
   static_assert(postdec(0) == -1, "");
@@ -345,7 +345,7 @@ namespace incdec {
   }
   constexpr int wrong_member = f({0}); // expected-error {{constant}} expected-note {{in call to 'f({.a = 0})'}}
   constexpr int vol = --ref<volatile int>(0); // expected-error {{constant}} expected-note {{decrement of volatile-qualified}}
-  // cxx20_2b-warning at -1 {{decrement of object of volatile-qualified type 'volatile int' is deprecated}}
+  // cxx20_23-warning at -1 {{decrement of object of volatile-qualified type 'volatile int' is deprecated}}
 
   constexpr int incr(int k) {
     int x = k;
@@ -877,7 +877,7 @@ namespace VirtualFromBase {
 
 namespace Lifetime {
   constexpr int &get(int &&r) { return r; }
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
   constexpr int f() {
     int &r = get(123);
     return r;

diff  --git a/clang/test/SemaCXX/constant-expression-cxx2b.cpp b/clang/test/SemaCXX/constant-expression-cxx2b.cpp
index e52dc1400f3d5..2ee1d48d1cd69 100644
--- a/clang/test/SemaCXX/constant-expression-cxx2b.cpp
+++ b/clang/test/SemaCXX/constant-expression-cxx2b.cpp
@@ -1,8 +1,8 @@
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx2a %s -fcxx-exceptions -triple=x86_64-linux-gnu -Wno-c++2b-extensions
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx2b %s -fcxx-exceptions -triple=x86_64-linux-gnu -Wpre-c++2b-compat
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx2a %s -fcxx-exceptions -triple=x86_64-linux-gnu -Wno-c++23-extensions
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx23 %s -fcxx-exceptions -triple=x86_64-linux-gnu -Wpre-c++23-compat
 
 struct NonLiteral { // cxx2a-note {{'NonLiteral' is not literal}} \
-                    // cxx2b-note 2{{'NonLiteral' is not literal}}
+                    // cxx23-note 2{{'NonLiteral' is not literal}}
   NonLiteral() {}
 };
 
@@ -12,42 +12,42 @@ struct Constexpr{};
 
 constexpr int f(int n) {  // expected-error {{constexpr function never produces a constant expression}}
   static const int m = n; // expected-note {{control flows through the definition of a static variable}} \
-                          // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                          // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 constexpr int g(int n) {        // expected-error {{constexpr function never produces a constant expression}}
   thread_local const int m = n; // expected-note {{control flows through the definition of a thread_local variable}} \
-                                // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                                // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int c_thread_local(int n) { // expected-error {{constexpr function never produces a constant expression}}
   static _Thread_local int m = 0;     // expected-note {{control flows through the definition of a thread_local variable}} \
-                                      // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                                      // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int gnu_thread_local(int n) { // expected-error {{constexpr function never produces a constant expression}}
   static __thread int m = 0;            // expected-note {{control flows through the definition of a thread_local variable}} \
-                                        // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                                        // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int h(int n) {  // expected-error {{constexpr function never produces a constant expression}}
   static const int m = n; // expected-note {{control flows through the definition of a static variable}} \
-                          // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                          // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return &m - &m;
 }
 constexpr int i(int n) {        // expected-error {{constexpr function never produces a constant expression}}
   thread_local const int m = n; // expected-note {{control flows through the definition of a thread_local variable}} \
-                                 // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                                 // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
   return &m - &m;
 }
 
 constexpr int j(int n) {
   if (!n)
     return 0;
-  static const int m = n; // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  static const int m = n; // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 constexpr int j0 = j(0);
@@ -55,7 +55,7 @@ constexpr int j0 = j(0);
 constexpr int k(int n) {
   if (!n)
     return 0;
-  thread_local const int m = n; // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  thread_local const int m = n; // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
 
   return m;
 }
@@ -65,7 +65,7 @@ constexpr int j_evaluated(int n) {
   if (!n)
     return 0;
   static const int m = n; // expected-note {{control flows through the definition of a static variable}} \
-                          // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                          // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
@@ -76,7 +76,7 @@ constexpr int k_evaluated(int n) {
   if (!n)
     return 0;
   thread_local const int m = n; // expected-note {{control flows through the definition of a thread_local variable}} \
-                                // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+                                // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
 
   return m;
 }
@@ -85,21 +85,21 @@ constexpr int ke = k_evaluated(1); // expected-error {{constexpr variable 'ke' m
                                    // expected-note {{in call}}
 
 constexpr int static_constexpr() {
-  static constexpr int m = 42;     // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
-  static constexpr Constexpr foo; // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  static constexpr int m = 42;     // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
+  static constexpr Constexpr foo; // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int thread_local_constexpr() {
-  thread_local constexpr int m = 42; // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
-  thread_local constexpr Constexpr foo; // cxx2b-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++2b}}
+  thread_local constexpr int m = 42; // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
+  thread_local constexpr Constexpr foo; // cxx23-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
   return m;
 }
 
 constexpr int non_literal(bool b) {
   if (!b)
     return 0;
-  NonLiteral n; // cxx2b-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++2b}}
+  NonLiteral n; // cxx23-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23}}
 }
 
 constexpr int non_literal_1 = non_literal(false);
@@ -111,7 +111,7 @@ constexpr int f(int x) {
     return 0;
   } else {
     goto test; // expected-note {{subexpression not valid in a constant expression}} \
-               // cxx2b-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++2b}}
+               // cxx23-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++23}}
   }
 test:
   return 0;
@@ -124,7 +124,7 @@ constexpr int c = f(1);
 
 constexpr int label() {
 
-test: // cxx2b-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++2b}}
+test: // cxx23-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++23}}
   return 0;
 }
 
@@ -138,14 +138,14 @@ constexpr int d = label();
 // This is to be contrasted with the test for implicitly constexpr lambdas below.
 int test_in_lambdas() {
   auto a = []() constexpr {
-    static const int m = 32; // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+    static const int m = 32; // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
     return m;
   };
 
   auto b = [](int n) constexpr {
     if (!n)
       return 0;
-    static const int m = n; // cxx2b-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++2b}}
+    static const int m = n; // cxx23-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
     return m;
   }
   (1);
@@ -155,7 +155,7 @@ int test_in_lambdas() {
       return 0;
     else
       goto test; // expected-note {{subexpression not valid in a constant expression}} \
-                 // cxx2b-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++2b}}
+                 // cxx23-warning {{use of this statement in a constexpr function is incompatible with C++ standards before C++23}}
   test:
     return 1;
   };
@@ -165,15 +165,15 @@ int test_in_lambdas() {
 
   auto non_literal = [](bool b) constexpr {
     if (!b)
-      NonLiteral n; // cxx2b-note {{non-literal type 'NonLiteral' cannot be used in a constant expression}} \
-                    // cxx2a-error {{variable of non-literal type 'NonLiteral' cannot be defined in a constexpr function before C++2b}} \
-                    // cxx2b-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++2b}}
+      NonLiteral n; // cxx23-note {{non-literal type 'NonLiteral' cannot be used in a constant expression}} \
+                    // cxx2a-error {{variable of non-literal type 'NonLiteral' cannot be defined in a constexpr function before C++23}} \
+                    // cxx23-warning {{definition of a variable of non-literal type in a constexpr function is incompatible with C++ standards before C++23}}
     return 0;
   };
 
 #if __cplusplus > 202002L
-  constexpr auto non_literal_ko = non_literal(false); // cxx2b-error {{constexpr variable 'non_literal_ko' must be initialized by a constant expression}} \
-                                                      // cxx2b-note {{in call}}
+  constexpr auto non_literal_ko = non_literal(false); // cxx23-error {{constexpr variable 'non_literal_ko' must be initialized by a constant expression}} \
+                                                      // cxx23-note {{in call}}
 
   constexpr auto non_literal_ok = non_literal(true);
 #endif
@@ -187,7 +187,7 @@ int test_lambdas_implicitly_constexpr() {
   auto b = [](int n) { // cxx2a-note 2{{declared here}}
     if (!n)
       return 0;
-    static const int m = n; // cxx2b-note {{control flows through the definition of a static variable}}
+    static const int m = n; // cxx23-note {{control flows through the definition of a static variable}}
     return m;
   };
 
@@ -197,13 +197,13 @@ int test_lambdas_implicitly_constexpr() {
 
   constexpr auto b3 = b(1); // expected-error{{constexpr variable 'b3' must be initialized by a constant expression}} \
                             // cxx2a-note {{non-constexpr function}} \
-                            // cxx2b-note {{in call}}
+                            // cxx23-note {{in call}}
 
   auto c = [](int n) { // cxx2a-note 2{{declared here}}
     if (!n)
       return 0;
     else
-      goto test; // cxx2b-note {{subexpression not valid in a constant expression}}
+      goto test; // cxx23-note {{subexpression not valid in a constant expression}}
   test:
     return 1;
   };
@@ -213,17 +213,17 @@ int test_lambdas_implicitly_constexpr() {
 
   constexpr auto c_error = c(1); // expected-error {{constexpr variable 'c_error' must be initialized by a constant expression}} \
                                  // cxx2a-note {{non-constexpr function}} \
-                                 // cxx2b-note {{in call to}}
+                                 // cxx23-note {{in call to}}
 
   auto non_literal = [](bool b) { // cxx2a-note 2{{declared here}}
     if (b)
-      NonLiteral n; // cxx2b-note {{non-literal type 'NonLiteral' cannot be used in a constant expression}}
+      NonLiteral n; // cxx23-note {{non-literal type 'NonLiteral' cannot be used in a constant expression}}
     return 0;
   };
 
   constexpr auto non_literal_ko = non_literal(true); // expected-error {{constexpr variable 'non_literal_ko' must be initialized by a constant expression}} \
                                                      // cxx2a-note {{non-constexpr function}} \
-                                                     // cxx2b-note {{in call}}
+                                                     // cxx23-note {{in call}}
 
   constexpr auto non_literal_ok = non_literal(false); // cxx2a-error {{must be initialized by a constant expression}} \
                                                       // cxx2a-note {{non-constexpr function}}
@@ -238,8 +238,8 @@ constexpr auto dependent_var_def_lambda() {
   };
 }
 
-constexpr auto non_literal_valid_in_cxx2b = dependent_var_def_lambda<NonLiteral>()(true); // \
-    // cxx2a-error {{constexpr variable 'non_literal_valid_in_cxx2b' must be initialized by a constant expression}} \
+constexpr auto non_literal_valid_in_cxx23 = dependent_var_def_lambda<NonLiteral>()(true); // \
+    // cxx2a-error {{constexpr variable 'non_literal_valid_in_cxx23' must be initialized by a constant expression}} \
     // cxx2a-note {{non-constexpr function}}
 
 
@@ -249,8 +249,8 @@ constexpr double evaluate_static_constexpr() {
       return 42;
     }
   };
-  thread_local constexpr Constexpr t; // cxx2b-warning {{before C++2b}}
-  static constexpr Constexpr s; // cxx2b-warning {{before C++2b}}
+  thread_local constexpr Constexpr t; // cxx23-warning {{before C++23}}
+  static constexpr Constexpr s; // cxx23-warning {{before C++23}}
   return t.f() + s.f();
 }
 static_assert(evaluate_static_constexpr() == 84);

diff  --git a/clang/test/SemaCXX/conversion-function.cpp b/clang/test/SemaCXX/conversion-function.cpp
index e5f7577d1489b..b6e6142d17906 100644
--- a/clang/test/SemaCXX/conversion-function.cpp
+++ b/clang/test/SemaCXX/conversion-function.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected                -triple %itanium_abi_triple -Wbind-to-temporary-copy %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected                -triple %itanium_abi_triple -Wbind-to-temporary-copy %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected                -triple %itanium_abi_triple -Wbind-to-temporary-copy %s
 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify=expected,cxx98_11,cxx11 -triple %itanium_abi_triple -Wbind-to-temporary-copy %s
 // RUN: %clang_cc1 -std=c++98 -fsyntax-only -verify=expected,cxx98_11,cxx98 -triple %itanium_abi_triple -Wbind-to-temporary-copy %s

diff  --git a/clang/test/SemaCXX/coroutines.cpp b/clang/test/SemaCXX/coroutines.cpp
index 782f4b2f63333..2292932583fff 100644
--- a/clang/test/SemaCXX/coroutines.cpp
+++ b/clang/test/SemaCXX/coroutines.cpp
@@ -1,8 +1,8 @@
 // This file contains references to sections of the Coroutines TS, which can be
 // found at http://wg21.link/coroutines.
 
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx20_2b,cxx2b    %s -fcxx-exceptions -fexceptions -Wunused-result
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_2b %s -fcxx-exceptions -fexceptions -Wunused-result
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx20_23,cxx23    %s -fcxx-exceptions -fexceptions -Wunused-result
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_23 %s -fcxx-exceptions -fexceptions -Wunused-result
 
 void no_coroutine_traits_bad_arg_await() {
   co_await a; // expected-error {{include <coroutine>}}
@@ -933,7 +933,7 @@ struct std::coroutine_traits<int, mismatch_gro_type_tag2> {
 };
 
 extern "C" int f(mismatch_gro_type_tag2) {
-  // cxx2b-error at -1 {{cannot initialize return object of type 'int' with an rvalue of type 'void *'}}
+  // cxx23-error at -1 {{cannot initialize return object of type 'int' with an rvalue of type 'void *'}}
   // cxx14_20-error at -2 {{cannot initialize return object of type 'int' with an lvalue of type 'void *'}}
   co_return; //expected-note {{function is a coroutine due to use of 'co_return' here}}
 }
@@ -1031,7 +1031,7 @@ struct await_suspend_type_test {
   // expected-error at +2 {{return type of 'await_suspend' is required to be 'void' or 'bool' (have 'bool &')}}
   // expected-error at +1 {{return type of 'await_suspend' is required to be 'void' or 'bool' (have 'bool &&')}}
   SuspendTy await_suspend(std::coroutine_handle<>);
-  // cxx20_2b-warning at -1 {{volatile-qualified return type 'const volatile bool' is deprecated}}
+  // cxx20_23-warning at -1 {{volatile-qualified return type 'const volatile bool' is deprecated}}
   void await_resume();
 };
 void test_bad_suspend() {
@@ -1053,7 +1053,7 @@ void test_bad_suspend() {
     await_suspend_type_test<bool &&> a;
     await_suspend_type_test<bool &> b;
     await_suspend_type_test<const void> c;
-    await_suspend_type_test<const volatile bool> d; // cxx20_2b-note {{in instantiation of template class}}
+    await_suspend_type_test<const volatile bool> d; // cxx20_23-note {{in instantiation of template class}}
     co_await a; // expected-note {{call to 'await_suspend' implicitly required by coroutine function here}}
     co_await b; // expected-note {{call to 'await_suspend' implicitly required by coroutine function here}}
     co_await c; // OK
@@ -1141,7 +1141,7 @@ struct TestType {
   }
 
   CoroMemberTag test_qual(int *, const float &&, volatile void *volatile) const {
-    // cxx20_2b-warning at -1 {{volatile-qualified parameter type}}
+    // cxx20_23-warning at -1 {{volatile-qualified parameter type}}
     auto TC = co_yield 0;
     static_assert(TC.MatchesArgs<const TestType &, int *, const float &&, volatile void *volatile>, "");
   }
@@ -1240,7 +1240,7 @@ struct DepTestType {
   }
 
   CoroMemberTag test_qual(int *, const float &&, volatile void *volatile) const {
-    // cxx20_2b-warning at -1 {{volatile-qualified parameter type}}
+    // cxx20_23-warning at -1 {{volatile-qualified parameter type}}
     auto TC = co_yield 0;
     static_assert(TC.template MatchesArgs<const DepTestType &, int *, const float &&, volatile void *volatile>, "");
   }

diff  --git a/clang/test/SemaCXX/cxx2a-consteval-default-params.cpp b/clang/test/SemaCXX/cxx2a-consteval-default-params.cpp
index abeb27fd03e35..8bce70608be58 100644
--- a/clang/test/SemaCXX/cxx2a-consteval-default-params.cpp
+++ b/clang/test/SemaCXX/cxx2a-consteval-default-params.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
-// RUN: %clang_cc1 -fsyntax-only -verify -std=c++2b %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++23 %s
 
 consteval int undefined();  // expected-note 4 {{declared here}}
 

diff  --git a/clang/test/SemaCXX/cxx2b-ast-print.cpp b/clang/test/SemaCXX/cxx2b-ast-print.cpp
index 58eb785a00771..a245647d2eb57 100644
--- a/clang/test/SemaCXX/cxx2b-ast-print.cpp
+++ b/clang/test/SemaCXX/cxx2b-ast-print.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -ast-print %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -ast-print %s | FileCheck %s
 
 template <template <class...> class C>
 void test_auto_expr(long long y, auto &&z) {

diff  --git a/clang/test/SemaCXX/cxx2b-consteval-if.cpp b/clang/test/SemaCXX/cxx2b-consteval-if.cpp
index 68921b3852f22..72ba58b676247 100644
--- a/clang/test/SemaCXX/cxx2b-consteval-if.cpp
+++ b/clang/test/SemaCXX/cxx2b-consteval-if.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 namespace PR52206 {
 constexpr auto f() {

diff  --git a/clang/test/SemaCXX/cxx2b-designated-initializers.cpp b/clang/test/SemaCXX/cxx2b-designated-initializers.cpp
index 3cddb5d6410ec..3774565513673 100644
--- a/clang/test/SemaCXX/cxx2b-designated-initializers.cpp
+++ b/clang/test/SemaCXX/cxx2b-designated-initializers.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify %s
 
 namespace PR61118 {
 

diff  --git a/clang/test/SemaCXX/cxx2b-init-statement.cpp b/clang/test/SemaCXX/cxx2b-init-statement.cpp
index de7dfcb80bc37..53c439fd7f571 100644
--- a/clang/test/SemaCXX/cxx2b-init-statement.cpp
+++ b/clang/test/SemaCXX/cxx2b-init-statement.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -verify -std=c++2b -Wall -Wshadow %s
+// RUN: %clang_cc1 -verify -std=c++23 -Wall -Wshadow %s
 
 void f() {
 

diff  --git a/clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp b/clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp
index 53782c61c1c53..4a39f2a699681 100644
--- a/clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp
+++ b/clang/test/SemaCXX/cxx2b-overloaded-operator-pedantic.cpp
@@ -1,11 +1,11 @@
-// RUN: %clang_cc1 -verify -std=c++2b -pedantic %s
-// RUN: %clang_cc1 -verify=compat -std=c++2b -Wpre-c++2b-compat %s
+// RUN: %clang_cc1 -verify -std=c++23 -pedantic %s
+// RUN: %clang_cc1 -verify=compat -std=c++23 -Wpre-c++23-compat %s
 
 // expected-no-diagnostics
 
 struct GH61582 {
   // We accidentally would issue this diagnostic in pedantic mode; show that we
   // only issue it when enabling the compat warnings now.
-  void operator[](int, int); // compat-warning {{overloaded 'operator[]' with more than one parameter is a C++2b extension}}
+  void operator[](int, int); // compat-warning {{overloaded 'operator[]' with more than one parameter is a C++23 extension}}
 };
 

diff  --git a/clang/test/SemaCXX/cxx2b-overloaded-operator.cpp b/clang/test/SemaCXX/cxx2b-overloaded-operator.cpp
index 47218e1f2dab5..c734b82987083 100644
--- a/clang/test/SemaCXX/cxx2b-overloaded-operator.cpp
+++ b/clang/test/SemaCXX/cxx2b-overloaded-operator.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -verify -std=c++2b %s
+// RUN: %clang_cc1 -verify -std=c++23 %s
 
 namespace N {
 

diff  --git a/clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp b/clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp
index 17247c4473178..d40491834d398 100644
--- a/clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp
+++ b/clang/test/SemaCXX/cxx2b-p2266-disable-with-msvc-compat.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only                    -verify=cxx2b,new %s
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -fms-compatibility -verify=cxx2b,old %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only                    -verify=cxx23,new %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -fms-compatibility -verify=cxx23,old %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only                    -verify=cxx20,old %s
 
 // FIXME: This is a test for a temporary workaround where we disable simpler implicit moves
@@ -18,21 +18,21 @@ struct nocopy {
 };
 
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 
 namespace {
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 } // namespace
 
 namespace foo {
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 namespace std {
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 } // namespace std
 } // namespace foo
@@ -40,18 +40,18 @@ nocopy mt3(nocopy x) { return x; }
 namespace std {
 
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 
 namespace {
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 } // namespace
 
 namespace foo {
 int &&mt1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &mt2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &mt2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy mt3(nocopy x) { return x; }
 } // namespace foo
 
@@ -65,22 +65,22 @@ nocopy mt3(nocopy x) { return x; }
 #elif !defined(SYSTEM)
 
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 
 namespace {
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 } // namespace
 
 namespace foo {
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 namespace std {
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 } // namespace std
 } // namespace foo
@@ -88,18 +88,18 @@ nocopy ut3(nocopy x) { return x; }
 namespace std {
 
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 
 namespace {
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 } // namespace
 
 namespace foo {
 int &&ut1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &ut2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &ut2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy ut3(nocopy x) { return x; }
 } // namespace foo
 
@@ -110,22 +110,22 @@ nocopy ut3(nocopy x) { return x; }
 #pragma GCC system_header
 
 int &&st1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &st2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &st2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy st3(nocopy x) { return x; }
 
 namespace {
 int &&st1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &st2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &st2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy st3(nocopy x) { return x; }
 } // namespace
 
 namespace foo {
 int &&st1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &st2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &st2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy st3(nocopy x) { return x; }
 namespace std {
 int &&st1(int &&x) { return x; } // cxx20-error {{cannot bind to lvalue}}
-int &st2(int &&x) { return x; }  // cxx2b-error {{cannot bind to a temporary}}
+int &st2(int &&x) { return x; }  // cxx23-error {{cannot bind to a temporary}}
 nocopy st3(nocopy x) { return x; }
 } // namespace std
 } // namespace foo

diff  --git a/clang/test/SemaCXX/deduced-return-type-cxx14.cpp b/clang/test/SemaCXX/deduced-return-type-cxx14.cpp
index 41acb44315b63..aa67f5368e77a 100644
--- a/clang/test/SemaCXX/deduced-return-type-cxx14.cpp
+++ b/clang/test/SemaCXX/deduced-return-type-cxx14.cpp
@@ -1,8 +1,8 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx20_2b,cxx2b    %s
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx20_2b,cxx2b    %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx20_23,cxx23    %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx20_23,cxx23    %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
 
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_2b %s
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_2b %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_23 %s
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx14_20,cxx20_23 %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
 
 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify=expected,cxx14_20,cxx14    %s
 // RUN: %clang_cc1 -std=c++14 -fsyntax-only -verify=expected,cxx14_20,cxx14    %s -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING
@@ -129,14 +129,14 @@ namespace Templates {
     return T() + 1;
   }
   template<typename T> auto &f2(T &&v) { return v; }
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
-  // cxx2b-error at -2 {{non-const lvalue reference to type 'double' cannot bind to a temporary of type 'double'}}
-  // cxx2b-note at -3  {{candidate template ignored: substitution failure [with T = double]}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -2 {{non-const lvalue reference to type 'double' cannot bind to a temporary of type 'double'}}
+  // cxx23-note at -3  {{candidate template ignored: substitution failure [with T = double]}}
   int a = f1<int>();
-  const int &b = f2(0); // cxx2b-note {{in instantiation of function template specialization 'Templates::f2<int>' requested here}}
+  const int &b = f2(0); // cxx23-note {{in instantiation of function template specialization 'Templates::f2<int>' requested here}}
   double d;
   float &c = f2(0.0); // expected-error {{non-const lvalue reference to type 'float' cannot bind to a value of unrelated type 'double'}}
-  // cxx2b-note at -1 {{in instantiation of function template specialization 'Templates::f2<double>' requested here}}
+  // cxx23-note at -1 {{in instantiation of function template specialization 'Templates::f2<double>' requested here}}
 
   template<typename T> auto fwd_decl(); // expected-note {{declared here}}
   int e = fwd_decl<int>(); // expected-error {{cannot be used before it is defined}}
@@ -150,7 +150,7 @@ namespace Templates {
   auto (*q)() = f1<int>; // ok
 
   typedef decltype(f2(1.2)) dbl; // cxx14_20-note {{previous}}
-  // cxx2b-error at -1 {{no matching function for call to 'f2'}}
+  // cxx23-error at -1 {{no matching function for call to 'f2'}}
   typedef float dbl; // cxx14_20-error {{typedef redefinition with 
diff erent types ('float' vs 'decltype(f2(1.2))' (aka 'double &'))}}
 
   extern template auto fwd_decl<double>();
@@ -299,7 +299,7 @@ namespace Constexpr {
     constexpr int q = Y<int>().f(); // expected-error {{must be initialized by a constant expression}} expected-note {{in call to '&Y<int>()->f()'}}
   }
   struct NonLiteral { ~NonLiteral(); } nl; // cxx14-note {{user-provided destructor}}
-  // cxx20_2b-note at -1 {{'NonLiteral' is not literal because its destructor is not constexpr}}
+  // cxx20_23-note at -1 {{'NonLiteral' is not literal because its destructor is not constexpr}}
   constexpr auto f2(int n) { return nl; } // expected-error {{return type 'struct NonLiteral' is not a literal type}}
 }
 

diff  --git a/clang/test/SemaCXX/lambda-capture-type-deduction.cpp b/clang/test/SemaCXX/lambda-capture-type-deduction.cpp
index 8c9f6f69e91db..e524d3bc20abc 100644
--- a/clang/test/SemaCXX/lambda-capture-type-deduction.cpp
+++ b/clang/test/SemaCXX/lambda-capture-type-deduction.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify -fsyntax-only %s
+// RUN: %clang_cc1 -std=c++23 -verify -fsyntax-only %s
 
 template <typename T, typename U>
 constexpr bool is_same = false;

diff  --git a/clang/test/SemaCXX/lambda-expressions.cpp b/clang/test/SemaCXX/lambda-expressions.cpp
index 67853c991ce53..aeecf2109beff 100644
--- a/clang/test/SemaCXX/lambda-expressions.cpp
+++ b/clang/test/SemaCXX/lambda-expressions.cpp
@@ -709,7 +709,7 @@ static_assert([]() constexpr {
 // be properly handled after D124351
 constexpr int i = 2;
 void foo() {
-  (void)[=][[gnu::aligned(i)]] () {}; // expected-warning{{C++2b extension}}
+  (void)[=][[gnu::aligned(i)]] () {}; // expected-warning{{C++23 extension}}
   // CHECK: AlignedAttr
   // CHECK-NEXT: ConstantExpr
   // CHECK-NEXT: value: Int 2

diff  --git a/clang/test/SemaCXX/lambda-unevaluated.cpp b/clang/test/SemaCXX/lambda-unevaluated.cpp
index da00cb48a87fd..135c6f6bfc05e 100644
--- a/clang/test/SemaCXX/lambda-unevaluated.cpp
+++ b/clang/test/SemaCXX/lambda-unevaluated.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -std=c++20 %s -Wno-c++2b-extensions -verify
-// RUN: %clang_cc1 -std=c++2b %s -verify
+// RUN: %clang_cc1 -std=c++20 %s -Wno-c++23-extensions -verify
+// RUN: %clang_cc1 -std=c++23 %s -verify
 
 
 template <auto> struct Nothing {};

diff  --git a/clang/test/SemaCXX/libcxx_is_trivially_equality_comparable_hack.cpp b/clang/test/SemaCXX/libcxx_is_trivially_equality_comparable_hack.cpp
index b236ce09b2970..37adc5fc0b04b 100644
--- a/clang/test/SemaCXX/libcxx_is_trivially_equality_comparable_hack.cpp
+++ b/clang/test/SemaCXX/libcxx_is_trivially_equality_comparable_hack.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++20 -fms-extensions -Wno-microsoft %s
-// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++2b -fms-extensions -Wno-microsoft %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -verify -std=gnu++23 -fms-extensions -Wno-microsoft %s
 
 template <class T, class U>
 struct Same {

diff  --git a/clang/test/SemaCXX/overloaded-operator-decl.cpp b/clang/test/SemaCXX/overloaded-operator-decl.cpp
index a21e13f3fceb8..777be6c5a0487 100644
--- a/clang/test/SemaCXX/overloaded-operator-decl.cpp
+++ b/clang/test/SemaCXX/overloaded-operator-decl.cpp
@@ -51,7 +51,7 @@ struct PR10839 {
 
 namespace PR14120 {
   struct A {
-    static void operator()(int& i) { ++i; } // expected-warning{{is a C++2b extension}}
+    static void operator()(int& i) { ++i; } // expected-warning{{is a C++23 extension}}
   };
   void f() {
     int i = 0;

diff  --git a/clang/test/SemaCXX/return-stack-addr.cpp b/clang/test/SemaCXX/return-stack-addr.cpp
index 2f3b5b5d6c660..a66197b5acf62 100644
--- a/clang/test/SemaCXX/return-stack-addr.cpp
+++ b/clang/test/SemaCXX/return-stack-addr.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -verify=expected,cxx2b          %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -verify=expected,cxx23          %s
 // RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify=expected,cxx11_20       %s
 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify=expected,cxx11_20,cxx11 %s
 
@@ -30,7 +30,7 @@ int* ret_local_array_element_const_index() {
 int& ret_local_ref() {
   int x = 1;
   return x; // cxx11_20-warning {{reference to stack memory}}
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
 }
 
 int* ret_local_addrOf() {
@@ -156,9 +156,9 @@ void ret_from_lambda() {
   (void) [=]() mutable -> int& { return a; };
   (void) [=]() mutable -> int& { return b; };
   (void) [&]() -> int& { int a; return a; }; // cxx11_20-warning {{reference to stack}}
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
   (void) [=]() -> int& { int a; return a; }; // cxx11_20-warning {{reference to stack}}
-  // cxx2b-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
+  // cxx23-error at -1 {{non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'}}
   (void) [&]() -> int& { int &a = b; return a; };
   (void) [=]() mutable -> int& { int &a = b; return a; };
 

diff  --git a/clang/test/SemaCXX/size_t-literal.cpp b/clang/test/SemaCXX/size_t-literal.cpp
index 02e644697002e..73be677d47bd2 100644
--- a/clang/test/SemaCXX/size_t-literal.cpp
+++ b/clang/test/SemaCXX/size_t-literal.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -std=c++2b -triple x86_64-linux -Wpre-c++2b-compat -fsyntax-only -verify=cxx2b %s
+// RUN: %clang_cc1 -std=c++23 -triple x86_64-linux -Wpre-c++23-compat -fsyntax-only -verify=cxx23 %s
 // RUN: %clang_cc1 -std=c++20 -triple x86_64-linux -fsyntax-only -verify=cxx20 %s
-// RUN: %clang_cc1 -std=c++2b -triple i686-linux -fsyntax-only -verify=cxx2b-32 %s
+// RUN: %clang_cc1 -std=c++23 -triple i686-linux -fsyntax-only -verify=cxx23-32 %s
 // RUN: %clang_cc1 -x c -std=c11 -fsyntax-only -verify=c11 %s
 
 #ifdef __cplusplus
@@ -17,83 +17,83 @@ struct is_same<T, T> { static constexpr bool value = true; };
 
 void SSizeT(void) {
   auto a1 = 1z;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a1), ssize_t>::value);
 
   auto a2 = 1Z;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a2), ssize_t>::value);
 }
 
 void SizeT(void) {
   auto a1 = 1uz;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a1), size_t>::value);
 
   auto a2 = 1uZ;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a2), size_t>::value);
 
   auto a3 = 1Uz;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a3), size_t>::value);
 
   auto a4 = 1UZ;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a4), size_t>::value);
 
   auto a5 = 1zu;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a5), size_t>::value);
 
   auto a6 = 1Zu;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a6), size_t>::value);
 
   auto a7 = 1zU;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a7), size_t>::value);
 
   auto a8 = 1ZU;
-  // cxx2b-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++2b}}
-  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++2b extension}}
+  // cxx23-warning at -1 {{'size_t' suffix for literals is incompatible with C++ standards before C++23}}
+  // cxx20-warning at -2 {{'size_t' suffix for literals is a C++23 extension}}
   static_assert(is_same<decltype(a8), size_t>::value);
 }
 
 void oor(void) {
 #if __i386__
-  (void)3'000'000'000z; // cxx2b-32-error {{signed 'size_t' literal is out of range of possible signed 'size_t' values}}
+  (void)3'000'000'000z; // cxx23-32-error {{signed 'size_t' literal is out of range of possible signed 'size_t' values}}
   (void)3'000'000'000uz;
-  (void)5'000'000'000uz; // cxx2b-32-error {{'size_t' literal is out of range of possible 'size_t' values}}
+  (void)5'000'000'000uz; // cxx23-32-error {{'size_t' literal is out of range of possible 'size_t' values}}
 
   (void)0x80000000z;
   (void)0x80000000uz;
-  (void)0x180000000uz; //cxx2b-32-error {{'size_t' literal is out of range of possible 'size_t' values}}
+  (void)0x180000000uz; //cxx23-32-error {{'size_t' literal is out of range of possible 'size_t' values}}
 #endif
 }
 
 #else
 
 void f(void) {
-  (void)1z;  // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1Z;  // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1uz; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1uZ; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1Uz; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1UZ; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1zu; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1Zu; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1zU; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
-  (void)1ZU; // c11-error {{'size_t' suffix for literals is a C++2b feature}}
+  (void)1z;  // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1Z;  // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1uz; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1uZ; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1Uz; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1UZ; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1zu; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1Zu; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1zU; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
+  (void)1ZU; // c11-error {{'size_t' suffix for literals is a C++23 feature}}
 }
 
 #endif

diff  --git a/clang/test/SemaObjCXX/block-capture.mm b/clang/test/SemaObjCXX/block-capture.mm
index c89c088a871ba..8ba02f919e015 100644
--- a/clang/test/SemaObjCXX/block-capture.mm
+++ b/clang/test/SemaObjCXX/block-capture.mm
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_2b,cxx11_2b,cxx2b %s
-// RUN: %clang_cc1 -std=c++20 -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_2b,cxx11_2b       %s
-// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_2b,cxx11_2b       %s
-// RUN: %clang_cc1 -std=c++98 -fsyntax-only -fobjc-arc -fblocks -Wno-c++11-extensions -verify=cxx98_2b,cxx98          %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_23,cxx11_23,cxx23 %s
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_23,cxx11_23       %s
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fobjc-arc -fblocks                       -verify=cxx98_23,cxx11_23       %s
+// RUN: %clang_cc1 -std=c++98 -fsyntax-only -fobjc-arc -fblocks -Wno-c++11-extensions -verify=cxx98_23,cxx98          %s
 
 #define TEST(T) void test_##T() { \
   __block T x;                    \
@@ -9,10 +9,10 @@
 }
 
 struct CopyOnly {
-  CopyOnly();           // cxx2b-note {{not viable}}
-  CopyOnly(CopyOnly &); // cxx2b-note {{not viable}}
+  CopyOnly();           // cxx23-note {{not viable}}
+  CopyOnly(CopyOnly &); // cxx23-note {{not viable}}
 };
-TEST(CopyOnly); // cxx2b-error {{no matching constructor}}
+TEST(CopyOnly); // cxx23-error {{no matching constructor}}
 
 // Both ConstCopyOnly and NonConstCopyOnly are
 // "pure" C++98 tests (pretend 'delete' means 'private').
@@ -28,16 +28,16 @@
 struct NonConstCopyOnly {
   NonConstCopyOnly();
   NonConstCopyOnly(NonConstCopyOnly &);
-  NonConstCopyOnly(const NonConstCopyOnly &) = delete; // cxx11_2b-note {{marked deleted here}}
+  NonConstCopyOnly(const NonConstCopyOnly &) = delete; // cxx11_23-note {{marked deleted here}}
 };
-TEST(NonConstCopyOnly); // cxx11_2b-error {{call to deleted constructor}}
+TEST(NonConstCopyOnly); // cxx11_23-error {{call to deleted constructor}}
 
 struct CopyNoMove {
   CopyNoMove();
   CopyNoMove(CopyNoMove &);
-  CopyNoMove(CopyNoMove &&) = delete; // cxx98_2b-note {{marked deleted here}}
+  CopyNoMove(CopyNoMove &&) = delete; // cxx98_23-note {{marked deleted here}}
 };
-TEST(CopyNoMove); // cxx98_2b-error {{call to deleted constructor}}
+TEST(CopyNoMove); // cxx98_23-error {{call to deleted constructor}}
 
 struct MoveOnly {
   MoveOnly();
@@ -49,9 +49,9 @@
 struct NoCopyNoMove {
   NoCopyNoMove();
   NoCopyNoMove(NoCopyNoMove &) = delete;
-  NoCopyNoMove(NoCopyNoMove &&) = delete; // cxx98_2b-note {{marked deleted here}}
+  NoCopyNoMove(NoCopyNoMove &&) = delete; // cxx98_23-note {{marked deleted here}}
 };
-TEST(NoCopyNoMove); // cxx98_2b-error {{call to deleted constructor}}
+TEST(NoCopyNoMove); // cxx98_23-error {{call to deleted constructor}}
 
 struct ConvertingRVRef {
   ConvertingRVRef();
@@ -69,11 +69,11 @@
   ConvertingCLVRef(ConvertingCLVRef &);
 
   struct X {};
-  ConvertingCLVRef(X &&); // cxx98_2b-note {{passing argument to parameter here}}
+  ConvertingCLVRef(X &&); // cxx98_23-note {{passing argument to parameter here}}
   operator X() const &;
-  operator X() && = delete; // cxx98_2b-note {{marked deleted here}}
+  operator X() && = delete; // cxx98_23-note {{marked deleted here}}
 };
-TEST(ConvertingCLVRef); // cxx98_2b-error {{invokes a deleted function}}
+TEST(ConvertingCLVRef); // cxx98_23-error {{invokes a deleted function}}
 
 struct SubSubMove {};
 struct SubMove : SubSubMove {

diff  --git a/clang/test/SemaOpenCLCXX/address-space-lambda.clcpp b/clang/test/SemaOpenCLCXX/address-space-lambda.clcpp
index 66dc4da13d2c3..54c7c88087be8 100644
--- a/clang/test/SemaOpenCLCXX/address-space-lambda.clcpp
+++ b/clang/test/SemaOpenCLCXX/address-space-lambda.clcpp
@@ -63,7 +63,7 @@ __kernel void test_qual() {
 
   [&] __private {} (); // expected-error{{no matching function for call to object of type '(lambda at}} expected-note{{candidate function not viable: 'this' object is in default address space, but method expects object in address space '__private'}}
 #if __cplusplus <= 202002L
-// expected-warning at -2{{lambda without a parameter clause is a C++2b extension}}
+// expected-warning at -2{{lambda without a parameter clause is a C++23 extension}}
 #endif
 
   [&] () mutable __private {} ();

diff  --git a/clang/test/SemaTemplate/deduction.cpp b/clang/test/SemaTemplate/deduction.cpp
index 7a45d1a425728..54bb9d6cfb158 100644
--- a/clang/test/SemaTemplate/deduction.cpp
+++ b/clang/test/SemaTemplate/deduction.cpp
@@ -1,6 +1,6 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++1z
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++2b
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++17
+// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++23
 
 // Template argument deduction with template template parameters.
 template<typename T, template<T> class A> 

diff  --git a/clang/test/SemaTemplate/instantiate-subscript.cpp b/clang/test/SemaTemplate/instantiate-subscript.cpp
index 3015f720cf1f1..cb20f2dd721f7 100644
--- a/clang/test/SemaTemplate/instantiate-subscript.cpp
+++ b/clang/test/SemaTemplate/instantiate-subscript.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -fsyntax-only -verify %s
-// RUN: %clang_cc1 -fsyntax-only -verify -std=c++2b %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++23 %s
 
 struct Sub0 {
   int &operator[](int);

diff  --git a/clang/test/SemaTemplate/instantiation-dependence.cpp b/clang/test/SemaTemplate/instantiation-dependence.cpp
index 82665b26b1229..1a97dbf769ec6 100644
--- a/clang/test/SemaTemplate/instantiation-dependence.cpp
+++ b/clang/test/SemaTemplate/instantiation-dependence.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 // Ensure we substitute into instantiation-dependent but non-dependent
 // constructs. The poster-child for this is...

diff  --git a/clang/test/SemaTemplate/make_integer_seq.cpp b/clang/test/SemaTemplate/make_integer_seq.cpp
index 12505b0a7481b..12520167b93e5 100644
--- a/clang/test/SemaTemplate/make_integer_seq.cpp
+++ b/clang/test/SemaTemplate/make_integer_seq.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -triple x86_64-linux-gnu -ast-dump -verify -xc++ < %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -triple x86_64-linux-gnu -ast-dump -verify -xc++ < %s | FileCheck %s
 
 template <class A1, A1... A2> struct A {};
 

diff  --git a/clang/test/SemaTemplate/pr52909.cpp b/clang/test/SemaTemplate/pr52909.cpp
index ccde5903342a6..998a88ae7be27 100644
--- a/clang/test/SemaTemplate/pr52909.cpp
+++ b/clang/test/SemaTemplate/pr52909.cpp
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -std=c++20 -verify %s
-// RUN: %clang_cc1 -std=c++2b -verify %s
+// RUN: %clang_cc1 -std=c++23 -verify %s
 
 namespace PR52905 {
 template <class> concept C = true;

diff  --git a/clang/test/SemaTemplate/type_pack_element.cpp b/clang/test/SemaTemplate/type_pack_element.cpp
index c9d6b98a1cec1..260b90bf506c5 100644
--- a/clang/test/SemaTemplate/type_pack_element.cpp
+++ b/clang/test/SemaTemplate/type_pack_element.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++2b -fsyntax-only -triple x86_64-linux-gnu -ast-dump -verify -xc++ < %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++23 -fsyntax-only -triple x86_64-linux-gnu -ast-dump -verify -xc++ < %s | FileCheck %s
 
 using test1 = __type_pack_element<0, int>;
 //      CHECK: |-TypeAliasDecl 0x{{[0-9A-Fa-f]+}} <<stdin>:3:1, col:41> col:7 test1 '__type_pack_element<0, int>':'int'

diff  --git a/clang/www/OpenProjects.html b/clang/www/OpenProjects.html
index c2a8e8fa4f787..d3aedd281121c 100755
--- a/clang/www/OpenProjects.html
+++ b/clang/www/OpenProjects.html
@@ -123,7 +123,7 @@ <h1>Open Clang Projects</h1>
 </ul>
 </li>
 
-<li><b>Continue work on C++20, C++2b, and C2x support</b>:
+<li><b>Continue work on C++20, C++23, and C2x support</b>:
   There are still several C++20 features to complete, and work has begun on
   supporting the latest language standards. Please see the
   <a href="cxx_status.html">C++ status report page</a> to find out what is

diff  --git a/clang/www/cxx_status.html b/clang/www/cxx_status.html
index fe2a16d9cee1f..3750b573e79b5 100755
--- a/clang/www/cxx_status.html
+++ b/clang/www/cxx_status.html
@@ -61,8 +61,8 @@ <h1>C++ Support in Clang</h1>
  <td class="partial" align="center">Partial</td>
 </tr>
 <tr>
- <td><a href="#cxx23">C++2b (tentatively C++23)</a></td>
- <td><tt>-std=c++2b</tt></td>
+ <td><a href="#cxx23">C++23</a></td>
+ <td><tt>-std=c++23</tt></td>
  <td class="partial" align="center">Partial</td>
 </tr>
 </table>
@@ -1290,12 +1290,12 @@ <h2 id="cxx20">C++20 implementation status</h2>
 </p>
 </details>
 
-<h2 id="cxx23">C++2b implementation status</h2>
+<h2 id="cxx23">C++23 implementation status</h2>
 
-<p>Clang has support for some of the features of the C++ standard following
-C++20, informally referred to as C++2b.</p>
+<!-- TODO add link to the ISO Standard after it's published. -->
+<p>Clang has support for some of the features of the ISO C++ 2023 standard.</p>
 
-<p>You can use Clang in C++2b mode with the <code>-std=c++2b</code> option.</p>
+<p>You can use Clang in C++23 mode with the <code>-std=c++23</code> option.</p>
 
 <details open>
 <summary>List of features and minimum Clang version with support</summary>
@@ -1303,7 +1303,7 @@ <h2 id="cxx23">C++2b implementation status</h2>
 <table width="689" border="1" cellspacing="0">
  <tr>
     <th>Language Feature</th>
-    <th>C++2b Proposal</th>
+    <th>C++23 Proposal</th>
     <th>Available in Clang?</th>
  </tr>
     <!-- Fall 2020 papers -->


        


More information about the cfe-commits mailing list