From: GCC Administrator Date: Sat, 13 Jun 2020 00:16:25 +0000 (+0000) Subject: Daily bump. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8e3b453e0877288685695ca3e927a2da3b5f5b78;p=gcc.git Daily bump. --- diff --git a/ChangeLog b/ChangeLog index 90a8fec9a3c..8c254769017 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2020-06-12 Martin Liska + + * .gitignore: Add .clang-tidy. + 2020-06-08 Jason Merrill * configure.ac: Check AX_CXX_COMPILE_STDCXX if not bootstrapping. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2381eb6ccd4..7a13b05e117 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,133 @@ +2020-06-12 Marco Elver + + * gimplify.c (gimplify_function_tree): Optimize and do not emit + IFN_TSAN_FUNC_EXIT in a finally block if we do not need it. + * params.opt: Add --param=tsan-instrument-func-entry-exit=. + * tsan.c (instrument_memory_accesses): Make + fentry_exit_instrument bool depend on new param. + +2020-06-12 Felix Yang + + PR tree-optimization/95570 + * tree-vect-data-refs.c (vect_relevant_for_alignment_p): New function. + (vect_verify_datarefs_alignment): Call it to filter out data references + in the loop whose alignment is irrelevant. + (vect_get_peeling_costs_all_drs): Likewise. + (vect_peeling_supportable): Likewise. + (vect_enhance_data_refs_alignment): Likewise. + +2020-06-12 Richard Biener + + PR tree-optimization/95633 + * tree-vect-stmts.c (vectorizable_condition): Properly + guard the vec_else_clause access with EXTRACT_LAST_REDUCTION. + +2020-06-12 Martin Liška + + * cgraphunit.c (process_symver_attribute): Wrap weakref keyword. + * dbgcnt.c (dbg_cnt_set_limit_by_index): Do not print extra new + line. + * lto-wrapper.c (merge_and_complain): Wrap option names. + +2020-06-12 Kewen Lin + + * tree-vect-loop-manip.c (vect_set_loop_controls_directly): Rename + LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE. Rename + LOOP_VINFO_MASK_IV_TYPE to LOOP_VINFO_RGROUP_IV_TYPE. + (vect_set_loop_condition_masked): Renamed to ... + (vect_set_loop_condition_partial_vectors): ... this. Rename + LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE. Rename + vect_iv_limit_for_full_masking to vect_iv_limit_for_partial_vectors. + (vect_set_loop_condition_unmasked): Renamed to ... + (vect_set_loop_condition_normal): ... this. + (vect_set_loop_condition): Rename vect_set_loop_condition_unmasked to + vect_set_loop_condition_normal. Rename vect_set_loop_condition_masked + to vect_set_loop_condition_partial_vectors. + (vect_prepare_for_masked_peels): Rename LOOP_VINFO_MASK_COMPARE_TYPE + to LOOP_VINFO_RGROUP_COMPARE_TYPE. + * tree-vect-loop.c (vect_known_niters_smaller_than_vf): New, factored + out from ... + (vect_analyze_loop_costing): ... this. + (_loop_vec_info::_loop_vec_info): Rename mask_compare_type to + compare_type. + (vect_min_prec_for_max_niters): New, factored out from ... + (vect_verify_full_masking): ... this. Rename + vect_iv_limit_for_full_masking to vect_iv_limit_for_partial_vectors. + Rename LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE. + Rename LOOP_VINFO_MASK_IV_TYPE to LOOP_VINFO_RGROUP_IV_TYPE. + (vectorizable_reduction): Update some dumpings with partial + vectors instead of fully-masked. + (vectorizable_live_operation): Likewise. + (vect_iv_limit_for_full_masking): Renamed to ... + (vect_iv_limit_for_partial_vectors): ... this. + * tree-vect-stmts.c (check_load_store_masking): Renamed to ... + (check_load_store_for_partial_vectors): ... this. Update some + dumpings with partial vectors instead of fully-masked. + (vectorizable_store): Rename check_load_store_masking to + check_load_store_for_partial_vectors. + (vectorizable_load): Likewise. + * tree-vectorizer.h (LOOP_VINFO_MASK_COMPARE_TYPE): Renamed to ... + (LOOP_VINFO_RGROUP_COMPARE_TYPE): ... this. + (LOOP_VINFO_MASK_IV_TYPE): Renamed to ... + (LOOP_VINFO_RGROUP_IV_TYPE): ... this. + (vect_iv_limit_for_full_masking): Renamed to ... + (vect_iv_limit_for_partial_vectors): this. + (_loop_vec_info): Rename mask_compare_type to rgroup_compare_type. + Rename iv_type to rgroup_iv_type. + +2020-06-12 Richard Sandiford + + * recog.h (insn_gen_fn::f0, insn_gen_fn::f1, insn_gen_fn::f2) + (insn_gen_fn::f3, insn_gen_fn::f4, insn_gen_fn::f5, insn_gen_fn::f6) + (insn_gen_fn::f7, insn_gen_fn::f8, insn_gen_fn::f9, insn_gen_fn::f10) + (insn_gen_fn::f11, insn_gen_fn::f12, insn_gen_fn::f13) + (insn_gen_fn::f14, insn_gen_fn::f15, insn_gen_fn::f16): Delete. + (insn_gen_fn::operator()): Replace overloaded definitions with + a parameter-pack version. + +2020-06-12 H.J. Lu + + PR target/93492 + * config/i386/i386-features.c (rest_of_insert_endbranch): + Renamed to ... + (rest_of_insert_endbr_and_patchable_area): Change return type + to void. Add need_endbr and patchable_area_size arguments. + Don't call timevar_push nor timevar_pop. Replace + endbr_queued_at_entrance with insn_queued_at_entrance. Insert + UNSPECV_PATCHABLE_AREA for patchable area. + (pass_data_insert_endbranch): Renamed to ... + (pass_data_insert_endbr_and_patchable_area): This. Change + pass name to endbr_and_patchable_area. + (pass_insert_endbranch): Renamed to ... + (pass_insert_endbr_and_patchable_area): This. Add need_endbr + and patchable_area_size;. + (pass_insert_endbr_and_patchable_area::gate): Set and check + need_endbr and patchable_area_size. + (pass_insert_endbr_and_patchable_area::execute): Call + timevar_push and timevar_pop. Pass need_endbr and + patchable_area_size to rest_of_insert_endbr_and_patchable_area. + (make_pass_insert_endbranch): Renamed to ... + (make_pass_insert_endbr_and_patchable_area): This. + * config/i386/i386-passes.def: Replace pass_insert_endbranch + with pass_insert_endbr_and_patchable_area. + * config/i386/i386-protos.h (ix86_output_patchable_area): New. + (make_pass_insert_endbranch): Renamed to ... + (make_pass_insert_endbr_and_patchable_area): This. + * config/i386/i386.c (ix86_asm_output_function_label): Set + function_label_emitted to true. + (ix86_print_patchable_function_entry): New function. + (ix86_output_patchable_area): Likewise. + (x86_function_profiler): Replace endbr_queued_at_entrance with + insn_queued_at_entrance. Generate ENDBR only for TYPE_ENDBR. + Call ix86_output_patchable_area to generate patchable area if + needed. + (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY): New. + * config/i386/i386.h (queued_insn_type): New. + (machine_function): Add function_label_emitted. Replace + endbr_queued_at_entrance with insn_queued_at_entrance. + * config/i386/i386.md (UNSPECV_PATCHABLE_AREA): New. + (patchable_area): New. + 2020-06-11 Martin Liska * config/rs6000/rs6000.c (rs6000_density_test): Fix GNU coding diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 98278266c63..d540cbfb2c4 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20200612 +20200613 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a02459bb400..decf23f9155 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,319 @@ +2020-06-12 Steve Baird + + * sem_res.adb (Valid_Conversion): The simpler cases of + violations of the aforementioned 8.6 rule are already handled + correctly. These include cases where the operand of the type + conversion is an access parameter or a stand-alone object of an + anonymous access type. Add code to detect violations where the + operand of the type conversion is an access discriminant whose + accessibility level is tied to one of the other simpler cases. + This is implemented in a new function, + Valid_Conversion.Is_Discrim_Of_Bad_Access_Conversion_Argument, + which is called in place of the previous test. + +2020-06-12 Bob Duff + + * exp_attr.adb (Put_Image): Remove assertion. This assertion is + False in mixed-Ada-version programs. + * exp_put_image.adb (Tagged_Put_Image_Enabled): New flag to make + it easy to experiment with Put_Image on tagged types. False in + this version. + (Enable_Put_Image): Enable in pre-2020. Workarounds: Disable + for tagged types if Tagged_Put_Image_Enabled is False. Disable + for access-to-subprogram types. Disable if errors have been + detected, or Sink is unavailable. + (Preload_Sink): Move all conditionals here, from Sem_Ch10, so + they can be nearby related code in Enable_Put_Image. Load Sink + only if we have seen a tagged type. This removes the dilemma + about calling Preload_Sink when compiling the compiler, which + caused unwanted dependences. + * exp_put_image.ads (Preload_Sink): New formal Compilation_Unit, + needed to move all conditionals here, from Sem_Ch10. + * libgnat/a-stouut.adb (Put_UTF_8): Make this suitable for + inlining, so we don't get warnings about inlining in some tests. + And so it can be inlined! + * opt.ads (Tagged_Seen): New flag (see Preload_Sink). + * scng.adb (Scan): Set new Tagged_Seen flag. + * sem_ch10.adb (Analyze_Compilation_Unit): Move conditionals and + comments regarding Preload_Sink into Preload_Sink. + +2020-06-12 Arnaud Charlet + + * sem_res.adb (Resolve_Actuals): Check for AI12-0074. + +2020-06-12 Olivier Hainque + + * libgnat/s-secsta.ads (Memory_Alignment): New constant, memory + alignment for chunks and allocated blocks. Initialize to + Standard'Maximum_Alignment * 2. + (Chunk_Memory): Use it. + * libgnat/s-secsta.adb (Round_Up): Likewise. + +2020-06-12 Piotr Trojanek + + * par-prag.adb: Fix ordering. + * snames.ads-tmpl (Name_Test_Case, Pragma_Test_Case): Likewise. + * sem_prag.adb (Sig_Flags): Likewise. + +2020-06-12 Arnaud Charlet + + * sem_res.adb (Resolve_Entity_Name): Fix handling of expressions + containing array attributes wrt Ada 83 detection. + +2020-06-12 Steve Baird + + * sem_util.ads, sem_util.adb: Define 3 new Boolean-valued + functions - Statically_Denotes_Entity, + Statically_Denotes_Object, and Statically_Names_Object. The + first two were taken from sem_attr.adb. The term "statically + names" is defined in the Ada RM and the new function + Statically_Names_Object is intended to reflect that definition, + or more precisely, as described in a comment in the code, to + reflect the expected future definition of that term. + * sem_attr.adb: Delete functions Statically_Denotes_Object and + Statically_Denotes_Entity; these two functions have been moved + to package Sem_Util. Replace call to Statically_Denotes_Object + with a call to Statically_Names_Object as per AI12-0217 (a + binding interpretation, so no Ada_Version check). + * exp_ch9.adb (Expand_Entry_Barrier.Is_Simple_Barrier): Change + name of function (it was previously Is_Simple_Barrier_Name) + because the function should return True in the case of a static + expression; implement this requirement. Change function to + include a call to Statically_Names_Object so that, for Ada_2020 + and later, it will return True for appropriate subcomponent + names. + (Expand_Entry_Barrier.Is_Pure_Barrier): Handle + N_Indexed_Component and N_Selected_Component cases by calling + Statically_Names_Object. + (Expand_Entry_Barrier): Reorganize to treat Simple_Barriers and + Pure_Barriers more uniformly. Prevent cascaded errors. + +2020-06-12 Ed Schonberg + + * sem_ch12.adb (Find_Matching_Actual): Add guard on search loops + to detect a compilation error when using a compiler built + without assertions. + (Instantiate_Formal_Subprogram): Create a new subprogram name + for the actual only if formal has contract aspects and expansion + is enabled. + +2020-06-12 Eric Botcazou + + * exp_aggr.adb: Add with and use clauses for Sem_Mech. + (Get_Base_Object): New function to get the base object of a node. + (In_Place_Assign_OK): Add Target_Object parameter. Deal with a + qualified expression on entry. Remove short-circuit for array + aggregates with a single "others" choice. Do not look into the + components of the aggregate if the parent is an allocator. + (Check_Component): Add T_OK parameter and rewrite. + (Safe_Component): Invoke Check_Component with T_OK set to False. + (Convert_To_Assignments): Try to use an in-place assignment for + any target; for that, call Get_Base_Object on the target and pass + the result to In_Place_Assign_OK. + (Expand_Array_Aggregate): Use Parent_Kind and Parent_Node more + consistently. For an assignment, call Get_Base_Object on the + target and pass the result to In_Place_Assign_OK. + +2020-06-12 Dmitriy Anisimkov + + * socket.c (__gnat_minus_500ms): Use GetVersionEx to detect + Windows Server version. + * libgnat/g-sothco.ads (Minus_500ms_Windows_Timeout): Remade to + Boolean constant. + * libgnat/g-socket.adb (Set_Socket_Option): Use + Minus_500ms_Windows_Timeout constant instead of function call. + +2020-06-12 Arnaud Charlet + + * libgnat/a-coinho.ads, libgnat/a-coinho.adb, + libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb + (Swap): New procedure. + +2020-06-12 Arnaud Charlet + + * exp_ch6.adb (Expand_N_Subprogram_Declaration): Do nothing for + a subprogram declared in a protected body. + * exp_ch9.ads, exp_ch9.adb + (Build_Private_Protected_Declaration): Moved to sem_ch6.adb. + (Expand_N_Protected_Body): Do nothing for a subprogram declared + in a protected body. + * sem_ch6.adb (Build_Internal_Protected_Declaration): Moved from + exp_ch9.adb and renamed and fixed to ensure in particular that + such subprograms have convention Intrinsic and have no protected + version. + (Analyze_Subprogram_Body_Helper): Call + Build_Internal_Protected_Declaration. + (Move_Pragmas): Moved up and merged with the more general + version from Build_Private_Protected_Declaration. We only want + to copy selected pragmas, most pragmas are not suitable for a + copy on the spec. + +2020-06-12 Ed Schonberg + + * sem_ch6.adb (Check_Overriding_Indicatior): Reject an + overriding indicator on a subprogram declared within a protected + body. + +2020-06-12 Piotr Trojanek + + * contracts.adb, einfo.adb, sem_ch4.adb, sem_ch6.adb, + sem_res.adb, sem_util.adb: Replace Ekind_In with Is_Entry. + +2020-06-12 Piotr Trojanek + + * sem_res.adb (Resolve_Entry_Call): Add call to + Warn_On_Overlapping_Actuals. + +2020-06-12 Arnaud Charlet + + * aspects.ads (Is_Representation_Aspect): New array. + * sem_ch13.adb (Analyze_Aspect_Specifications): Check + 13.1(9.2/5) for representation aspects. + +2020-06-12 Bob Duff + + * exp_put_image.ads, exp_put_image.adb (Preload_Sink): Procedure + for preloading type Sink. This has the side effect of loading + various dependents, including Ada.Strings.UTF_Encoding. + (Enable_Put_Image): Disable Put_Image in pre-2020 versions of + Ada. This limitation can probably be lifted later. Enable for + tagged types except in predefined units. Disable for CPP types; + Put_Image is legal, just prints the type name. + * sem_attr.adb (Check_Put_Image_Attribute): Don't complain about + Put_Image of CPP types; instead call the "unknown" version of + Put_Image. + * sem_ch10.adb (Analyze_Compilation_Unit): Call Preload_Sink. + +2020-06-12 Piotr Trojanek + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify. + +2020-06-12 Piotr Trojanek + + * sem_warn.adb (Warn_On_Overlapping_Actuals): Remove suppression + for internal units. + +2020-06-12 Arnaud Charlet + + * exp_strm.adb (Build_Elementary_Input_Call): Add support for 24 + bits elementary types. + * rtsfind.ads: Add 24 bits integer streaming routines. + * sem_ch13.adb (Analyze_Attribute_Definition_Clause + [Attribute_Stream_Size]): Add support for 24 bits elementary + types. + * libgnat/s-stratt.ads, libgnat/s-stratt.adb, + libgnat/s-stratt__xdr.adb: Add support for signed and unsigned + 24 bits integers. + +2020-06-12 Piotr Trojanek + + * sem_ch3.adb (Get_Discr_Value): Cleanup. + +2020-06-12 Eric Botcazou + + * rtsfind.ads (RTU_Id): Add System_Address_To_Access_Conversions. + * sem_elab.adb (Elaboration_Phase_Active): Alphabetize. + (Finalize_All_Data_Structures): Likewise. + (Error_Preelaborated_Call): New procedure. + (Build_Call_Marker): Set Is_Preelaborable_Call flag in marker. + (Build_Access_Marker): Likewise. + (Build_Subprogram_Invocation): Likewise. + (Build_Task_Activation): Likewise. + (Check_Preelaborated_Call): Return when the call is preelaborable. + Call Error_Preelaborated_Call to give the error otherwise. + (Check_Elab_Call): Likewise. + * sem_util.adb (Is_Preelaborable_Function): New predicate. + (Is_Non_Preelaborable_Construct.Visit): Recurse on the + Explicit_Actual_Parameter field of N_Parameter_Association. + (Is_Non_Preelaborable_Construct.Visit_Subexpression): In Ada 2020, + for a call to a preelaborable function, visit the parameter list; + otherwise, raise Non_Preelaborable exception. + (Is_Preelaborable_Construct): Likewise, but recursively check the + parameters instead and return false upon failure, otherwise true. + * sinfo.ads (Is_Preelaborable_Call): New flag in call marker nodes. + (Is_Preelaborable_Call): New inline function. + (Set_Is_Preelaborable_Call): New inline procedure. + * sinfo.adb (Is_Preelaborable_Call): New inline function. + (Set_Is_Preelaborable_Call): New inline procedure. + +2020-06-12 Bob Duff + + * stringt.ads: Remove "use System;". + +2020-06-12 Eric Botcazou + + * sem_ch4.adb (Try_Container_Indexing): Replace call to + First_Discriminant by Get_Reference_Discriminant to get the + reference discriminant. + * sem_ch13.adb (Check_Indexing_Functions): Likewise. + * sem_ch5.adb (Preanalyze_Range): Call Get_Reference_Discriminant + to get the reference discriminant. + * sem_util.adb (Is_OK_Variable_For_Out_Formal): Treat all + Ada 2012 implicit dereferences in only one place. + (Is_Variable): Minor tweak. + +2020-06-12 Ed Schonberg + + * sem_ch12.adb (Has_Contracts): New predicate to check whether a + formal subprogram carries an aspect specification for a pre- or + postcondition. + (Build_Subprogram_Wrappers): If actual is overloaded, create a + new name to be used in call inside wrapper body. This names + carries the interpretations of the actual, and is resolved when + the body is analyzed. + (Build_Subprogram_Body_Wrapper): Use this generated name in + call. + (Build_Subprogram_Decl_Wrapper): Build profile of wrapper from + the profile of formal, and reset type entities for subsequent + analysis. + +2020-06-12 Bob Duff + + * debug.adb: Remove usage of -gnatd_z. + * exp_attr.adb, exp_put_image.ads, exp_put_image.adb: Clean up + the enable/disable code. If Put_Image is disabled for a type, + systematically call the "unknown" version. Improve comments. + Consolidate workarounds. Remove usage of -gnatd_z. + +2020-06-12 Eric Botcazou + + * sem_elab.adb: Fix typos in comments. + +2020-06-12 Justin Squirek + + * sem_util.adb (Object_Access_Level): Add processing of implicit + dereferences. + +2020-06-12 Bob Duff + + * libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads, + libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb, + libgnat/a-nbnbre.ads: Update Put_Image, and uncomment the aspect + specification. Add pragmas Ada_2020. + * libgnat/a-stouut.ads, libgnat/a-stteou.ads: Add Preelaborate, + because the Big_Numbers packages have Preelaborate, and now + depend on these Text_Output packages. + +2020-06-12 Eric Botcazou + + * einfo.ads (No_Return): Document it for all subprograms. + * einfo.adb (Set_No_Return): Adjust assertion accordingly. + * sem_ch3.adb (Check_Abstract_Overriding): Implement the + check prescribed by RM 6.5.1(6/2) here instead of... + (Derive_Subprogram): Adjust comment accordingly. + * sem_disp.adb (Override_Dispatching_Operation): ...here. + Remove superfluous return statement. + * sem_ch6.adb (Check_No_Return_Expression): New procedure. + (Analyze_Function_Return): Call it to implement the check + prescribed by AI12-0269 for simple return statements of + No_Return functions, and also checks extended statements. + (Analyze_Return_Statement): Only give an error on a return + statement in No_Return procedures. Use idiomatic form. + * sem_ch8.adb (Analyze_Subprogram_Renaming): Adjust error + message for No_Return renaming subprogram. + * sem_prag.adb (Analyze_Pragma) : Accept + it on functions and generic functions in Ada 2020. + 2020-06-11 Eric Botcazou * sem_res.adb (Resolve_Implicit_Dereference): In an instance, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 46e9c7eb1a8..96d246a6da5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,35 @@ +2020-06-12 Marco Elver + + * c-c++-common/tsan/func_entry_exit.c: New test. + * c-c++-common/tsan/func_entry_exit_disabled.c: New test. + +2020-06-12 Richard Biener + + * gcc.dg/vect/bb-slp-44.c: New testcase. + +2020-06-12 Felix Yang + + PR tree-optimization/95570 + * gcc.dg/vect/pr95570.c: New test. + +2020-06-12 Arnaud Charlet + + * gnat.dg/rep_clause8.adb: Update error location. + +2020-06-12 Alexandre Oliva + + * lib/prune.exp (prune_gcc_output): Match any executable name + in collect messages. + +2020-06-12 H.J. Lu + + PR target/93492 + * gcc.target/i386/pr93492-1.c: New test. + * gcc.target/i386/pr93492-2.c: Likewise. + * gcc.target/i386/pr93492-3.c: Likewise. + * gcc.target/i386/pr93492-4.c: Likewise. + * gcc.target/i386/pr93492-5.c: Likewise. + 2020-06-11 Patrick Palka PR c++/93467 diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bf017a40716..355747f414c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,20 @@ +2020-06-12 Jonathan Wakely + + * testsuite/29_atomics/atomic_flag/clear/1.cc: Also test clear() + when the value is currently set. + * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc: + Actually check the return value. + * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc: + Likewise. + +2020-06-12 Jonathan Wakely + + * include/bits/atomic_base.h (atomic_flag::test): Add missing + const qualifiers. + * testsuite/29_atomics/atomic_flag/test/explicit.cc: Add + dg-options and verify results of test function. + * testsuite/29_atomics/atomic_flag/test/implicit.cc: Likewise. + 2020-06-11 Jonathan Wakely PR libstdc++/94749