From 9e42278613c2ea894544290011bf8c76753318aa Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Sat, 26 Oct 2024 16:39:57 +0100 Subject: [PATCH 1/2] c++: Implement P1494r4. The paper proposes a function that serves to demarc epochs within the code preventing UB-based optimisations from 'time traveling' across such boundaries. The code here is a base implementation that maintains the observable function call through to expand (where it produces zero code). As such it does not alter handling of RTL. gcc/ChangeLog: * builtins.cc (expand_builtin): Handle BUILT_IN_OBSERVABLE. * builtins.def (BUILT_IN_OBSERVABLE): New. gcc/c-family/ChangeLog: * c-common.cc: Add __builtin_observable. * c-common.h (enum rid): Add RID_BUILTIN_OBSERVABLE. gcc/cp/ChangeLog: * cp-objcp-common.cc (names_builtin_p): * cxxapi-data.csv: Add observable to stdlib. * parser.cc (cp_parser_postfix_expression): Handle __builtin_observable. * std-name-hint.gperf: Regenerate. * std-name-hint.h: Regenerate. libstdc++-v3/ChangeLog: * include/c_global/cstdlib: Add std::observable. Signed-off-by: Iain Sandoe --- gcc/builtins.cc | 4 + gcc/builtins.def | 1 + gcc/c-family/c-common.cc | 1 + gcc/c-family/c-common.h | 1 + gcc/cp/cp-objcp-common.cc | 1 + gcc/cp/cxxapi-data.csv | 1 + gcc/cp/parser.cc | 17 + gcc/cp/std-name-hint.gperf | 2 + gcc/cp/std-name-hint.h | 998 +++++++++++++------------- libstdc++-v3/include/c_global/cstdlib | 4 + 10 files changed, 532 insertions(+), 498 deletions(-) diff --git a/gcc/builtins.cc b/gcc/builtins.cc index 37c7c98e5c7db..f5ca107a3549f 100644 --- a/gcc/builtins.cc +++ b/gcc/builtins.cc @@ -8341,6 +8341,10 @@ expand_builtin (tree exp, rtx target, rtx subtarget, machine_mode mode, expand_builtin_unreachable (); return const0_rtx; + case BUILT_IN_OBSERVABLE: + /* Emits no code. */ + return const0_rtx; + CASE_FLT_FN (BUILT_IN_SIGNBIT): case BUILT_IN_SIGNBITD32: case BUILT_IN_SIGNBITD64: diff --git a/gcc/builtins.def b/gcc/builtins.def index a3921aa6856a7..6e33bf45add8f 100644 --- a/gcc/builtins.def +++ b/gcc/builtins.def @@ -1071,6 +1071,7 @@ DEF_LIB_BUILTIN (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CO DEF_GCC_BUILTIN (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_COLD_LIST) DEF_GCC_BUILTIN (BUILT_IN_UNREACHABLE_TRAP, "unreachable trap", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_COLD_LIST) DEF_GCC_BUILTIN (BUILT_IN_UNREACHABLE, "unreachable", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_COLD_LIST) +DEF_GCC_BUILTIN (BUILT_IN_OBSERVABLE, "observable", BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST) DEF_GCC_BUILTIN (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL) DEF_GCC_BUILTIN (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR, ATTR_NULL) DEF_GCC_BUILTIN (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NOTHROW_LEAF_LIST) diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc index b9d41dcb9053f..0d54d72c3063e 100644 --- a/gcc/c-family/c-common.cc +++ b/gcc/c-family/c-common.cc @@ -432,6 +432,7 @@ const struct c_common_resword c_common_reswords[] = { "__builtin_convertvector", RID_BUILTIN_CONVERTVECTOR, 0 }, { "__builtin_has_attribute", RID_BUILTIN_HAS_ATTRIBUTE, 0 }, { "__builtin_launder", RID_BUILTIN_LAUNDER, D_CXXONLY }, + { "__builtin_observable", RID_BUILTIN_OBSERVABLE, D_CXXONLY }, { "__builtin_shuffle", RID_BUILTIN_SHUFFLE, 0 }, { "__builtin_shufflevector", RID_BUILTIN_SHUFFLEVECTOR, 0 }, { "__builtin_stdc_bit_ceil", RID_BUILTIN_STDC, D_CONLY }, diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 2f9224b871a2a..c1f6cf63f2a3c 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -166,6 +166,7 @@ enum rid /* C++ extensions */ RID_ADDRESSOF, RID_BUILTIN_LAUNDER, + RID_BUILTIN_OBSERVABLE, RID_BUILTIN_BIT_CAST, /* C++11 */ diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc index cd379514991df..aaa5e0dd4b9d5 100644 --- a/gcc/cp/cp-objcp-common.cc +++ b/gcc/cp/cp-objcp-common.cc @@ -583,6 +583,7 @@ names_builtin_p (const char *name) case RID_BUILTIN_SHUFFLE: case RID_BUILTIN_SHUFFLEVECTOR: case RID_BUILTIN_LAUNDER: + case RID_BUILTIN_OBSERVABLE: case RID_BUILTIN_ASSOC_BARRIER: case RID_BUILTIN_BIT_CAST: case RID_OFFSETOF: diff --git a/gcc/cp/cxxapi-data.csv b/gcc/cp/cxxapi-data.csv index bd397fb2acb89..d8a8adf11770a 100644 --- a/gcc/cp/cxxapi-data.csv +++ b/gcc/cp/cxxapi-data.csv @@ -1105,6 +1105,7 @@ ,uintptr_t,1,cxx11 # TODO # TODO +,observable,1,cxx11 # TODO # TODO # TODO diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 6d86f4534c431..4f6876749b20f 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -7726,6 +7726,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, case RID_BUILTIN_SHUFFLE: case RID_BUILTIN_SHUFFLEVECTOR: case RID_BUILTIN_LAUNDER: + case RID_BUILTIN_OBSERVABLE: case RID_BUILTIN_ASSOC_BARRIER: { vec *vec; @@ -7769,6 +7770,22 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, } break; + case RID_BUILTIN_OBSERVABLE: + if (vec->length () == 0) + { + tree fn = builtin_decl_explicit (BUILT_IN_OBSERVABLE); + releasing_vec vec; + postfix_expression = finish_call_expr (fn, &vec, false, false, + tf_warning_or_error); + } + else + { + error_at (loc, "%<__builtin_observable%> does not take" + " arguments"); + postfix_expression = error_mark_node; + } + break; + case RID_BUILTIN_ASSOC_BARRIER: if (vec->length () == 1) postfix_expression = build1_loc (loc, PAREN_EXPR, diff --git a/gcc/cp/std-name-hint.gperf b/gcc/cp/std-name-hint.gperf index b02f3e304ce93..9a8204ab9f3f8 100644 --- a/gcc/cp/std-name-hint.gperf +++ b/gcc/cp/std-name-hint.gperf @@ -118,6 +118,8 @@ uint_least64_t, "", cxx11 uint_least8_t, "", cxx11 uintmax_t, "", cxx11 uintptr_t, "", cxx11 +# +observable, "", cxx11 # deque, "", cxx98 # diff --git a/gcc/cp/std-name-hint.h b/gcc/cp/std-name-hint.h index e8e7608a8fed3..13cae6d1fb199 100644 --- a/gcc/cp/std-name-hint.h +++ b/gcc/cp/std-name-hint.h @@ -1,5 +1,5 @@ /* C++ code produced by gperf version 3.1 */ -/* Command-line: gperf -o -C -E -k '1,2,7,11,$' -D -N find -L C++ --output-file std-name-hint.h std-name-hint.gperf */ +/* Command-line: /opt/iains/x86_64-apple-darwin19/gcc-7-5-toolchain/bin/gperf -o -C -E -k '1,2,7,11,$' -D -N find -L C++ --output-file std-name-hint.h std-name-hint.gperf */ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ @@ -135,7 +135,7 @@ std_name_hint_lookup::find (const char *str, size_t len) { enum { - TOTAL_KEYWORDS = 455, + TOTAL_KEYWORDS = 456, MIN_WORD_LENGTH = 2, MAX_WORD_LENGTH = 39, MIN_HASH_VALUE = 22, @@ -144,559 +144,561 @@ std_name_hint_lookup::find (const char *str, size_t len) static const struct std_name_hint wordlist[] = { -#line 198 "std-name-hint.gperf" +#line 200 "std-name-hint.gperf" {"setbase", "", cxx98}, -#line 375 "std-name-hint.gperf" +#line 377 "std-name-hint.gperf" {"set", "", cxx98}, -#line 255 "std-name-hint.gperf" +#line 257 "std-name-hint.gperf" {"next", "", cxx11}, -#line 138 "std-name-hint.gperf" +#line 140 "std-name-hint.gperf" {"format", "", cxx20}, -#line 146 "std-name-hint.gperf" +#line 148 "std-name-hint.gperf" {"formattable", "", cxx23}, -#line 188 "std-name-hint.gperf" +#line 190 "std-name-hint.gperf" {"promise", "", cxx11}, #line 109 "std-name-hint.gperf" {"byte", "", cxx17}, -#line 360 "std-name-hint.gperf" +#line 362 "std-name-hint.gperf" {"print", "", cxx23}, -#line 200 "std-name-hint.gperf" +#line 202 "std-name-hint.gperf" {"setiosflags", "", cxx98}, -#line 147 "std-name-hint.gperf" +#line 149 "std-name-hint.gperf" {"formatted_size", "", cxx20}, -#line 243 "std-name-hint.gperf" +#line 245 "std-name-hint.gperf" {"begin", "", cxx11}, -#line 307 "std-name-hint.gperf" +#line 309 "std-name-hint.gperf" {"pmr::new_delete_resource", "", cxx17}, -#line 304 "std-name-hint.gperf" +#line 306 "std-name-hint.gperf" {"pmr::get_default_resource", "", cxx17}, -#line 310 "std-name-hint.gperf" +#line 312 "std-name-hint.gperf" {"pmr::set_default_resource", "", cxx17}, -#line 186 "std-name-hint.gperf" +#line 188 "std-name-hint.gperf" {"future", "", cxx11}, -#line 483 "std-name-hint.gperf" +#line 485 "std-name-hint.gperf" {"tuple", "", cxx11}, -#line 178 "std-name-hint.gperf" +#line 180 "std-name-hint.gperf" {"not_fn", "", cxx17}, -#line 508 "std-name-hint.gperf" +#line 510 "std-name-hint.gperf" {"bad_cast", "", cxx98}, -#line 217 "std-name-hint.gperf" +#line 219 "std-name-hint.gperf" {"nounitbuf", "", cxx98}, -#line 213 "std-name-hint.gperf" +#line 215 "std-name-hint.gperf" {"noshowbase", "", cxx98}, -#line 485 "std-name-hint.gperf" +#line 487 "std-name-hint.gperf" {"tuple_element", "", cxx11}, -#line 486 "std-name-hint.gperf" +#line 488 "std-name-hint.gperf" {"tuple_element_t", "", cxx14}, -#line 214 "std-name-hint.gperf" +#line 216 "std-name-hint.gperf" {"noshowpoint", "", cxx98}, -#line 361 "std-name-hint.gperf" +#line 363 "std-name-hint.gperf" {"println", "", cxx23}, -#line 215 "std-name-hint.gperf" +#line 217 "std-name-hint.gperf" {"noshowpos", "", cxx98}, -#line 487 "std-name-hint.gperf" +#line 489 "std-name-hint.gperf" {"tuple_size", "", cxx11}, -#line 163 "std-name-hint.gperf" +#line 165 "std-name-hint.gperf" {"basic_filebuf", "", cxx98}, -#line 504 "std-name-hint.gperf" +#line 506 "std-name-hint.gperf" {"void_t", "", cxx17}, -#line 348 "std-name-hint.gperf" +#line 350 "std-name-hint.gperf" {"nullopt", "", cxx17}, -#line 258 "std-name-hint.gperf" +#line 260 "std-name-hint.gperf" {"prev", "", cxx11}, -#line 400 "std-name-hint.gperf" +#line 402 "std-name-hint.gperf" {"basic_stringbuf", "", cxx98}, -#line 551 "std-name-hint.gperf" +#line 553 "std-name-hint.gperf" {"variant", "", cxx17}, -#line 387 "std-name-hint.gperf" +#line 389 "std-name-hint.gperf" {"basic_spanbuf", "", cxx23}, -#line 148 "std-name-hint.gperf" +#line 150 "std-name-hint.gperf" {"formatter", "", cxx20}, -#line 552 "std-name-hint.gperf" +#line 554 "std-name-hint.gperf" {"variant_alternative", "", cxx17}, -#line 355 "std-name-hint.gperf" +#line 357 "std-name-hint.gperf" {"flush_emit", "", cxx20}, -#line 555 "std-name-hint.gperf" +#line 557 "std-name-hint.gperf" {"variant_size", "", cxx17}, -#line 303 "std-name-hint.gperf" +#line 305 "std-name-hint.gperf" {"pmr", "", cxx17}, -#line 427 "std-name-hint.gperf" +#line 429 "std-name-hint.gperf" {"float16_t", "", cxx23}, -#line 295 "std-name-hint.gperf" +#line 297 "std-name-hint.gperf" {"to_address", "", cxx20}, -#line 553 "std-name-hint.gperf" +#line 555 "std-name-hint.gperf" {"variant_alternative_t", "", cxx17}, -#line 542 "std-name-hint.gperf" +#line 544 "std-name-hint.gperf" {"pair", "", cxx98}, -#line 218 "std-name-hint.gperf" +#line 220 "std-name-hint.gperf" {"nouppercase", "", cxx98}, -#line 540 "std-name-hint.gperf" +#line 542 "std-name-hint.gperf" {"move", "", cxx11}, -#line 177 "std-name-hint.gperf" +#line 179 "std-name-hint.gperf" {"mem_fn", "", cxx11}, -#line 428 "std-name-hint.gperf" +#line 430 "std-name-hint.gperf" {"float32_t", "", cxx23}, -#line 426 "std-name-hint.gperf" +#line 428 "std-name-hint.gperf" {"float128_t", "", cxx23}, -#line 559 "std-name-hint.gperf" +#line 561 "std-name-hint.gperf" {"vector", "", cxx98}, -#line 429 "std-name-hint.gperf" +#line 431 "std-name-hint.gperf" {"float64_t", "", cxx23}, -#line 541 "std-name-hint.gperf" +#line 543 "std-name-hint.gperf" {"move_if_noexcept", "", cxx11}, -#line 353 "std-name-hint.gperf" +#line 355 "std-name-hint.gperf" {"ends", "", cxx98}, -#line 263 "std-name-hint.gperf" +#line 265 "std-name-hint.gperf" {"map", "", cxx98}, -#line 259 "std-name-hint.gperf" +#line 261 "std-name-hint.gperf" {"reverse_iterator", "", cxx98}, -#line 548 "std-name-hint.gperf" +#line 550 "std-name-hint.gperf" {"bad_variant_access", "", cxx17}, -#line 288 "std-name-hint.gperf" +#line 290 "std-name-hint.gperf" {"make_unique", "", cxx14}, -#line 241 "std-name-hint.gperf" +#line 243 "std-name-hint.gperf" {"advance", "", cxx98}, -#line 242 "std-name-hint.gperf" +#line 244 "std-name-hint.gperf" {"back_inserter", "", cxx98}, -#line 164 "std-name-hint.gperf" +#line 166 "std-name-hint.gperf" {"basic_fstream", "", cxx98}, -#line 128 "std-name-hint.gperf" +#line 130 "std-name-hint.gperf" {"terminate", "", cxx98}, -#line 538 "std-name-hint.gperf" +#line 540 "std-name-hint.gperf" {"make_integer_sequence", "", cxx14}, -#line 292 "std-name-hint.gperf" +#line 294 "std-name-hint.gperf" {"reinterpret_pointer_cast", "", cxx17}, -#line 289 "std-name-hint.gperf" +#line 291 "std-name-hint.gperf" {"make_unique_for_overwrite", "", cxx20}, -#line 374 "std-name-hint.gperf" +#line 376 "std-name-hint.gperf" {"multiset", "", cxx98}, -#line 266 "std-name-hint.gperf" +#line 268 "std-name-hint.gperf" {"addressof", "", cxx11}, -#line 498 "std-name-hint.gperf" +#line 500 "std-name-hint.gperf" {"negation", "", cxx17}, -#line 556 "std-name-hint.gperf" +#line 558 "std-name-hint.gperf" {"variant_size_v", "", cxx17}, -#line 517 "std-name-hint.gperf" +#line 519 "std-name-hint.gperf" {"as_const", "", cxx17}, -#line 195 "std-name-hint.gperf" +#line 197 "std-name-hint.gperf" {"put_time", "", cxx11}, -#line 339 "std-name-hint.gperf" +#line 341 "std-name-hint.gperf" {"numbers::ln2_v", "", cxx20}, -#line 338 "std-name-hint.gperf" +#line 340 "std-name-hint.gperf" {"numbers::ln10_v", "", cxx20}, -#line 388 "std-name-hint.gperf" +#line 390 "std-name-hint.gperf" {"basic_spanstream", "", cxx23}, -#line 335 "std-name-hint.gperf" +#line 337 "std-name-hint.gperf" {"numbers::inv_pi_v", "", cxx20}, -#line 336 "std-name-hint.gperf" +#line 338 "std-name-hint.gperf" {"numbers::inv_sqrt3_v", "", cxx20}, -#line 337 "std-name-hint.gperf" +#line 339 "std-name-hint.gperf" {"numbers::inv_sqrtpi_v", "", cxx20}, -#line 305 "std-name-hint.gperf" +#line 307 "std-name-hint.gperf" {"pmr::memory_resource", "", cxx17}, -#line 401 "std-name-hint.gperf" +#line 403 "std-name-hint.gperf" {"basic_stringstream", "", cxx98}, -#line 167 "std-name-hint.gperf" +#line 169 "std-name-hint.gperf" {"fstream", "", cxx98}, -#line 254 "std-name-hint.gperf" +#line 256 "std-name-hint.gperf" {"move_iterator", "", cxx11}, -#line 480 "std-name-hint.gperf" +#line 482 "std-name-hint.gperf" {"make_from_tuple", "", cxx17}, -#line 460 "std-name-hint.gperf" +#line 462 "std-name-hint.gperf" {"errc", "", cxx11}, -#line 173 "std-name-hint.gperf" +#line 175 "std-name-hint.gperf" {"function", "", cxx11}, -#line 153 "std-name-hint.gperf" +#line 155 "std-name-hint.gperf" {"runtime_format", "", cxx26}, -#line 499 "std-name-hint.gperf" +#line 501 "std-name-hint.gperf" {"negation_v", "", cxx17}, -#line 462 "std-name-hint.gperf" +#line 464 "std-name-hint.gperf" {"error_code", "", cxx11}, -#line 135 "std-name-hint.gperf" +#line 137 "std-name-hint.gperf" {"basic_format_context", "", cxx20}, -#line 232 "std-name-hint.gperf" +#line 234 "std-name-hint.gperf" {"cout", "", cxx98}, -#line 204 "std-name-hint.gperf" +#line 206 "std-name-hint.gperf" {"boolalpha", "", cxx98}, -#line 435 "std-name-hint.gperf" +#line 437 "std-name-hint.gperf" {"basic_streambuf", "", cxx98}, -#line 136 "std-name-hint.gperf" +#line 138 "std-name-hint.gperf" {"basic_format_parse_context", "", cxx20}, -#line 134 "std-name-hint.gperf" +#line 136 "std-name-hint.gperf" {"basic_format_args", "", cxx20}, -#line 554 "std-name-hint.gperf" +#line 556 "std-name-hint.gperf" {"variant_npos", "", cxx17}, -#line 421 "std-name-hint.gperf" +#line 423 "std-name-hint.gperf" {"range_error", "", cxx98}, -#line 194 "std-name-hint.gperf" +#line 196 "std-name-hint.gperf" {"put_money", "", cxx11}, -#line 521 "std-name-hint.gperf" +#line 523 "std-name-hint.gperf" {"cmp_less", "", cxx20}, -#line 314 "std-name-hint.gperf" +#line 316 "std-name-hint.gperf" {"call_once", "", cxx11}, -#line 222 "std-name-hint.gperf" +#line 224 "std-name-hint.gperf" {"showbase", "", cxx98}, -#line 285 "std-name-hint.gperf" +#line 287 "std-name-hint.gperf" {"make_obj_using_allocator", "", cxx20}, -#line 372 "std-name-hint.gperf" +#line 374 "std-name-hint.gperf" {"counting_semaphore", "", cxx20}, -#line 151 "std-name-hint.gperf" +#line 153 "std-name-hint.gperf" {"range_format", "", cxx23}, -#line 276 "std-name-hint.gperf" +#line 278 "std-name-hint.gperf" {"const_pointer_cast", "", cxx11}, -#line 224 "std-name-hint.gperf" +#line 226 "std-name-hint.gperf" {"showpos", "", cxx98}, -#line 442 "std-name-hint.gperf" +#line 444 "std-name-hint.gperf" {"stof", "", cxx11}, -#line 229 "std-name-hint.gperf" +#line 231 "std-name-hint.gperf" {"cerr", "", cxx98}, -#line 484 "std-name-hint.gperf" +#line 486 "std-name-hint.gperf" {"tuple_cat", "", cxx11}, -#line 267 "std-name-hint.gperf" +#line 269 "std-name-hint.gperf" {"align", "", cxx11}, -#line 311 "std-name-hint.gperf" +#line 313 "std-name-hint.gperf" {"pmr::synchronized_pool_resource", "", cxx17}, -#line 422 "std-name-hint.gperf" +#line 424 "std-name-hint.gperf" {"runtime_error", "", cxx98}, -#line 550 "std-name-hint.gperf" +#line 552 "std-name-hint.gperf" {"monostate", "", cxx17}, -#line 149 "std-name-hint.gperf" +#line 151 "std-name-hint.gperf" {"make_format_args", "", cxx20}, -#line 273 "std-name-hint.gperf" - {"allocator_traits", "", cxx11}, #line 275 "std-name-hint.gperf" + {"allocator_traits", "", cxx11}, +#line 277 "std-name-hint.gperf" {"bad_weak_ptr", "", cxx11}, -#line 291 "std-name-hint.gperf" +#line 293 "std-name-hint.gperf" {"pointer_traits", "", cxx11}, -#line 312 "std-name-hint.gperf" +#line 314 "std-name-hint.gperf" {"pmr::unsynchronized_pool_resource", "", cxx17}, #line 45 "std-name-hint.gperf" {"make_any", "", cxx17}, -#line 341 "std-name-hint.gperf" +#line 343 "std-name-hint.gperf" {"numbers::log2e_v", "", cxx20}, -#line 340 "std-name-hint.gperf" +#line 342 "std-name-hint.gperf" {"numbers::log10e_v", "", cxx20}, -#line 405 "std-name-hint.gperf" +#line 407 "std-name-hint.gperf" {"stringbuf", "", cxx98}, -#line 436 "std-name-hint.gperf" +#line 438 "std-name-hint.gperf" {"streambuf", "", cxx98}, #line 44 "std-name-hint.gperf" {"any_cast", "", cxx17}, -#line 363 "std-name-hint.gperf" +#line 365 "std-name-hint.gperf" {"priority_queue", "", cxx98}, -#line 150 "std-name-hint.gperf" +#line 152 "std-name-hint.gperf" {"make_wformat_args", "", cxx20}, -#line 366 "std-name-hint.gperf" +#line 368 "std-name-hint.gperf" {"ranges::enable_borrowed_range", "", cxx20}, #line 47 "std-name-hint.gperf" {"array", "", cxx11}, -#line 354 "std-name-hint.gperf" +#line 356 "std-name-hint.gperf" {"flush", "", cxx98}, -#line 256 "std-name-hint.gperf" +#line 258 "std-name-hint.gperf" {"ostream_iterator", "", cxx98}, -#line 386 "std-name-hint.gperf" +#line 388 "std-name-hint.gperf" {"basic_ospanstream", "", cxx23}, -#line 306 "std-name-hint.gperf" +#line 308 "std-name-hint.gperf" {"pmr::monotonic_buffer_resource", "", cxx17}, -#line 309 "std-name-hint.gperf" +#line 311 "std-name-hint.gperf" {"pmr::pool_options", "", cxx17}, #line 48 "std-name-hint.gperf" {"to_array", "", cxx20}, -#line 152 "std-name-hint.gperf" +#line 154 "std-name-hint.gperf" {"range_formatter", "", cxx23}, -#line 270 "std-name-hint.gperf" +#line 272 "std-name-hint.gperf" {"allocator", "", cxx98}, -#line 328 "std-name-hint.gperf" +#line 330 "std-name-hint.gperf" {"hardware_destructive_interference_size", "", cxx17}, -#line 357 "std-name-hint.gperf" +#line 359 "std-name-hint.gperf" {"ostream", "", cxx98}, -#line 264 "std-name-hint.gperf" +#line 266 "std-name-hint.gperf" {"multimap", "", cxx98}, -#line 413 "std-name-hint.gperf" +#line 415 "std-name-hint.gperf" {"stacktrace", "", cxx23}, -#line 391 "std-name-hint.gperf" +#line 393 "std-name-hint.gperf" {"ospanstream", "", cxx23}, -#line 140 "std-name-hint.gperf" +#line 142 "std-name-hint.gperf" {"format_context", "", cxx20}, -#line 175 "std-name-hint.gperf" +#line 177 "std-name-hint.gperf" {"invoke", "", cxx17}, -#line 539 "std-name-hint.gperf" +#line 541 "std-name-hint.gperf" {"make_pair", "", cxx98}, -#line 185 "std-name-hint.gperf" +#line 187 "std-name-hint.gperf" {"async", "", cxx11}, -#line 166 "std-name-hint.gperf" +#line 168 "std-name-hint.gperf" {"basic_ofstream", "", cxx98}, -#line 202 "std-name-hint.gperf" +#line 204 "std-name-hint.gperf" {"setw", "", cxx98}, -#line 142 "std-name-hint.gperf" +#line 144 "std-name-hint.gperf" {"format_parse_context", "", cxx20}, -#line 139 "std-name-hint.gperf" +#line 141 "std-name-hint.gperf" {"format_args", "", cxx20}, -#line 239 "std-name-hint.gperf" +#line 241 "std-name-hint.gperf" {"ws", "", cxx98}, -#line 519 "std-name-hint.gperf" +#line 521 "std-name-hint.gperf" {"cmp_greater", "", cxx20}, -#line 201 "std-name-hint.gperf" +#line 203 "std-name-hint.gperf" {"setprecision", "", cxx98}, -#line 209 "std-name-hint.gperf" +#line 211 "std-name-hint.gperf" {"hexfloat", "", cxx11}, -#line 197 "std-name-hint.gperf" +#line 199 "std-name-hint.gperf" {"resetiosflags", "", cxx98}, -#line 534 "std-name-hint.gperf" +#line 536 "std-name-hint.gperf" {"index_sequence", "", cxx14}, -#line 342 "std-name-hint.gperf" +#line 344 "std-name-hint.gperf" {"numbers::phi_v", "", cxx20}, -#line 211 "std-name-hint.gperf" +#line 213 "std-name-hint.gperf" {"left", "", cxx98}, -#line 145 "std-name-hint.gperf" +#line 147 "std-name-hint.gperf" {"format_to_n", "", cxx20}, -#line 226 "std-name-hint.gperf" +#line 228 "std-name-hint.gperf" {"unitbuf", "", cxx98}, -#line 249 "std-name-hint.gperf" +#line 251 "std-name-hint.gperf" {"front_inserter", "", cxx98}, -#line 481 "std-name-hint.gperf" +#line 483 "std-name-hint.gperf" {"make_tuple", "", cxx11}, -#line 308 "std-name-hint.gperf" +#line 310 "std-name-hint.gperf" {"pmr::polymorphic_allocator", "", cxx17}, -#line 500 "std-name-hint.gperf" +#line 502 "std-name-hint.gperf" {"remove_cvref", "", cxx20}, -#line 343 "std-name-hint.gperf" +#line 345 "std-name-hint.gperf" {"numbers::pi_v", "", cxx20}, -#line 125 "std-name-hint.gperf" +#line 127 "std-name-hint.gperf" {"exception", "", cxx98}, -#line 501 "std-name-hint.gperf" +#line 503 "std-name-hint.gperf" {"remove_cvref_t", "", cxx20}, -#line 122 "std-name-hint.gperf" +#line 124 "std-name-hint.gperf" {"deque", "", cxx98}, -#line 432 "std-name-hint.gperf" +#line 434 "std-name-hint.gperf" {"stop_source", "", cxx20}, -#line 331 "std-name-hint.gperf" +#line 333 "std-name-hint.gperf" {"nothrow_t", "", cxx98}, -#line 225 "std-name-hint.gperf" +#line 227 "std-name-hint.gperf" {"skipws", "", cxx98}, -#line 392 "std-name-hint.gperf" +#line 394 "std-name-hint.gperf" {"spanbuf", "", cxx23}, -#line 251 "std-name-hint.gperf" +#line 253 "std-name-hint.gperf" {"istream_iterator", "", cxx98}, -#line 385 "std-name-hint.gperf" +#line 387 "std-name-hint.gperf" {"basic_ispanstream", "", cxx23}, -#line 216 "std-name-hint.gperf" +#line 218 "std-name-hint.gperf" {"noskipws", "", cxx98}, #line 43 "std-name-hint.gperf" {"any", "", cxx17}, -#line 433 "std-name-hint.gperf" +#line 435 "std-name-hint.gperf" {"stop_token", "", cxx20}, -#line 250 "std-name-hint.gperf" +#line 252 "std-name-hint.gperf" {"inserter", "", cxx98}, -#line 383 "std-name-hint.gperf" +#line 385 "std-name-hint.gperf" {"span", "", cxx20}, -#line 272 "std-name-hint.gperf" +#line 274 "std-name-hint.gperf" {"allocator_arg_t", "", cxx11}, -#line 301 "std-name-hint.gperf" +#line 303 "std-name-hint.gperf" {"weak_ptr", "", cxx11}, -#line 238 "std-name-hint.gperf" +#line 240 "std-name-hint.gperf" {"istream", "", cxx98}, -#line 479 "std-name-hint.gperf" +#line 481 "std-name-hint.gperf" {"ignore", "", cxx11}, -#line 482 "std-name-hint.gperf" +#line 484 "std-name-hint.gperf" {"tie", "", cxx11}, -#line 389 "std-name-hint.gperf" +#line 391 "std-name-hint.gperf" {"ispanstream", "", cxx23}, -#line 390 "std-name-hint.gperf" +#line 392 "std-name-hint.gperf" {"ispanstream", "", cxx23}, -#line 494 "std-name-hint.gperf" +#line 496 "std-name-hint.gperf" {"enable_if", "", cxx11}, -#line 174 "std-name-hint.gperf" +#line 176 "std-name-hint.gperf" {"hash", "", cxx11}, -#line 161 "std-name-hint.gperf" +#line 163 "std-name-hint.gperf" {"forward_list", "", cxx11}, -#line 535 "std-name-hint.gperf" +#line 537 "std-name-hint.gperf" {"index_sequence_for", "", cxx14}, -#line 457 "std-name-hint.gperf" +#line 459 "std-name-hint.gperf" {"basic_string_view", "", cxx17}, -#line 364 "std-name-hint.gperf" +#line 366 "std-name-hint.gperf" {"queue", "", cxx98}, -#line 495 "std-name-hint.gperf" +#line 497 "std-name-hint.gperf" {"enable_if_t", "", cxx14}, -#line 165 "std-name-hint.gperf" +#line 167 "std-name-hint.gperf" {"basic_ifstream", "", cxx98}, -#line 506 "std-name-hint.gperf" +#line 508 "std-name-hint.gperf" {"type_index", "", cxx11}, -#line 488 "std-name-hint.gperf" +#line 490 "std-name-hint.gperf" {"tuple_size_v", "", cxx17}, -#line 437 "std-name-hint.gperf" +#line 439 "std-name-hint.gperf" {"wstreambuf", "", cxx98}, -#line 327 "std-name-hint.gperf" +#line 329 "std-name-hint.gperf" {"hardware_constructive_interference_size", "", cxx17}, -#line 126 "std-name-hint.gperf" +#line 128 "std-name-hint.gperf" {"exception_ptr", "", cxx11}, -#line 144 "std-name-hint.gperf" +#line 146 "std-name-hint.gperf" {"format_to", "", cxx20}, -#line 549 "std-name-hint.gperf" +#line 551 "std-name-hint.gperf" {"holds_alternative", "", cxx17}, #line 56 "std-name-hint.gperf" {"bitset", "", cxx11}, -#line 463 "std-name-hint.gperf" +#line 465 "std-name-hint.gperf" {"error_condition", "", cxx11}, -#line 223 "std-name-hint.gperf" +#line 225 "std-name-hint.gperf" {"showpoint", "", cxx98}, -#line 490 "std-name-hint.gperf" +#line 492 "std-name-hint.gperf" {"conjunction", "", cxx17}, -#line 537 "std-name-hint.gperf" +#line 539 "std-name-hint.gperf" {"make_index_sequence", "", cxx14}, -#line 333 "std-name-hint.gperf" +#line 335 "std-name-hint.gperf" {"numbers::e_v", "", cxx20}, -#line 515 "std-name-hint.gperf" +#line 517 "std-name-hint.gperf" {"unordered_set", "", cxx11}, -#line 509 "std-name-hint.gperf" +#line 511 "std-name-hint.gperf" {"bad_typeid", "", cxx98}, #line 93 "std-name-hint.gperf" {"chrono::weeks", "", cxx20}, -#line 425 "std-name-hint.gperf" +#line 427 "std-name-hint.gperf" {"bfloat16_t", "", cxx23}, #line 66 "std-name-hint.gperf" {"chrono::get_tzdb_list", "", cxx20}, -#line 471 "std-name-hint.gperf" +#line 122 "std-name-hint.gperf" + {"observable", "", cxx11}, +#line 473 "std-name-hint.gperf" {"system_category", "", cxx11}, -#line 269 "std-name-hint.gperf" +#line 271 "std-name-hint.gperf" {"allocate_shared_for_overwrite", "", cxx20}, -#line 443 "std-name-hint.gperf" +#line 445 "std-name-hint.gperf" {"stoi", "", cxx11}, -#line 154 "std-name-hint.gperf" +#line 156 "std-name-hint.gperf" {"vformat", "", cxx20}, #line 95 "std-name-hint.gperf" {"chrono::zoned_time", "", cxx20}, -#line 190 "std-name-hint.gperf" +#line 192 "std-name-hint.gperf" {"generator", "", cxx23}, -#line 124 "std-name-hint.gperf" +#line 126 "std-name-hint.gperf" {"current_exception", "", cxx11}, #line 65 "std-name-hint.gperf" {"chrono::get_tzdb", "", cxx20}, -#line 557 "std-name-hint.gperf" +#line 559 "std-name-hint.gperf" {"visit", "", cxx17}, #line 77 "std-name-hint.gperf" {"chrono::months", "", cxx20}, #line 76 "std-name-hint.gperf" {"chrono::minutes", "", cxx11}, -#line 352 "std-name-hint.gperf" +#line 354 "std-name-hint.gperf" {"endl", "", cxx98}, #line 78 "std-name-hint.gperf" {"chrono::nanoseconds", "", cxx11}, -#line 220 "std-name-hint.gperf" +#line 222 "std-name-hint.gperf" {"right", "", cxx98}, -#line 212 "std-name-hint.gperf" +#line 214 "std-name-hint.gperf" {"noboolalpha", "", cxx98}, -#line 491 "std-name-hint.gperf" +#line 493 "std-name-hint.gperf" {"conjunction_v", "", cxx17}, -#line 439 "std-name-hint.gperf" +#line 441 "std-name-hint.gperf" {"basic_string", "", cxx98}, -#line 351 "std-name-hint.gperf" +#line 353 "std-name-hint.gperf" {"emit_on_flush", "", cxx20}, -#line 399 "std-name-hint.gperf" +#line 401 "std-name-hint.gperf" {"basic_ostringstream", "", cxx98}, -#line 469 "std-name-hint.gperf" +#line 471 "std-name-hint.gperf" {"make_error_code", "", cxx11}, #line 106 "std-name-hint.gperf" {"condition_variable", "", cxx11}, -#line 451 "std-name-hint.gperf" +#line 453 "std-name-hint.gperf" {"to_wstring", "", cxx17}, -#line 193 "std-name-hint.gperf" +#line 195 "std-name-hint.gperf" {"get_time", "", cxx11}, -#line 179 "std-name-hint.gperf" +#line 181 "std-name-hint.gperf" {"reference_wrapper", "", cxx11}, -#line 248 "std-name-hint.gperf" +#line 250 "std-name-hint.gperf" {"end", "", cxx11}, -#line 440 "std-name-hint.gperf" +#line 442 "std-name-hint.gperf" {"char_traits", "", cxx98}, -#line 219 "std-name-hint.gperf" +#line 221 "std-name-hint.gperf" {"oct", "", cxx98}, -#line 381 "std-name-hint.gperf" +#line 383 "std-name-hint.gperf" {"source_location", "", cxx20}, -#line 187 "std-name-hint.gperf" +#line 189 "std-name-hint.gperf" {"packaged_task", "", cxx11}, #line 79 "std-name-hint.gperf" {"chrono::parse", "", cxx20}, -#line 141 "std-name-hint.gperf" +#line 143 "std-name-hint.gperf" {"format_error", "", cxx20}, -#line 283 "std-name-hint.gperf" +#line 285 "std-name-hint.gperf" {"enable_shared_from_this", "", cxx11}, -#line 172 "std-name-hint.gperf" +#line 174 "std-name-hint.gperf" {"bind_front", "", cxx20}, -#line 406 "std-name-hint.gperf" +#line 408 "std-name-hint.gperf" {"stringstream", "", cxx98}, -#line 131 "std-name-hint.gperf" +#line 133 "std-name-hint.gperf" {"expected", "", cxx23}, -#line 323 "std-name-hint.gperf" +#line 325 "std-name-hint.gperf" {"try_lock", "", cxx11}, -#line 470 "std-name-hint.gperf" +#line 472 "std-name-hint.gperf" {"make_error_condition", "", cxx11}, -#line 418 "std-name-hint.gperf" +#line 420 "std-name-hint.gperf" {"logic_error", "", cxx98}, -#line 329 "std-name-hint.gperf" +#line 331 "std-name-hint.gperf" {"launder", "", cxx17}, #line 61 "std-name-hint.gperf" {"chrono::duration_cast", "", cxx11}, -#line 280 "std-name-hint.gperf" +#line 282 "std-name-hint.gperf" {"destroy_at", "", cxx20}, -#line 527 "std-name-hint.gperf" +#line 529 "std-name-hint.gperf" {"in_place", "", cxx17}, -#line 347 "std-name-hint.gperf" +#line 349 "std-name-hint.gperf" {"make_optional", "", cxx17}, -#line 466 "std-name-hint.gperf" +#line 468 "std-name-hint.gperf" {"is_error_code_enum_v", "", cxx17}, -#line 344 "std-name-hint.gperf" +#line 346 "std-name-hint.gperf" {"numbers::sqrt2_v", "", cxx20}, -#line 345 "std-name-hint.gperf" +#line 347 "std-name-hint.gperf" {"numbers::sqrt3_v", "", cxx20}, -#line 530 "std-name-hint.gperf" +#line 532 "std-name-hint.gperf" {"in_place_t", "", cxx17}, #line 60 "std-name-hint.gperf" {"chrono::duration", "", cxx11}, -#line 468 "std-name-hint.gperf" +#line 470 "std-name-hint.gperf" {"is_error_condition_enum_v", "", cxx17}, -#line 525 "std-name-hint.gperf" +#line 527 "std-name-hint.gperf" {"exchange", "", cxx14}, -#line 281 "std-name-hint.gperf" +#line 283 "std-name-hint.gperf" {"destroy_n", "", cxx20}, -#line 206 "std-name-hint.gperf" +#line 208 "std-name-hint.gperf" {"defaultfloat", "", cxx11}, -#line 514 "std-name-hint.gperf" +#line 516 "std-name-hint.gperf" {"unordered_multiset", "", cxx11}, #line 89 "std-name-hint.gperf" {"chrono::time_zone", "", cxx20}, -#line 356 "std-name-hint.gperf" +#line 358 "std-name-hint.gperf" {"noemit_on_flush", "", cxx20}, -#line 408 "std-name-hint.gperf" +#line 410 "std-name-hint.gperf" {"wostringstream", "", cxx98}, -#line 317 "std-name-hint.gperf" +#line 319 "std-name-hint.gperf" {"mutex", "", cxx11}, #line 87 "std-name-hint.gperf" {"chrono::time_point", "", cxx11}, -#line 393 "std-name-hint.gperf" +#line 395 "std-name-hint.gperf" {"spanstream", "", cxx23}, #line 88 "std-name-hint.gperf" {"chrono::time_point_cast", "", cxx11}, -#line 511 "std-name-hint.gperf" +#line 513 "std-name-hint.gperf" {"unordered_map", "", cxx11}, -#line 192 "std-name-hint.gperf" +#line 194 "std-name-hint.gperf" {"get_money", "", cxx11}, -#line 512 "std-name-hint.gperf" +#line 514 "std-name-hint.gperf" {"unordered_multimap", "", cxx11}, -#line 529 "std-name-hint.gperf" +#line 531 "std-name-hint.gperf" {"in_place_index_t", "", cxx17}, -#line 334 "std-name-hint.gperf" +#line 336 "std-name-hint.gperf" {"numbers::egamma_v", "", cxx20}, -#line 411 "std-name-hint.gperf" +#line 413 "std-name-hint.gperf" {"stack", "", cxx98}, -#line 465 "std-name-hint.gperf" +#line 467 "std-name-hint.gperf" {"is_error_code_enum", "", cxx11}, -#line 546 "std-name-hint.gperf" +#line 548 "std-name-hint.gperf" {"unreachable", "", cxx23}, #line 81 "std-name-hint.gperf" {"chrono::remote_version", "", cxx20}, -#line 205 "std-name-hint.gperf" +#line 207 "std-name-hint.gperf" {"dec", "", cxx98}, -#line 467 "std-name-hint.gperf" +#line 469 "std-name-hint.gperf" {"is_error_condition_enum", "", cxx11}, #line 58 "std-name-hint.gperf" {"chrono::clock_cast", "", cxx20}, @@ -704,143 +706,143 @@ std_name_hint_lookup::find (const char *str, size_t len) {"atomic", "", cxx11}, #line 64 "std-name-hint.gperf" {"chrono::get_leap_second_info", "", cxx20}, -#line 396 "std-name-hint.gperf" - {"wspanbuf", "", cxx23}, #line 398 "std-name-hint.gperf" + {"wspanbuf", "", cxx23}, +#line 400 "std-name-hint.gperf" {"basic_istringstream", "", cxx98}, -#line 155 "std-name-hint.gperf" +#line 157 "std-name-hint.gperf" {"vformat_to", "", cxx20}, -#line 294 "std-name-hint.gperf" +#line 296 "std-name-hint.gperf" {"static_pointer_cast", "", cxx11}, #line 59 "std-name-hint.gperf" {"chrono::days", "", cxx20}, -#line 208 "std-name-hint.gperf" +#line 210 "std-name-hint.gperf" {"hex", "", cxx98}, -#line 293 "std-name-hint.gperf" +#line 295 "std-name-hint.gperf" {"shared_ptr", "", cxx11}, -#line 127 "std-name-hint.gperf" +#line 129 "std-name-hint.gperf" {"make_exception_ptr", "", cxx11}, -#line 257 "std-name-hint.gperf" +#line 259 "std-name-hint.gperf" {"ostreambuf_iterator", "", cxx98}, -#line 475 "std-name-hint.gperf" +#line 477 "std-name-hint.gperf" {"thread", "", cxx11}, -#line 358 "std-name-hint.gperf" +#line 360 "std-name-hint.gperf" {"wostream", "", cxx98}, #line 94 "std-name-hint.gperf" {"chrono::years", "", cxx20}, -#line 326 "std-name-hint.gperf" +#line 328 "std-name-hint.gperf" {"bad_alloc", "", cxx98}, -#line 133 "std-name-hint.gperf" +#line 135 "std-name-hint.gperf" {"basic_format_arg", "", cxx20}, -#line 137 "std-name-hint.gperf" +#line 139 "std-name-hint.gperf" {"basic_format_string", "", cxx20}, -#line 277 "std-name-hint.gperf" +#line 279 "std-name-hint.gperf" {"construct_at", "", cxx20}, -#line 444 "std-name-hint.gperf" - {"stol", "", cxx11}, #line 446 "std-name-hint.gperf" + {"stol", "", cxx11}, +#line 448 "std-name-hint.gperf" {"stoll", "", cxx11}, -#line 447 "std-name-hint.gperf" +#line 449 "std-name-hint.gperf" {"stoul", "", cxx11}, -#line 448 "std-name-hint.gperf" +#line 450 "std-name-hint.gperf" {"stoull", "", cxx11}, -#line 395 "std-name-hint.gperf" +#line 397 "std-name-hint.gperf" {"wospanstream", "", cxx23}, -#line 367 "std-name-hint.gperf" +#line 369 "std-name-hint.gperf" {"ranges::enable_view", "", cxx20}, -#line 503 "std-name-hint.gperf" +#line 505 "std-name-hint.gperf" {"type_identity_t", "", cxx20}, -#line 230 "std-name-hint.gperf" +#line 232 "std-name-hint.gperf" {"cin", "", cxx98}, -#line 404 "std-name-hint.gperf" +#line 406 "std-name-hint.gperf" {"ostringstream", "", cxx98}, #line 104 "std-name-hint.gperf" {"complex_literals", "", cxx14}, #line 107 "std-name-hint.gperf" {"condition_variable_any", "", cxx11}, -#line 441 "std-name-hint.gperf" +#line 443 "std-name-hint.gperf" {"stod", "", cxx11}, -#line 445 "std-name-hint.gperf" +#line 447 "std-name-hint.gperf" {"stold", "", cxx11}, #line 73 "std-name-hint.gperf" {"chrono::locate_zone", "", cxx20}, #line 72 "std-name-hint.gperf" {"chrono::local_t", "", cxx20}, -#line 450 "std-name-hint.gperf" +#line 452 "std-name-hint.gperf" {"to_string", "", cxx17}, -#line 545 "std-name-hint.gperf" +#line 547 "std-name-hint.gperf" {"to_underlying", "", cxx23}, -#line 245 "std-name-hint.gperf" +#line 247 "std-name-hint.gperf" {"const_iterator", "", cxx23}, -#line 520 "std-name-hint.gperf" +#line 522 "std-name-hint.gperf" {"cmp_greater_equal", "", cxx20}, #line 83 "std-name-hint.gperf" {"chrono::seconds", "", cxx11}, -#line 279 "std-name-hint.gperf" +#line 281 "std-name-hint.gperf" {"destroy", "", cxx20}, -#line 244 "std-name-hint.gperf" +#line 246 "std-name-hint.gperf" {"common_iterator", "", cxx20}, -#line 477 "std-name-hint.gperf" +#line 479 "std-name-hint.gperf" {"apply", "", cxx17}, #line 74 "std-name-hint.gperf" {"chrono::microseconds", "", cxx11}, -#line 449 "std-name-hint.gperf" +#line 451 "std-name-hint.gperf" {"string", "", cxx98}, -#line 253 "std-name-hint.gperf" +#line 255 "std-name-hint.gperf" {"iterator_traits", "", cxx98}, -#line 531 "std-name-hint.gperf" +#line 533 "std-name-hint.gperf" {"in_place_type", "", cxx17}, #line 63 "std-name-hint.gperf" {"chrono::from_stream", "", cxx20}, #line 118 "std-name-hint.gperf" {"uint_least8_t", "", cxx11}, -#line 246 "std-name-hint.gperf" +#line 248 "std-name-hint.gperf" {"counted_iterator", "", cxx20}, -#line 182 "std-name-hint.gperf" +#line 184 "std-name-hint.gperf" {"unwrap_reference", "", cxx20}, -#line 532 "std-name-hint.gperf" +#line 534 "std-name-hint.gperf" {"in_place_type_t", "", cxx17}, #line 117 "std-name-hint.gperf" {"uint_least64_t", "", cxx11}, -#line 454 "std-name-hint.gperf" +#line 456 "std-name-hint.gperf" {"u8string", "", cxx20}, -#line 183 "std-name-hint.gperf" +#line 185 "std-name-hint.gperf" {"unwrap_reference_t", "", cxx20}, #line 116 "std-name-hint.gperf" {"uint_least32_t", "", cxx11}, -#line 296 "std-name-hint.gperf" +#line 298 "std-name-hint.gperf" {"uninitialized_construct_using_allocator", "", cxx20}, -#line 231 "std-name-hint.gperf" +#line 233 "std-name-hint.gperf" {"clog", "", cxx98}, -#line 315 "std-name-hint.gperf" +#line 317 "std-name-hint.gperf" {"lock", "", cxx11}, -#line 252 "std-name-hint.gperf" +#line 254 "std-name-hint.gperf" {"istreambuf_iterator", "", cxx98}, #line 51 "std-name-hint.gperf" {"atomic_ref", "", cxx20}, -#line 320 "std-name-hint.gperf" +#line 322 "std-name-hint.gperf" {"recursive_timed_mutex", "", cxx11}, #line 115 "std-name-hint.gperf" {"uint_least16_t", "", cxx11}, #line 69 "std-name-hint.gperf" {"chrono::hours", "", cxx11}, -#line 176 "std-name-hint.gperf" +#line 178 "std-name-hint.gperf" {"invoke_r", "", cxx23}, #line 53 "std-name-hint.gperf" {"atomic_uintmax_t", "", cxx20}, -#line 478 "std-name-hint.gperf" +#line 480 "std-name-hint.gperf" {"forward_as_tuple", "", cxx11}, -#line 330 "std-name-hint.gperf" +#line 332 "std-name-hint.gperf" {"nothrow", "", cxx98}, -#line 287 "std-name-hint.gperf" +#line 289 "std-name-hint.gperf" {"make_shared_for_overwrite", "", cxx20}, -#line 420 "std-name-hint.gperf" +#line 422 "std-name-hint.gperf" {"overflow_error", "", cxx98}, -#line 236 "std-name-hint.gperf" +#line 238 "std-name-hint.gperf" {"wcout", "", cxx98}, -#line 402 "std-name-hint.gperf" +#line 404 "std-name-hint.gperf" {"istringstream", "", cxx98}, -#line 403 "std-name-hint.gperf" +#line 405 "std-name-hint.gperf" {"istringstream", "", cxx98}, #line 71 "std-name-hint.gperf" {"chrono::leap_second_info", "", cxx20}, @@ -848,75 +850,75 @@ std_name_hint_lookup::find (const char *str, size_t len) {"atomic_signed_lock_free", "", cxx11}, #line 120 "std-name-hint.gperf" {"uintptr_t", "", cxx11}, -#line 297 "std-name-hint.gperf" +#line 299 "std-name-hint.gperf" {"unique_ptr", "", cxx11}, -#line 199 "std-name-hint.gperf" +#line 201 "std-name-hint.gperf" {"setfill", "", cxx98}, -#line 234 "std-name-hint.gperf" +#line 236 "std-name-hint.gperf" {"wcin", "", cxx98}, -#line 533 "std-name-hint.gperf" +#line 535 "std-name-hint.gperf" {"in_range", "", cxx20}, -#line 464 "std-name-hint.gperf" +#line 466 "std-name-hint.gperf" {"generic_category", "", cxx11}, -#line 409 "std-name-hint.gperf" +#line 411 "std-name-hint.gperf" {"wstringbuf", "", cxx98}, -#line 461 "std-name-hint.gperf" +#line 463 "std-name-hint.gperf" {"error_category", "", cxx11}, -#line 502 "std-name-hint.gperf" +#line 504 "std-name-hint.gperf" {"type_identity", "", cxx20}, -#line 278 "std-name-hint.gperf" +#line 280 "std-name-hint.gperf" {"default_delete", "", cxx11}, #line 84 "std-name-hint.gperf" {"chrono::steady_clock", "", cxx11}, -#line 227 "std-name-hint.gperf" +#line 229 "std-name-hint.gperf" {"uppercase", "", cxx98}, -#line 169 "std-name-hint.gperf" +#line 171 "std-name-hint.gperf" {"ofstream", "", cxx98}, #line 67 "std-name-hint.gperf" {"chrono::gps_clock", "", cxx20}, #line 85 "std-name-hint.gperf" {"chrono::system_clock", "", cxx11}, -#line 157 "std-name-hint.gperf" +#line 159 "std-name-hint.gperf" {"wformat_context", "", cxx20}, -#line 261 "std-name-hint.gperf" +#line 263 "std-name-hint.gperf" {"list", "", cxx98}, -#line 319 "std-name-hint.gperf" +#line 321 "std-name-hint.gperf" {"recursive_mutex", "", cxx11}, -#line 233 "std-name-hint.gperf" +#line 235 "std-name-hint.gperf" {"wcerr", "", cxx98}, -#line 536 "std-name-hint.gperf" +#line 538 "std-name-hint.gperf" {"integer_sequence", "", cxx14}, -#line 526 "std-name-hint.gperf" +#line 528 "std-name-hint.gperf" {"forward", "", cxx11}, -#line 299 "std-name-hint.gperf" +#line 301 "std-name-hint.gperf" {"uses_allocator_construction_args", "", cxx20}, -#line 207 "std-name-hint.gperf" +#line 209 "std-name-hint.gperf" {"fixed", "", cxx98}, -#line 423 "std-name-hint.gperf" +#line 425 "std-name-hint.gperf" {"underflow_error", "", cxx98}, -#line 271 "std-name-hint.gperf" +#line 273 "std-name-hint.gperf" {"allocator_arg", "", cxx11}, -#line 221 "std-name-hint.gperf" +#line 223 "std-name-hint.gperf" {"scientific", "", cxx98}, -#line 196 "std-name-hint.gperf" +#line 198 "std-name-hint.gperf" {"quoted", "", cxx14}, -#line 282 "std-name-hint.gperf" +#line 284 "std-name-hint.gperf" {"dynamic_pointer_cast", "", cxx11}, -#line 518 "std-name-hint.gperf" +#line 520 "std-name-hint.gperf" {"cmp_equal", "", cxx20}, #line 111 "std-name-hint.gperf" {"uint_fast16_t", "", cxx11}, -#line 171 "std-name-hint.gperf" +#line 173 "std-name-hint.gperf" {"bind", "", cxx11}, -#line 300 "std-name-hint.gperf" +#line 302 "std-name-hint.gperf" {"uses_allocator_v", "", cxx17}, #line 75 "std-name-hint.gperf" {"chrono::milliseconds", "", cxx11}, -#line 158 "std-name-hint.gperf" +#line 160 "std-name-hint.gperf" {"wformat_parse_context", "", cxx20}, -#line 523 "std-name-hint.gperf" +#line 525 "std-name-hint.gperf" {"cmp_not_equal", "", cxx20}, -#line 298 "std-name-hint.gperf" +#line 300 "std-name-hint.gperf" {"uses_allocator", "", cxx11}, #line 112 "std-name-hint.gperf" {"uint_fast32_t", "", cxx11}, @@ -924,87 +926,87 @@ std_name_hint_lookup::find (const char *str, size_t len) {"chrono::tzdb_list", "", cxx20}, #line 80 "std-name-hint.gperf" {"chrono::reload_tzdb", "", cxx20}, -#line 268 "std-name-hint.gperf" +#line 270 "std-name-hint.gperf" {"allocate_shared", "", cxx11}, #line 113 "std-name-hint.gperf" {"uint_fast64_t", "", cxx11}, #line 98 "std-name-hint.gperf" {"strong_equality", "", cxx20}, -#line 210 "std-name-hint.gperf" +#line 212 "std-name-hint.gperf" {"internal", "", cxx98}, #line 90 "std-name-hint.gperf" {"chrono::tzdb", "", cxx20}, -#line 417 "std-name-hint.gperf" +#line 419 "std-name-hint.gperf" {"length_error", "", cxx98}, -#line 543 "std-name-hint.gperf" +#line 545 "std-name-hint.gperf" {"piecewise_construct", "", cxx11}, -#line 544 "std-name-hint.gperf" +#line 546 "std-name-hint.gperf" {"piecewise_construct_t", "", cxx11}, -#line 168 "std-name-hint.gperf" +#line 170 "std-name-hint.gperf" {"ifstream", "", cxx98}, -#line 431 "std-name-hint.gperf" +#line 433 "std-name-hint.gperf" {"stop_callback", "", cxx20}, -#line 452 "std-name-hint.gperf" +#line 454 "std-name-hint.gperf" {"u16string", "", cxx11}, -#line 419 "std-name-hint.gperf" +#line 421 "std-name-hint.gperf" {"out_of_range", "", cxx98}, -#line 453 "std-name-hint.gperf" +#line 455 "std-name-hint.gperf" {"u32string", "", cxx11}, -#line 496 "std-name-hint.gperf" +#line 498 "std-name-hint.gperf" {"invoke_result", "", cxx17}, -#line 497 "std-name-hint.gperf" +#line 499 "std-name-hint.gperf" {"invoke_result_t", "", cxx17}, -#line 290 "std-name-hint.gperf" +#line 292 "std-name-hint.gperf" {"owner_less", "", cxx11}, -#line 371 "std-name-hint.gperf" +#line 373 "std-name-hint.gperf" {"binary_semaphore", "", cxx20}, -#line 415 "std-name-hint.gperf" +#line 417 "std-name-hint.gperf" {"domain_error", "", cxx98}, -#line 369 "std-name-hint.gperf" +#line 371 "std-name-hint.gperf" {"scoped_allocator_adaptor", "", cxx11}, -#line 284 "std-name-hint.gperf" +#line 286 "std-name-hint.gperf" {"get_deleter", "", cxx11}, #line 54 "std-name-hint.gperf" {"atomic_unsigned_lock_free", "", cxx11}, -#line 378 "std-name-hint.gperf" +#line 380 "std-name-hint.gperf" {"shared_mutex", "", cxx17}, -#line 379 "std-name-hint.gperf" +#line 381 "std-name-hint.gperf" {"shared_timed_mutex", "", cxx14}, -#line 143 "std-name-hint.gperf" +#line 145 "std-name-hint.gperf" {"format_string", "", cxx20}, -#line 407 "std-name-hint.gperf" +#line 409 "std-name-hint.gperf" {"wistringstream", "", cxx98}, #line 92 "std-name-hint.gperf" {"chrono::utc_clock", "", cxx20}, -#line 528 "std-name-hint.gperf" +#line 530 "std-name-hint.gperf" {"in_place_index", "", cxx17}, #line 99 "std-name-hint.gperf" {"strong_ordering", "", cxx20}, -#line 522 "std-name-hint.gperf" +#line 524 "std-name-hint.gperf" {"cmp_less_equal", "", cxx20}, #line 86 "std-name-hint.gperf" {"chrono::tai_clock", "", cxx20}, -#line 181 "std-name-hint.gperf" +#line 183 "std-name-hint.gperf" {"unwrap_ref_decay_t", "", cxx20}, #line 70 "std-name-hint.gperf" {"chrono::leap_second", "", cxx20}, -#line 129 "std-name-hint.gperf" +#line 131 "std-name-hint.gperf" {"uncaught_exceptions", "", cxx17}, -#line 247 "std-name-hint.gperf" +#line 249 "std-name-hint.gperf" {"distance", "", cxx98}, #line 103 "std-name-hint.gperf" {"complex", "", cxx98}, -#line 349 "std-name-hint.gperf" +#line 351 "std-name-hint.gperf" {"optional", "", cxx17}, -#line 318 "std-name-hint.gperf" +#line 320 "std-name-hint.gperf" {"once_flag", "", cxx11}, -#line 316 "std-name-hint.gperf" +#line 318 "std-name-hint.gperf" {"lock_guard", "", cxx11}, -#line 394 "std-name-hint.gperf" +#line 396 "std-name-hint.gperf" {"wispanstream", "", cxx23}, #line 101 "std-name-hint.gperf" {"weak_ordering", "", cxx20}, -#line 492 "std-name-hint.gperf" +#line 494 "std-name-hint.gperf" {"disjunction", "", cxx17}, #line 119 "std-name-hint.gperf" {"uintmax_t", "", cxx11}, @@ -1012,47 +1014,47 @@ std_name_hint_lookup::find (const char *str, size_t len) {"weak_equality", "", cxx20}, #line 82 "std-name-hint.gperf" {"chrono::round", "", cxx17}, -#line 493 "std-name-hint.gperf" +#line 495 "std-name-hint.gperf" {"disjunction_v", "", cxx17}, -#line 286 "std-name-hint.gperf" +#line 288 "std-name-hint.gperf" {"make_shared", "", cxx11}, -#line 180 "std-name-hint.gperf" +#line 182 "std-name-hint.gperf" {"unwrap_ref_decay", "", cxx20}, -#line 524 "std-name-hint.gperf" +#line 526 "std-name-hint.gperf" {"declval", "", cxx11}, #line 114 "std-name-hint.gperf" {"uint_fast8_t", "", cxx11}, -#line 235 "std-name-hint.gperf" +#line 237 "std-name-hint.gperf" {"wclog", "", cxx98}, #line 62 "std-name-hint.gperf" {"chrono::file_clock", "", cxx20}, -#line 416 "std-name-hint.gperf" +#line 418 "std-name-hint.gperf" {"invalid_argument", "", cxx98}, -#line 455 "std-name-hint.gperf" +#line 457 "std-name-hint.gperf" {"wstring", "", cxx98}, -#line 377 "std-name-hint.gperf" +#line 379 "std-name-hint.gperf" {"shared_lock", "", cxx14}, -#line 156 "std-name-hint.gperf" +#line 158 "std-name-hint.gperf" {"wformat_args", "", cxx20}, #line 68 "std-name-hint.gperf" {"chrono::high_resolution_clock", "", cxx11}, -#line 474 "std-name-hint.gperf" +#line 476 "std-name-hint.gperf" {"this_thread", "", cxx11}, #line 97 "std-name-hint.gperf" {"partial_ordering", "", cxx20}, -#line 159 "std-name-hint.gperf" +#line 161 "std-name-hint.gperf" {"wformat_string", "", cxx20}, -#line 458 "std-name-hint.gperf" +#line 460 "std-name-hint.gperf" {"string_view", "", cxx17}, -#line 274 "std-name-hint.gperf" +#line 276 "std-name-hint.gperf" {"assume_aligned", "", cxx20}, -#line 324 "std-name-hint.gperf" +#line 326 "std-name-hint.gperf" {"unique_lock", "", cxx11}, -#line 322 "std-name-hint.gperf" +#line 324 "std-name-hint.gperf" {"timed_mutex", "", cxx11}, -#line 321 "std-name-hint.gperf" +#line 323 "std-name-hint.gperf" {"scoped_lock", "", cxx17}, -#line 473 "std-name-hint.gperf" +#line 475 "std-name-hint.gperf" {"jthread", "", cxx20} }; @@ -1068,8 +1070,8 @@ std_name_hint_lookup::find (const char *str, size_t len) 6, 7, -1, -1, -1, -1, -1, 8, -1, -1, 9, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 11, -533, 14, - -443, -2, -1, 15, 16, -1, -1, + -1, -1, -1, -1, 11, -534, 14, + -444, -2, -1, 15, 16, -1, -1, -1, -1, -1, -1, 17, 18, 19, -1, -1, 20, -1, 21, 22, 23, -1, 24, 25, -1, -1, 26, -1, @@ -1107,7 +1109,7 @@ std_name_hint_lookup::find (const char *str, size_t len) -1, 106, 107, -1, 108, -1, -1, -1, -1, 109, 110, -1, 111, -1, 112, -1, 113, -1, -1, 114, 115, - -1, -801, -339, -2, -1, 118, 119, + -1, -802, -340, -2, -1, 118, 119, -1, -1, 120, -1, 121, 122, -1, -1, 123, -1, -1, 124, 125, -1, -1, -1, -1, -1, -1, -1, 126, @@ -1130,146 +1132,146 @@ std_name_hint_lookup::find (const char *str, size_t len) 169, -1, 170, -1, -1, 171, 172, 173, -1, -1, 174, -1, -1, -1, 175, -1, 176, -1, -1, -1, 177, - -1, -1, -963, -277, -2, 180, 181, + -1, -1, -964, -278, -2, 180, 181, -1, 182, 183, -1, -1, -1, 184, -1, -1, 185, 186, -1, -1, 187, 188, -1, 189, -1, -1, 190, -1, 191, 192, 193, 194, 195, -1, 196, 197, -1, -1, 198, -1, 199, -1, -1, 200, 201, -1, 202, 203, -1, - 204, 205, -1, -1, -1, -1, -1, - 206, -1, 207, -1, 208, 209, 210, - -1, -1, -1, -1, -1, 211, 212, - 213, 214, -1, 215, 216, 217, -1, - -1, 218, -1, -1, 219, 220, -1, - -1, 221, 222, 223, -1, -1, 224, - 225, 226, -1, 227, -1, -1, 228, - 229, 230, 231, -1, -1, -1, 232, - -1, 233, 234, -1, -1, -1, -1, - 235, 236, 237, -1, 238, -1, 239, - 240, 241, 242, 243, 244, -1, 245, - 246, -1, -1, -1, -1, -1, 247, - -1, 248, -1, 249, -1103, -1, 252, - 253, 254, 255, -205, -2, 256, -1, - -1, 257, 258, -1, 259, -1, -1, - 260, 261, 262, 263, -1, -1, -1, - 264, 265, -1, 266, -1, -1, -1, - 267, 268, 269, 270, -1, -1, 271, - -1, -1, -1, -1, 272, 273, 274, - 275, -1, 276, -1, -1, 277, -1, - -1, -1, -1, -1, -1, -1, 278, - -1, 279, -1, 280, 281, -1, -1, - -1, 282, 283, 284, 285, -1, -1, - -1, 286, -1, -1, 287, 288, -1, - 289, -1, 290, -1, -1, 291, 292, - -1, 293, -1, -1, 294, -1, -1, - 295, -1, -1, -1, 296, -1201, 299, - 300, -1, 301, -158, -2, -1, -1, - -1, 302, 303, -1, -1, -1, -1, - 304, -1, -1, 305, 306, -1, -1, - -1, 307, 308, -1, -1, -1, -1, - 309, 310, 311, -1, -1, -1, 312, - 313, -1, -1, 314, 315, 316, 317, - -1, 318, 319, -1, -1, 320, -1, + 204, 205, -1, -1, -1, 206, -1, + 207, -1, 208, -1, 209, 210, 211, + -1, -1, -1, -1, -1, 212, 213, + 214, 215, -1, 216, 217, 218, -1, + -1, 219, -1, -1, 220, 221, -1, + -1, 222, 223, 224, -1, -1, 225, + 226, 227, -1, 228, -1, -1, 229, + 230, 231, 232, -1, -1, -1, 233, + -1, 234, 235, -1, -1, -1, -1, + 236, 237, 238, -1, 239, -1, 240, + 241, 242, 243, 244, 245, -1, 246, + 247, -1, -1, -1, -1, -1, 248, + -1, 249, -1, 250, -1104, -1, 253, + 254, 255, 256, -205, -2, 257, -1, + -1, 258, 259, -1, 260, -1, -1, + 261, 262, 263, 264, -1, -1, -1, + 265, 266, -1, 267, -1, -1, -1, + 268, 269, 270, 271, -1, -1, 272, + -1, -1, -1, -1, 273, 274, 275, + 276, -1, 277, -1, -1, 278, -1, + -1, -1, -1, -1, -1, -1, 279, + -1, 280, -1, 281, 282, -1, -1, + -1, 283, 284, 285, 286, -1, -1, + -1, 287, -1, -1, 288, 289, -1, + 290, -1, 291, -1, -1, 292, 293, + -1, 294, -1, -1, 295, -1, -1, + 296, -1, -1, -1, 297, -1202, 300, + 301, -1, 302, -158, -2, -1, -1, + -1, 303, 304, -1, -1, -1, -1, + 305, -1, -1, 306, 307, -1, -1, + -1, 308, 309, -1, -1, -1, -1, + 310, 311, 312, -1, -1, -1, 313, + 314, -1, -1, 315, 316, 317, 318, + -1, 319, 320, -1, -1, 321, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 321, 322, 323, 324, 325, - -1, 326, -1, 327, 328, -1, 329, - -1, 330, 331, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 332, 333, - -1, 334, -1, 335, 336, 337, -1, - -1, 338, -1, -1, -1, -1, -1, - -1, 339, -1, 340, -1, -1, 341, - -1, -1, -1, -1, 342, -1, -1, - -1, -1, -1, 343, -1, -1, -1, - -1, -1, 344, 345, 346, -1325, 349, - 350, -108, -2, -1, -1, -1, -1, - -1, -1, -1, -1, 351, 352, -1, - 353, -1, 354, -1, 355, 356, -1, - -1, -1, -1, -1, 357, -1, 358, + -1, -1, 322, 323, 324, 325, 326, + -1, 327, -1, 328, 329, -1, 330, + -1, 331, 332, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 333, 334, + -1, 335, -1, 336, 337, 338, -1, + -1, 339, -1, -1, -1, -1, -1, + -1, 340, -1, 341, -1, -1, 342, + -1, -1, -1, -1, 343, -1, -1, + -1, -1, -1, 344, -1, -1, -1, + -1, -1, 345, 346, 347, -1326, 350, + 351, -108, -2, -1, -1, -1, -1, + -1, -1, -1, -1, 352, 353, -1, + 354, -1, 355, -1, 356, 357, -1, + -1, -1, -1, -1, 358, -1, 359, -1, -1, -1, -1, -1, -1, -1, - 359, 360, -1, -1, -1, -1, -1, - -1, 361, -1, -1, -1, -1, -1, - -1, -1, 362, -1, 363, -1, 364, - -1, -1, 365, -1, 366, -1, -1, - -1, -1, -1, 367, 368, -1, -1, - -1, -1, 369, 370, 371, -1, -1, - -1, -1, 372, -1, -1, -1, -1, - -1, -1, -1, 373, -1, -1, -1, - -1, 374, 375, -1, 376, -1, -1, + 360, 361, -1, -1, -1, -1, -1, + -1, 362, -1, -1, -1, -1, -1, + -1, -1, 363, -1, 364, -1, 365, + -1, -1, 366, -1, 367, -1, -1, + -1, -1, -1, 368, 369, -1, -1, + -1, -1, 370, 371, 372, -1, -1, + -1, -1, 373, -1, -1, -1, -1, + -1, -1, -1, 374, -1, -1, -1, + -1, 375, 376, -1, 377, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 377, -1, 378, -1, - -1, -1, 379, 380, 381, -1, 382, - -1, 383, 384, -1, 385, -1, -1, - 386, -1, -1, -1, 387, -1, 388, - -1, 389, 390, -1, -1, -1, -1, - 391, -1, 392, -1, -1, 393, -1, - -1, -1, -1, -1, -1, 394, -1, - 395, -1, -1, -1, -1, 396, -1, - 397, -1, 398, -1, -1, -1, -1, - 399, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 378, -1, 379, -1, + -1, -1, 380, 381, 382, -1, 383, + -1, 384, 385, -1, 386, -1, -1, + 387, -1, -1, -1, 388, -1, 389, + -1, 390, 391, -1, -1, -1, -1, + 392, -1, 393, -1, -1, 394, -1, + -1, -1, -1, -1, -1, 395, -1, + 396, -1, -1, -1, -1, 397, -1, + 398, -1, 399, -1, -1, -1, -1, + 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 400, -1, -1, -1, -1, - -1, -1, -1, 401, -1, 402, 403, - -1, 404, -1, -1, -1, -1, 405, - 406, 407, -1, 408, -1, -1, -1, - -1, 409, -1, -1, -1, -1, -1, + -1, -1, 401, -1, -1, -1, -1, + -1, -1, -1, 402, -1, 403, 404, + -1, 405, -1, -1, -1, -1, 406, + 407, 408, -1, 409, -1, -1, -1, + -1, 410, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 410, -1, -1, -1, -1, -1, -1, 411, -1, -1, -1, -1, -1, - 412, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 413, - -1, -1, 414, -1, -1, -1, -1, - -1, -1, 415, 416, -1, -1, -1, + -1, 412, -1, -1, -1, -1, -1, + 413, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 414, + -1, -1, 415, -1, -1, -1, -1, + -1, -1, 416, 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 417, -1, - -1, -1, 418, -1, -1, -1, -1, - -1, 419, -1, -1, -1, -1, 420, - -1, -1, -1, 421, -1, -1, -1, - -1, 422, -1, -1, -1, -1, -1, - -1, -1, -1, 423, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 424, -1, -1, 425, - -1, -1, -1, 426, -1, -1, 427, - -1, 428, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 418, -1, + -1, -1, 419, -1, -1, -1, -1, + -1, 420, -1, -1, -1, -1, 421, + -1, -1, -1, 422, -1, -1, -1, + -1, 423, -1, -1, -1, -1, -1, + -1, -1, -1, 424, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 425, -1, -1, 426, + -1, -1, -1, 427, -1, -1, 428, -1, 429, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 430, -1, -1, -1, -1, -1, -1, + -1, 430, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 431, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 431, -1, -1, -1, 432, -1, -1, -1, -1, -1, -1, -1, - 433, -1, -1, -1, -1, 434, -1, + -1, -1, 432, -1, -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, + 434, -1, -1, -1, -1, 435, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 435, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 436, 437, + -1, -1, 436, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 438, -1, -1, -1, -1, - -1, 439, 440, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 437, 438, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 441, -1, -1, -1, + -1, -1, 439, -1, -1, -1, -1, + -1, 440, 441, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 442, -1, -1, -1, - 443, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, - -1, -1, 444, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 445, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 443, -1, -1, -1, + 444, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 445, -1, -1, -1, -1, -1, -1, -1, -1, -1, 446, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 447, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 447, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 449, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 450, -1, + -1, -1, -1, -1, -1, -1, 449, + -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, + -1, 450, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 451, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1277,12 +1279,12 @@ std_name_hint_lookup::find (const char *str, size_t len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 451, -1, -1, + -1, -1, -1, -1, 452, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 452, -1, - -1, -1, -1, -1, 453, -1, -1, + -1, -1, -1, -1, -1, 453, -1, + -1, -1, -1, -1, 454, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -1301,7 +1303,7 @@ std_name_hint_lookup::find (const char *str, size_t len) -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 454 + -1, 455 }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff --git a/libstdc++-v3/include/c_global/cstdlib b/libstdc++-v3/include/c_global/cstdlib index 5d83bafc93321..dd73c34a37ed0 100644 --- a/libstdc++-v3/include/c_global/cstdlib +++ b/libstdc++-v3/include/c_global/cstdlib @@ -185,6 +185,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION div(long __i, long __j) _GLIBCXX_NOTHROW { return ldiv(__i, __j); } #endif +#if __has_builtin (__builtin_observable) + inline void + observable() _GLIBCXX_NOTHROW { return __builtin_observable (); } +#endif _GLIBCXX_END_NAMESPACE_VERSION } // namespace From 919071041fd6bcb439c480afe7c60c2c4f0eaa75 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Sun, 27 Oct 2024 15:45:07 +0000 Subject: [PATCH 2/2] c++, contracts: Insert P1494 epoch markers after each contract check. This avoids the issue postulated in P1494 where UB in a contract check might invoke time-travelling optimisation that resulted in complete elision of the contract checks. As of now, we have not seen evidence of such time-travelling optimisations even when placing blatently UB checks. This is on by default but: -fcontract-disable-check-epochs disables it. We ignore the observable builtin when in a manifestly-constant context. Signed-off-by: Iain Sandoe --- gcc/c-family/c.opt | 4 ++++ gcc/cp/constexpr.cc | 4 ++++ gcc/cp/contracts.cc | 22 +++++++++++++++++----- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt index a8775ad9d6df4..e3f970696ca73 100644 --- a/gcc/c-family/c.opt +++ b/gcc/c-family/c.opt @@ -1844,6 +1844,10 @@ fcontract-disable-optimized-checks C++ Var(flag_contract_disable_optimized_checks) Init(0) -fcontract-disable-optimized-checks Disable optimisation of contract checks. +fcontract-disable-check-epochs +C++ Var(flag_contract_disable_check_epochs) Init(0) +-fcontract-disable-epoch-checks Disable insertion of epoch markers after each contract check. + fcoroutines C++ LTO Var(flag_coroutines) Enable C++ coroutines (experimental). diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc index 5c6696740fc94..48be717fa8537 100644 --- a/gcc/cp/constexpr.cc +++ b/gcc/cp/constexpr.cc @@ -1602,6 +1602,10 @@ cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun, /* These builtins shall be ignored during constant expression evaluation. */ return void_node; + case BUILT_IN_OBSERVABLE: + if (ctx->manifestly_const_eval == mce_true) + return void_node; + /* FALLTHROUGH */ case BUILT_IN_UNREACHABLE: case BUILT_IN_TRAP: if (!*non_constant_p && !ctx->quiet) diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc index bc0bbac4a2f67..69f47dbbbf1c5 100644 --- a/gcc/cp/contracts.cc +++ b/gcc/cp/contracts.cc @@ -2101,13 +2101,17 @@ build_contract_check (tree contract) /* Add the contract statement CONTRACT to the current block if valid. */ -static void +static bool emit_contract_statement (tree contract) { /* Only add valid contracts. */ - if (get_contract_semantic (contract) != CCS_INVALID - && CONTRACT_CONDITION (contract) != error_mark_node) - add_stmt (contract); + if (contract == error_mark_node + || CONTRACT_CONDITION (contract) == error_mark_node + || get_contract_semantic (contract) == CCS_INVALID) + return false; + + add_stmt (contract); + return true; } /* Generate the statement for the given contract attribute by adding the @@ -2180,7 +2184,15 @@ remap_and_emit_conditions (tree fn, tree condfn, tree_code code) { contract = copy_node (contract); remap_contract (fn, condfn, contract, /*duplicate_p=*/false); - emit_contract_statement (contract); + if (!emit_contract_statement (contract)) + continue; + if (flag_contract_disable_check_epochs) + continue; + /* Insert a std::observable () epoch marker. */ + tree fn = builtin_decl_explicit (BUILT_IN_OBSERVABLE); + releasing_vec vec; + fn = finish_call_expr (fn, &vec, false, false, tf_warning_or_error); + finish_expr_stmt (fn); } } }