From 78739c2df788ee5c868d998a6333d453317d8711 Mon Sep 17 00:00:00 2001 From: Paul Fee Date: Mon, 25 Jan 2021 01:18:30 +0000 Subject: c++: Add support for -std=c++23 Derived from the changes that added C++2a support in 2017. r8-3237-g026a79f70cf33f836ea5275eda72d4870a3041e5 No C++23 features are added here. Use of -std=c++23 sets __cplusplus to 202100L. $ g++ -std=c++23 -dM -E -x c++ - < /dev/null | grep cplusplus #define __cplusplus 202100L gcc/ * doc/cpp.texi (__cplusplus): Document value for -std=c++23 or -std=gnu++23. * doc/invoke.texi: Document -std=c++23 and -std=gnu++23. * dwarf2out.c (highest_c_language): Recognise C++20 and C++23. (gen_compile_unit_die): Recognise C++23. gcc/c-family/ * c-common.h (cxx_dialect): Add cxx23 as a dialect. * c.opt: Add options for -std=c++23, std=c++2b, -std=gnu++23 and -std=gnu++2b * c-opts.c (set_std_cxx23): New. (c_common_handle_option): Set options when -std=c++23 is enabled. (c_common_post_options): Adjust comments. (set_std_cxx20): Likewise. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_c++2a): Check for C++2a or C++23. (check_effective_target_c++20_down): New. (check_effective_target_c++23_only): New. (check_effective_target_c++23): New. * g++.dg/cpp23/cplusplus.C: New. libcpp/ * include/cpplib.h (c_lang): Add CXX23 and GNUCXX23. * init.c (lang_defaults): Add rows for CXX23 and GNUCXX23. (cpp_init_builtins): Set __cplusplus to 202100L for C++23. --- gcc/dwarf2out.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'gcc/dwarf2out.c') diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 2ec3449..0a61d14 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -24492,6 +24492,10 @@ static char *producer_string; static const char * highest_c_language (const char *lang1, const char *lang2) { + if (strcmp ("GNU C++23", lang1) == 0 || strcmp ("GNU C++23", lang2) == 0) + return "GNU C++23"; + if (strcmp ("GNU C++20", lang1) == 0 || strcmp ("GNU C++20", lang2) == 0) + return "GNU C++20"; if (strcmp ("GNU C++17", lang1) == 0 || strcmp ("GNU C++17", lang2) == 0) return "GNU C++17"; if (strcmp ("GNU C++14", lang1) == 0 || strcmp ("GNU C++14", lang2) == 0) @@ -24597,7 +24601,8 @@ gen_compile_unit_die (const char *filename) else if (strcmp (language_string, "GNU C++14") == 0) language = DW_LANG_C_plus_plus_14; else if (strcmp (language_string, "GNU C++17") == 0 - || strcmp (language_string, "GNU C++20") == 0) + || strcmp (language_string, "GNU C++20") == 0 + || strcmp (language_string, "GNU C++23") == 0) /* For now. */ language = DW_LANG_C_plus_plus_14; } -- cgit v1.1