aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-01-07c++: destroying delete, throw in new-expr [PR100588]Jason Merrill3-4/+67
The standard says that a destroying operator delete is preferred, but that only applies to the delete-expression, not the cleanup if a new-expression initialization throws. As a result of this patch, several of the destroying delete tests don't get EH cleanups, but I'm turning off the warning in cases where the initialization can't throw anyway. It's unclear what should happen if the class does not declare a non-deleting operator delete; a proposal in CWG was to call the global delete, which makes sense to me if the class doesn't declare its own operator new. If it does, we warn and don't call any deallocation function if initialization throws. PR c++/100588 gcc/cp/ChangeLog: * call.c (build_op_delete_call): Ignore destroying delete if alloc_fn. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/destroying-delete5.C: Expect warning. * g++.dg/cpp2a/destroying-delete6.C: New test.
2022-01-08Daily bump.GCC Administrator7-1/+647
2022-01-07analyzer: add logging of aliasingDavid Malcolm6-4/+40
gcc/analyzer/ChangeLog: * engine.cc (impl_run_checkers): Pass logger to engine ctor. * region-model-manager.cc (region_model_manager::region_model_manager): Add logger param and use it to initialize m_logger. * region-model.cc (engine::engine): New. * region-model.h (region_model_manager::region_model_manager): Add logger param. (region_model_manager::get_logger): New. (region_model_manager::m_logger): New field. (engine::engine): New. * store.cc (store_manager::get_logger): New. (store::set_value): Log scope. Log when marking a cluster as unknown due to possible aliasing. * store.h (store_manager::get_logger): New decl.
2022-01-07analyzer: implement __analyzer_dump_escapedDavid Malcolm7-0/+112
PR analyzer/103546 seems to involve an issue in how the analyzer tracks which decls have escaped, so this patch adds a way to directly test this from DejaGnu. gcc/analyzer/ChangeLog: * region-model-impl-calls.cc (cmp_decls): New. (cmp_decls_ptr_ptr): New. (region_model::impl_call_analyzer_dump_escaped): New. * region-model.cc (region_model::on_stmt_pre): Handle __analyzer_dump_escaped. * region-model.h (region_model::impl_call_analyzer_dump_escaped): New decl. * store.h (binding_cluster::get_base_region): New accessor. gcc/ChangeLog: * doc/analyzer.texi (Special Functions for Debugging the Analyzer): Document __analyzer_dump_escaped. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/analyzer-decls.h (__analyzer_dump_escaped): New decl. * gcc.dg/analyzer/escaping-1.c: New test.
2022-01-07analyzer: add region::is_named_decl_pDavid Malcolm3-0/+26
This patch adds a debug function that I've found handy when debugging a problem with handling the decl "yy_buffer_stack" in PR analyzer/103546. gcc/analyzer/ChangeLog: * region.cc (region::is_named_decl_p): New. * region.h (region::is_named_decl_p): New decl. gcc/ChangeLog: * doc/analyzer.texi (Other Debugging Techniques): Document region::is_named_decl_p. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-07c++: check delete access with trivial init [PR20040]Jason Merrill3-61/+82
Apparently we need to check the accessibility of the deallocation function even if there is no initialization. PR c++/20040 gcc/cp/ChangeLog: * init.c (build_new_1): Also build pointer cleanup if TYPE_GETS_DELETE. * cp-tree.h (TYPE_GETS_VEC_DELETE): New. gcc/testsuite/ChangeLog: * g++.dg/init/delete4.C: New test.
2022-01-07target: [PR102941] Fix inline-asm flags with non-REG_P outputAndrew Pinski3-1/+46
So the problem here is that arm_md_asm_adjust would just create a set directly to the output memory which is wrong. It needs to output to a temp register first and then do a move. OK? Bootstrapped and tested on aarch64-linux-gnu with no regressions. I have no way to test on arm even though this touches common code. PR target/102941 gcc/ChangeLog: * config/arm/aarch-common.c (arm_md_asm_adjust): Use a temp if !REG_P. gcc/testsuite/ChangeLog: * gcc.target/aarch64/asm-flag-7.c: New test. * gcc.target/arm/asm-flag-7.c: New test.
2022-01-07i386: Robustify V2QI and V4QI move patternsUros Bizjak1-4/+12
Add sse2 isa attribute where needed and remove where not needed. 2022-01-07 Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog: * config/i386/mmx.md (*move<V_32:mode>_internal): Add isa attribute. (*movv2qi_internal): Remve sse2 requirement for alternatives 4,5.
2022-01-07[Ada] Read directory in Ada.Directories.Start_Search rather than Get_Next_EntryPatrick Bernardi3-308/+330
gcc/ada/ * libgnat/a-direct.adb (Search_Data): Remove type. (Directory_Vectors): New package instantiation. (Search_State): New type. (Fetch_Next_Entry): Remove. (Close): Remove. (Finalize): Rewritten. (Full_Name): Ditto. (Get_Next_Entry): Return next entry from Search results vector rather than querying the directory directly using readdir. (Kind): Rewritten. (Modification_Time): Rewritten. (More_Entries): Use Search state cursor to determine if more entries are available for users to read. (Simple_Name): Rewritten. (Size): Rewritten. (Start_Search_Internal): Rewritten to load the contents of the directory that matches the pattern and filter into the search object. * libgnat/a-direct.ads (Search_Type): New type. (Search_Ptr): Ditto. (Directory_Entry_Type): Rewritten to support new Start_Search procedure. * libgnat/s-filatt.ads (File_Length_Attr): New function.
2022-01-07[Ada] Fix the check of the 'Old prefixEtienne Servais1-1/+4
gcc/ada/ * sem_attr.adb (Check_Reference): Fix condition.
2022-01-07[Ada] Fix uses of pragma Unreferenced in MinGW runtime unitGhjuvan Lacambre1-2/+0
gcc/ada/ * libgnarl/s-taprop__mingw.adb (Timed_Sleep): Remove "pragma Unreferenced" for Result. (Timed_Delay): Likewise.
2022-01-07[Ada] Fix layout of pragma Inline in generated AST unitPiotr Trojanek1-1/+2
gcc/ada/ * gen_il-gen.adb (Put_Make_Decls): Put pragma Inline in a dedicated line, so that the current indentation is taken into account.
2022-01-07[Ada] Fix style in expansion of multi-dimensional array aggregatesPiotr Trojanek1-6/+4
gcc/ada/ * exp_aggr.adb (Build_Array_Aggr_Code): Fix inconsistent style in comments and code.
2022-01-07[Ada] More default initialization for multi-dim array aggregatesPiotr Trojanek1-15/+4
gcc/ada/ * exp_aggr.adb (Gen_Assign): Remove explicit initialization for components of access types. (Get_Assoc_Expr): Enable initialization for components of all types that require simple initialization.
2022-01-07[Ada] Crash in class-wide pre/postconditionsJavier Miranda5-12/+433
gcc/ada/ * atree.ads (Traverse_Func_With_Parent): New generic subprogram. (Traverse_Proc_With_Parent): Likewise. * atree.adb (Parents_Stack): New table used to traverse trees passing the parent field of each node. (Internal_Traverse_With_Parent): New generic subprogram. (Traverse_Func_With_Parent): Likewise. (Traverse_Proc_With_Parent): Likewise. * contracts.adb (Fix_Parents): New subprogram. (Restore_Original_Selected_Component): Enhanced to fix the parent field of restored nodes. (Inherit_Condition): Adding assertions to check the parent field of inherited conditions and to ensure that the built inherited condition has no reference to the formals of the parent subprogram. * sem_util.ads, sem_util.adb (Check_Parents): New subprogram.
2022-01-07[Ada] Fix typo on "Placement" in commentEtienne Servais1-1/+1
gcc/ada/ * sem_attr.adb (Check_Placement_In_Test_Case): Fix typo.
2022-01-07[Ada] Cleanup and modification of unreferenced warningsJustin Squirek61-753/+255
gcc/ada/ * comperr.adb (Delete_SCIL_Files): Replace unnecessary Unreferenced pragma with specific pragma Warnings. * doc/gnat_rm/implementation_defined_pragmas.rst (Unreferenced): Add documentation for new behavior. * gnat_rm.texi: Regenerate. * erroutc.adb (Set_At): Remove useless assignment. * exp_ch2.adb (In_Assignment_Context): Deleted. (Is_Object_Renaming_Name): Replace calls to Is_LHS with calls to Known_To_Be_Assigned. (Expand_Current_Value): Replace calls to May_Be_Lvalue with calls to Known_To_Be_Assigned. (Expand_Entry_Paramter): Replace calls to In_Assignment_Context with calls to Known_To_Be_Assigned. * exp_ch4.adb (Expand_N_Op_Rem): Remove unnecessary Unreferenced pragma. * exp_imgv.adb (Build_Enumeration_Image_Tables): Default initialize S_N. * ghost.adb (Check_Ghost_Policy): Replace call to May_Be_Lvalue with call to Known_To_Be_Assigned. * lib-xref.adb (Is_On_LHS): Deleted. (OK_To_Set_Referenced): Rewrite subprogram to encompass the new pragma Unreferenced behavior. (Process_Deferred_References): Replace call to Is_LHS with call to Known_To_Be_Assigned. * libgnarl/s-taasde.adb, libgnarl/s-tasren.adb, libgnarl/s-tpobop.adb, libgnat/a-calend.adb, libgnat/a-calfor.adb, libgnat/a-cbdlli.adb, libgnat/a-cbhama.adb, libgnat/a-cbhase.adb, libgnat/a-cbmutr.adb, libgnat/a-cborma.adb, libgnat/a-cborse.adb, libgnat/a-cdlili.adb, libgnat/a-cfhama.adb, libgnat/a-cforse.adb, libgnat/a-cidlli.adb, libgnat/a-cihama.adb, libgnat/a-cihase.adb, libgnat/a-cimutr.adb, libgnat/a-ciorma.adb, libgnat/a-ciormu.adb, libgnat/a-ciorse.adb, libgnat/a-cohama.adb, libgnat/a-cohase.adb, libgnat/a-comutr.adb, libgnat/a-convec.adb, libgnat/a-coorma.adb, libgnat/a-coormu.adb, libgnat/a-coorse.adb, libgnat/a-crdlli.adb, libgnat/a-tigeau.adb, libgnat/a-wtgeau.adb, libgnat/a-ztgeau.adb, libgnat/g-calend.adb, libgnat/g-comlin.adb, libgnat/g-expect.adb, libgnat/g-mbflra.adb, libgnat/g-spipat.adb, libgnat/s-fatgen.adb, libgnat/s-fileio.adb, libgnat/s-os_lib.adb, libgnat/s-regpat.adb, libgnat/s-valued.adb, libgnat/s-valuer.adb: Remove unnecessary Unreferenced pragmas * sem_ch10.adb (Process_Spec_Clauses): Remove useless assignments. * sem_ch13.adb (Validate_Literal_Aspect): Default initialize I. * sem_ch3.adb (Build_Derived_Concurrent_Type): Default initialize Corr_Decl. * sem_ch8.adb (Undefined): Replace calls to Is_LHS with calls to Known_To_Be_Assigned. (In_Abstract_View_Pragma): Likewise. * sem_eval.adb (Eval_Selected_Component): Replace calls to Is_LHS with calls to Known_To_Be_Assigned. * sem_res.adb (Init_Component): Replace calls to May_Be_Lvalue with calls to Known_To_Be_Assigned. * sem_util.adb, sem_util.ads (End_Label_Loc): Default initialize Owner. (Explain_Limited_Type): Default initialize Expr_Func. (Find_Actual): Modified to handle entry families. (Is_LHS): Deleted. (May_Be_Lvalue): Deleted. (Known_To_Be_Assigned): Modified and improved to handle all cases. * sem_warn.adb (Traverse_Result): Replace calls to May_Be_Lvalue with calls to Known_To_Be_Assigned. (Check_Ref): Modify error on unreferenced out parameters to take into account different warning flags.
2022-01-07[Ada] Spurious error caused by order of interfaces in full viewJavier Miranda1-2/+2
gcc/ada/ * sem_ch3.adb (Reorder_Interfaces): When the conflicting interface is identified we just replace the interface in the list of interfaces of the tagged type (instead of adding a duplicate to the list of interfaces).
2022-01-07[Ada] Fix __gnat_kill on WindowsDmitriy Anisimkov1-5/+13
gcc/ada/ * adaint.c (__gnat_kill): Terminate process only in case of SIGKILL, SIGINT, SIGBREAK, SIGTERM, SIGABRT. Do not call OpenProcess if not going to terminate process.
2022-01-07[Ada] Fix a couple of issues with pragma Inspection_PointEric Botcazou1-23/+26
gcc/ada/ * exp_prag.adb (Expand_Pragma_Inspection_Point): Do a single pass over the arguments of the pragma. Set the Address_Taken flag on them and use the Has_Delayed_Freeze flag to spot those which have their elaboration delayed. Reuse the location variable Loc.
2022-01-07[Ada] Remove repeated routines for printing AST in Mixed_CasePiotr Trojanek2-50/+21
gcc/ada/ * osint.adb (To_Lower): Clarify that only To_Lower function causes bootstrap issues; fix style. * treepr.adb (Print_Str_Mixed_Case): Reuse existing case conversion routine. (To_Mixed): Rename from Capitalize; reuse System.Case_Util procedure and explain the bootstrap issue.
2022-01-07[Ada] Simplify traversal in hooking of transient scopesPiotr Trojanek1-15/+7
gcc/ada/ * exp_ch7.adb (Process_Transients_In_Scope): Remove unnecessary initialization of Must_Hook; change Detect_Subprogram_Call from function to procedure; adapt caller.
2022-01-07[Ada] Remove extra space before THEN keywordsPiotr Trojanek5-5/+5
gcc/ada/ * exp_ch5.adb, exp_disp.adb, exp_util.adb, par-ch4.adb, sem_ch13.adb: Remove extra space before THEN that occurs at the end of a line.
2022-01-07[Ada] Fix exit status of GNAT.Expect.Close call on running processDmitriy Anisimkov2-14/+13
gcc/ada/ * expect.c (__gnat_waitpid): Use macros WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG to get exit status or signal that caused the child process to terminate/stop. Do not process exit status in case of error in waitpid call. * adaint.c (__gnat_kill): Use of GenerateConsoleCtrlEvent is removed in Windows variant as it actually is not working and was terminating the calling process. Set signal number into exit code parameter of TerminateProcess to work the same like in Linux.
2022-01-07[Ada] Remove explicit expansion of block with general case statementPiotr Trojanek1-2/+0
gcc/ada/ * exp_ch5.adb (Expand_N_Case_Statement): Remove explicit expansion.
2022-01-07[Ada] Update -gnatwr doc for import of parent packageEtienne Servais2-1/+6
gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update -gnatwr documentation. * gnat_ugn.texi: Regenerate.
2022-01-07[Ada] Fix comment about subprogram unnesting and unconstrained arraysPiotr Trojanek1-1/+2
gcc/ada/ * exp_unst.adb (Unnest_Subprogram): Sync comment with the current code.
2022-01-07[Ada] Fix inconsistent quoting in messages about compile-time errorsPiotr Trojanek6-15/+14
gcc/ada/ * exp_ch4.adb (Raise_Accessibility_Error): Move exception name to the message string; move << control characters to the end, for consistency. * sem_ch6.adb (Analyze_Function_Return): Likewise. * sem_util.adb (Compile_Time_Constraint_Error): Likewise. * gcc-interface/decl.c (gnat_to_gnu_entity): Remove quotes around Storage_Error. * gcc-interface/trans.c (gnat_to_gnu): Remove quotes around Constraint_Error. gcc/testsuite/ * gnat.dg/aggr26.adb: Update expected error message.
2022-01-07[Ada] Consistent suppression for warnings inside null loopsPiotr Trojanek1-20/+22
gcc/ada/ * errout.adb (Error_Msg): Move warning suppression code from Error_Msg_NLE (Error_Msg_NLE): Warning suppression is now done by the internal call to Error_Msg.
2022-01-07[Ada] Remove unnecessary guard for inserting non-empty listPiotr Trojanek5-28/+8
gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): Remove unnecessary guards. * exp_ch4.adb (Expand_N_If_Expression): Likewise; clarify comment. * exp_ch5.adb (Expand_N_If_Statement, Expand_Iterator_Loop_Over_Container): Likewise. * exp_ch9.adb (Expand_N_Task_Type_Declaration): Remove redundant guard. * freeze.adb (Freeze_All_Ent): Reduce scope of a local variable.
2022-01-07[Ada] Remove unnecessary guards for appending non-empty listsPiotr Trojanek3-9/+3
gcc/ada/ * exp_ch3.adb (Build_Init_Procedure): Remove unnecessary guard. * exp_disp.adb (Make_DT): Likewise. * sem_ch12.adb (Analyze_Associations): Likewise.
2022-01-07[Ada] Check scalar range in arrays constructed by concatenationEtienne Servais1-3/+23
gcc/ada/ * sem_res.adb (Resolve_Op_Concat_Arg): Check range when concatenating scalars.
2022-01-07[Ada] treepr: print value only for discrete typesBob Duff1-3/+3
gcc/ada/ * treepr.adb (Print_Node_Ref): Change "not Is_Array_Type" to "Is_Discrete_Type".
2022-01-07[Ada] Use non-internal representation for access subprograms if UC to AddressRichard Kenner2-3/+19
gcc/ada/ * libgnat/g-spipat.ads (Boolean_Func, Natural_Func, VString_Func): Mark as Favor_Top_Level. * sem_ch13.adb (Validate_Unchecked_Conversion): Avoid using internal representation if Unchecked_Conversion between an access to subprogram and System.Address within the same unit.
2022-01-07[Ada] treepr: Print value of static expressionBob Duff1-0/+19
gcc/ada/ * treepr.adb (Print_Node_Ref): Print the value if available.
2022-01-07[Ada] Add an option to Get_Fullest_View to not recurseRichard Kenner2-22/+32
gcc/ada/ * sem_util.ads, sem_util.adb (Get_Fullest_View): Add option to not recurse and return the next-most-fullest view.
2022-01-07[Ada] Warn on import of parent packageBob Duff24-28/+12
gcc/ada/ * sem_ch10.adb (Check_Redundant_Withs): Add a warning if a library unit with's its own ancestor. Note that this warning is not triggered for something like "with P.R;" in P.Q, because there the "with P;" is considered implicit. * fname-sf.adb, libgnarl/s-stusta.adb, libgnarl/s-tasdeb.ads, libgnat/a-calfor.adb, libgnat/a-tiboio.adb, libgnat/a-wwboio.adb, libgnat/a-zzboio.adb, libgnat/i-cobol.adb, libgnat/s-bitops.adb, libgnat/s-bitops.ads, libgnat/s-direio.adb, libgnat/s-dwalin.adb, libgnat/s-geveop.adb, libgnat/s-mmosin__unix.adb, libgnat/s-os_lib.adb, libgnat/s-os_lib.ads, libgnat/s-pooglo.ads, libgnat/s-secsta.adb, libgnat/s-shasto.adb, libgnat/s-stausa.ads, libgnat/s-stratt.ads, libgnat/s-ststop.adb: Remove with of parent. * sinfo.ads: Minor comment fix.
2022-01-07[Ada] Small cleanup of osint-m.adbBob Duff1-11/+0
gcc/ada/ * osint-m.adb: Remove with_clause and pragma.
2022-01-07Allow propagations from inner loop to outer loop.liuhongt2-2/+31
NULL is considered as an outer loop of any other loop. gcc/ChangeLog: PR rtl-optimization/103750 * fwprop.c (forward_propagate_into): Allow propagations from inner loop to outer loop. gcc/testsuite/ChangeLog: * g++.target/i386/pr103750-fwprop-1.C: New test.
2022-01-07nvptx: Add support for PTX's cnot instruction.Roger Sayle2-0/+101
This is a simple patch, now that the nvptx backend has transitioned to STORE_FLAG_VALUE=1, that adds support for NVidia's cnot instruction, that implements C/C++ style logical negation. Previously, the simple function: int foo(int x) { return !x; } on nvptx-none with -O2 would generate: mov.u32 %r24, %ar0; setp.eq.u32 %r28, %r24, 0; selp.u32 %value, 1, 0, %r28; with this patch, GCC now generates: mov.u32 %r24, %ar0; cnot.b32 %value, %r24; 2022-01-07 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/nvptx/nvptx.md (*cnot<mode>2): New define_insn. gcc/testsuite/ChangeLog * gcc.target/nvptx/cnot-1.c: New test case.
2022-01-07rs6000: Define a pattern for mffscrni. If the RN is a constant, it can call ↵Haochen Gui3-10/+38
gen_rs6000_mffscrni directly. gcc/ * config/rs6000/rs6000.md (rs6000_mffscrni): Define. (rs6000_set_fpscr_rn): Change the type of operand[0] from DI to SI. Call gen_rs6000_mffscrni when operand[0] is a const_0_to_3_operand. gcc/testsuite/ * gcc.target/powerpc/mffscrni_p9.c: New testcase for mffscrni. * gcc.target/powerpc/test_fpscr_rn_builtin.c: Test mffscrn and mffscrni separately.
2022-01-07c++: temporarily restore VEC_INIT_EXPR gimplify [PR103936]Jason Merrill2-0/+24
PR103936 demonstrates that some VEC_INIT_EXPR can still survive into GENERIC; until that's fixed let's put back the handling in cp_gimplify_expr. PR c++/103936 PR c++/65591 gcc/cp/ChangeLog: * cp-gimplify.c (cp_gimplify_expr): Restore VEC_INIT_EXPR handling. gcc/testsuite/ChangeLog: * g++.dg/init/aggr15.C: New test.
2022-01-07Support commutative alternative for AVX512 vpcmpeq{b,w,d,q}liuhongt12-60/+85
gcc/ChangeLog: * config/i386/sse.md (*<avx512>_eq<mode>3<mask_scalar_merge_name>_1): Extend to UNSPEC_PCMP_UNSIGNED. gcc/testsuite/ChangeLog: * gcc.target/i386/pr103774.c: New test. * gcc.target/i386/avx512bw-vpcmpequb-1.c: Adjust scan assembler from vpcmpub to (?:vpcmpub|vpcmpeqb). * gcc.target/i386/avx512bw-vpcmpequw-1.c: Ditto. * gcc.target/i386/avx512bw-vpcmpub-1.c: Ditto. * gcc.target/i386/avx512bw-vpcmpuw-1.c: Ditto. * gcc.target/i386/avx512f-vpcmpequd-1.c: Ditto. * gcc.target/i386/avx512f-vpcmpequq-1.c: Ditto. * gcc.target/i386/avx512f-vpcmpud-1.c: Ditto. * gcc.target/i386/avx512vl-vpcmpequd-1.c: Ditto. * gcc.target/i386/avx512vl-vpcmpequq-1.c: Ditto. * gcc.target/i386/avx512vl-vpcmpuq-1.c: Ditto.
2022-01-07Optimize V16HF vector insert to element 0 for AVX2.liuhongt3-28/+42
gcc/ChangeLog: PR target/103753 * config/i386/i386-expand.c (ix86_expand_vector_set): Not use gen_avx2_pblendph_1 when elt == 0. * config/i386/sse.md (avx2_pblendph): Rename to .. (avx2_pblend<ssemodesuffix>_1).. this, and extend to V16HI. (*avx2_pblendw): Rename to .. (*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF. (avx2_pblendw): Rename to .. (*avx2_pblend<ssemodesuffix>): .. this, and extend to V16HF. (blendsuf): Removed. (sse4_1_pblend<blendsuf>): Renamed to .. (sse4_1_pblend<ssemodesuffix>): .. this. gcc/testsuite/ChangeLog: * gcc.target/i386/pr103753.c: New test.
2022-01-06Fortran: Fix handling of optional argument to SIZE intrinsic [PR103898]Sandra Loosemore2-1/+20
This patch fixes a think-o in the code that triggered an ICE in the test case. 2021-01-06 Sandra Loosemore <sandra@codesourcery.com> PR fortran/103898 gcc/fortran/ * trans-intrinsic.c (gfc_conv_intrinsic_size): Make size_var actually be a variable and fix surrounding code. gcc/testsuite/ * gfortran.dg/pr103898.f90: New test.
2022-01-06c++: when delegating constructor throws [PR103711]Jason Merrill2-0/+38
We were always calling the complete destructor if the target constructor throws, even if we were calling the base constructor. PR c++/103711 gcc/cp/ChangeLog: * init.c (perform_target_ctor): Select destructor by in_chrg. gcc/testsuite/ChangeLog: * g++.dg/eh/delegating1.C: New test.
2022-01-06c++: nested catch in ctor fn-try-block [PR61611]Jason Merrill2-1/+42
Being in_function_try_handler isn't enough to satisfy the condition of reaching the end of such a handler; in this case, we're reaching the end of a handler within that handler, so we don't want the special semantics. PR c++/61611 gcc/cp/ChangeLog: * except.c (in_nested_catch): New. (expand_end_catch_block): Check it. gcc/testsuite/ChangeLog: * g++.dg/eh/ctor-fntry1.C: New test.
2022-01-06c++: destroy retval on throwing cleanup in try [PR33799]Jason Merrill5-18/+84
My earlier attempt to fix this bug didn't handle the case where both the return and the throwing cleanup are within a try-block that catches and discards the exception. Fixed by adding the retval cleanup to any try-blocks as well as the function body. PR102191 pointed out that we also weren't handling templates properly, so I moved the call out of the parser. PR c++/33799 PR c++/102191 gcc/cp/ChangeLog: * except.c (maybe_splice_retval_cleanup): Check current_binding_level. * semantics.c (do_poplevel): Call it here. * parser.c (cp_parser_compound_statement): Not here. gcc/testsuite/ChangeLog: * g++.dg/eh/return1.C: Add temporary in try block case. * g++.dg/cpp2a/constexpr-dtor11.C: New test.
2022-01-06c++: clean up ref-extended temp on throwing dtor [PR53868]Jason Merrill5-4/+93
We have wrap_temporary_cleanups to handle the EH region nesting problems between cleanups for complete variables and cleanups for temporaries used in their construction, but we weren't calling it for temporaries extended from binding to a reference. We still don't want this for array cleanups (since my PR94041 fix), so I move that exception from initialize_local_var to wrap_temporary_cleanups. PR c++/53868 gcc/cp/ChangeLog: * decl.c (cp_finish_decl): Use wrap_temporary_cleanups for cleanups from set_up_extended_ref_temp. (wrap_temporary_cleanups): Ignore array cleanups. (initialize_local_var): Don't check for array here. * cp-tree.h (BIND_EXPR_VEC_DTOR): New. * init.c (build_vec_delete_1): Set it. gcc/testsuite/ChangeLog: * g++.dg/eh/ref-temp1.C: New test. * g++.dg/eh/ref-temp2.C: New test.
2022-01-06c++: keep destroying array after one dtor throws [PR66451]Jason Merrill6-6/+81
When we're cleaning up an array, if one destructor throws, we should still try to clean up the rest of the array. We can use TRY_CATCH_EXPR for this, instead of a TARGET_EXPR like my other recent patches, because a destructor call can't involve any temporaries that need to live longer. I thought about only doing this when we call build_vec_delete_1 from build_vec_init, but it seems appropriate for delete-expressions as well; we've said that the array's lifetime is over, it makes sense to keep trying to destroy it. The standard isn't clear, but clang seems to agree with me. PR c++/66451 gcc/cp/ChangeLog: * init.c (build_vec_delete_1): Handle throwing dtor. (build_vec_init): Tell it we're in a cleanup already. gcc/testsuite/ChangeLog: * g++.dg/eh/array3.C: New test. * g++.dg/eh/array1.C: Mark destructor as throw(). * g++.dg/ipa/devirt-40.C: Likewise. * g++.dg/warn/pr83054.C: Likewise. * g++.dg/eh/delete1.C: Shorten array to one element.