aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-05-07[Ada] Small cleanup in C header fileEric Botcazou1-48/+49
gcc/ada/ * atree.h (Parent): Remove duplicate declaration. (Get_1_Bit_Field): Also use INLINE specifier in the declaration, fix formatting and use gcc_unreachable for the default case. (Get_2_Bit_Field): Likewise. (Get_4_Bit_Field): Likewise. (Get_8_Bit_Field): Likewise. (Get_32_Bit_Field): Likewise. (Get_32_Bit_Field_With_Default): Likewise.
2021-05-07[Ada] Variable-sized node typesBob Duff167-43315/+17808
gcc/ada/ * atree.ads, atree.adb: Major rewrite to support variable-sized node types. Add pragmas Suppress and Assertion_Policy. We now have an extra level of indirection: Node_Offsets is a table mapping Node_Ids to the offset of the start of each node in Slots. Slots is a table containing one or more contiguous slots for each node. Each slot is a 32-bit unchecked union that can contain any mixture of 1, 2, 4, 8, and 32-bit fields that fits. The old low-level getters and setters (e.g. Flag123) are removed. * gen_il-fields.ads, gen_il-gen-gen_entities.adb, gen_il-gen-gen_nodes.adb, gen_il-gen.adb, gen_il-gen.ads, gen_il-main.adb, gen_il-types.ads, gen_il-utils.adb, gen_il-utils.ads, gen_il.adb, gen_il.ads: New gen_il program that generates various Ada and C++ files. In particular, the following files are generated by gen_il: einfo-entities.adb einfo-entities.ads, gnatvsn.ads, nmake.adb, nmake.ads, seinfo.ads, seinfo_tables.adb, seinfo_tables.ads, sinfo-nodes.adb, sinfo-nodes.ads, einfo.h, and sinfo.h. * sinfo-utils.adb, sinfo-utils.ads, einfo-utils.adb, einfo-utils.ads: New files containing code that needs to refer to Sinfo.Nodes and Einfo.Entities. This code is mostly moved here from Sinfo and Einfo to break cycles. * back_end.adb: Pass node_offsets_ptr and slots_ptr to gigi, instead of nodes_ptr and flags_ptr. The Nodes and Flags tables no longer exist. (Note that gigi never used the Flags table.) * sinfo-cn.ads (Change_Identifier_To_Defining_Identifier, Change_Character_Literal_To_Defining_Character_Literal, Change_Operator_Symbol_To_Defining_Operator_Symbol): Turn N into an IN formal. * sinfo-cn.adb: Update. Add assertions, which can be removed at some point. Rewrite to use higher-level facilities. Make sure vanishing fields are zeroed out. Add with/use for new packages. * sem_util.adb: Remove "Assert(False)" immediately followed by "raise Program_Error". Use higher-level facilities such as Walk_Sinfo_Fields instead of depending on low-level Set_FieldN routines that no longer exist. Use Get_Comes_From_Source_Default instead of Default_Node.Comes_From_Source (Default_Node no longer exists). Use Set_Basic_Convention instead of Basic_Set_Convention. Add with/use for new packages. * sem_util.ads: The Convention field had getter Convention and setter Basic_Set_Convention. Make that more uniform: there is now a field called Basic_Convention, with Basic_Convention and Set_Basic_Convention as getter/setter, and write Convention and Set_Convention here. * nlists.adb: Rewrite to use abstractions, rather then depending on low-level implementation details of Atree. Necessary because those details have changed. Add with/use for new packages. * sem_ch12.adb: Use higher-level facilities such as Walk_Sinfo_Fields instead of depending on low-level Set_FieldN routines that no longer exist. Add with/use for new packages. * exp_cg.adb, sem_ch10.adb, sem_ch4.adb, sem_eval.adb, sem_prag.adb, sem_warn.adb: Change expanded names to refer to the new packages for things that moved. Add with/use for new packages. * sem_ch3.adb: Likewise. Reinitialize vanishing fields. * exp_disp.adb: Likewise. Remove failing assertion. * sinfo.ads, einfo.ads: Remove code that is now generated into Sinfo.Nodes and Einfo.Entities. * sinfo.adb, einfo.adb: Replace bodies with "pragma No_Body;". We should delete these at some point, but No_Body makes make files easier. Some code is moved to Sinfo.Nodes, Einfo.Entities, Sinfo.Utils, and Einfo.Utils. Some is no longer necessary. * treepr.adb: Rewrite to use new tables. We no longer need treeprs.ads. * treepr.ads: Add comment. * types.ads: Move types Component_Alignment_Kind and Float_Rep_Kind here. * atree.h: Major update to match atree.ads changes. Add slot types, for use by getters/setters. * types.h: Move types Component_Alignment_Kind and Float_Rep_Kind here. * fe.h: Rewrite to deal with code that has changed or moved from Atree, Sinfo, Einfo. * nlists.h: Move some code to fe.h. * alloc.ads: Split Nodes_* constants into Node_Offsets and Slots, because Atree has two separate tables. Increase values. Remove Nodes_Release_Threshold. Improve comment. * debug.adb, gnat1drv.adb: Remove obsolete gnatd.A and gnatd.N switches. Add with/use for new packages. * opt.ads: Minor comment fix. * aspects.adb, checks.adb, comperr.adb, contracts.adb, cstand.adb, debug_a.adb, errout.adb, eval_fat.adb, exp_aggr.adb, exp_atag.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb, exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb, exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb, exp_code.adb, exp_dbug.adb, exp_dist.adb, exp_fixd.adb, exp_imgv.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb, exp_put_image.adb, exp_sel.adb, exp_smem.adb, exp_spark.adb, exp_strm.adb, exp_tss.adb, exp_unst.adb, exp_util.adb, exp_util.ads, expander.adb, freeze.adb, frontend.adb, get_targ.ads, ghost.adb, gnat_cuda.adb, impunit.adb, inline.adb, itypes.adb, itypes.ads, layout.adb, lib.adb, lib-load.adb, lib-writ.adb, lib-xref.adb, lib-xref.ads, lib-xref-spark_specific.adb, live.adb, par.adb, par_sco.adb, pprint.adb, repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb, scn.adb, sem.adb, sem.ads, sem_aggr.adb, sem_attr.adb, sem_aux.adb, sem_case.adb, sem_cat.adb, sem_ch11.adb, sem_ch13.adb, sem_ch2.adb, sem_ch5.adb, sem_ch6.adb, sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_dim.adb, sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb, sem_intr.adb, sem_mech.adb, sem_res.adb, sem_scil.adb, sem_smem.adb, sem_type.adb, set_targ.ads, sinput.adb, sinput-l.adb, sprint.adb, style.adb, styleg.adb, tbuild.adb, tbuild.ads, uname.adb: Add with/use for new packages. * libgnat/a-stoubu.adb, libgnat/a-stouut.adb: Simplify to ease bootstrap. * libgnat/a-stobfi.adb, libgnat/a-stoufi.adb (Create_File, Create_New_File): Create file in binary format, to avoid introducing unwanted text conversions on Windows. Simplify to ease bootstrap. * libgnat/a-stteou__bootstrap.ads: New. * ceinfo.adb, csinfo.adb, nmake.adt, treeprs.adt, xeinfo.adb, xnmake.adb, xsinfo.adb, xtreeprs.adb: Delete. * Make-generated.in: Build and run the gen_il program to generate files. The files are generated in the ada/gen_il subdirectory, and then moved up to ada. We rely on gnatmake (as opposed to make) to build the gen_il program efficiently (i.e. don't do anything if the sources didn't change). * gcc-interface/Makefile.in (ADAFLAGS): Add -gnatU. (GNATMAKE_OBJS): Add new object files. (GENERATED_FILES_FOR_TOOLS): New variable. (../stamp-tools): Create a link for all GENERATED_FILES_FOR_TOOLS. * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add new object files. Remove ada/treeprs.o. (GNATBIND_OBJS): Add new object files. (ada.mostlyclean): Remove ada/sdefault.adb and add ada/stamp-gen_il. (ada.maintainer-clean): Remove ada/treeprs.ads. (update-sources): Remove obsolete target. (ada_generated_files): Rename to... (ADA_GENERATED_FILES): ... this. Add new source files. Add comment. * gcc-interface/trans.c: Remove obsolete Nodes_Ptr and Flags_ptr. Add Node_Offsets_Ptr and Slots_Ptr, which point to the corresponding tables in Atree. * gcc-interface/gigi.h (gigi): New parameters for initializing Node_Offsets_Ptr and Slots_Ptr. * gcc-interface/decl.c: Numeric_Kind, Discrete_Or_Fixed_Point_Kind, and Record_Kind were nonhierarchical, and were therefore removed for simplicity. Replace uses with calls to Is_In_... functions. gnattools/ * Makefile.in (GENERATED_FILES_FOR_TOOLS): New variable. ($(GCC_DIR)/stamp-tools): Walk it for the first copy operation.
2021-05-07[Ada] Spurious error with component of unchecked_union typeEd Schonberg1-3/+8
gcc/ada/ * exp_ch4.adb (Unconstrained_UU_In_Component_Declaration): A component declaration whose subtype indication is an entity name without an explicit constraint is an Unchecked_Union type only if the entity has an unconstrained nominal subtype (record type or private type) whose parent type is an Unchecked_Union.
2021-05-07[Ada] Attribute Address is not an interfering context in SPARKPiotr Trojanek1-0/+13
gcc/ada/ * sem_res.adb (Flag_Object): Ignore prefixes of attribute Address.
2021-05-07[Ada] Generate warning for negative literal of a modular typeYannick Moy5-6/+36
gcc/ada/ * opt.ads: Update comment for Warn_On_Suspicious_Modulus_Value. * sem_res.adb (Resolve_Unary_Op): Generate warning. * usage.adb: Refine doc for -gnatw.m/M switch. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update doc on -gnatw.m switch. * gnat_ugn.texi: Regenerate.
2021-05-07[Ada] Cleanup code for flagging object references in interfering contextsPiotr Trojanek1-14/+20
gcc/ada/ * sem_res.adb (Flag_Object): Replace chained IF with a CASE; remove repeated calls to Entity; do not traverse into N_Identifier and N_Expanded_Name, because only need to examine their Entity field anyway.
2021-05-07[Ada] Remove End_Interp_List from the overloaded resolution APIPiotr Trojanek4-27/+8
gcc/ada/ * sem_ch4.adb (Analyze_Call): Remove call to End_Interp_List. (Process_Overloaded_Indexed_Component): Remove call to End_Interp_List. * sem_util.adb (Insert_Explicit_Dereference): Remove call to End_Interp_List. * sem_type.ads (End_Interp_List): Remove. * sem_type.adb (Add_Entry): The guard against duplicate entries is now checked before other conditions, so that EXIT statements do not bypass this guard. (End_Interp_List): Remove.
2021-05-07[Ada] Crash on imported object with deep initialization and No_AbortsEd Schonberg1-0/+20
gcc/ada/ * exp_util.adb (Remove_Init_Call): If a simple initialization call is present, and the next statement is an initialization block (that contains a call to a Deep_ Initialize routine), remove the block as well, and insert the first initialization call in it, in case it is needed for later relocation.
2021-05-07[Ada] Remove some ??? commentsGary Dismukes4-25/+31
gcc/ada/ * errout.ads (Size_Too_Small_Message): Remove low-value ??? comment. * exp_util.ads: Remove ??? in part of overall package comments and restructure comment to clarify. (Duplicate_Subexpr): Remove ??? comment that seems unnecessary. * sem_ch3.ads (Analyze_Declarations): Remove two parenthesized ??? comments and add more description of the procedure's actions. (Get_Discriminant_Value): Remove ??? comment requesting more documentation, expanding description of the function's actions. * sem_disp.ads (Check_Operation_From_Incomplete_Type): Add more semantic description of the procedure and remove ??? comment requesting such. (Propagate_Tag): Refine comment to indicate meaning of formal parameters and generally improve the spec comment (and remove ??? comment asking about the parameters).
2021-05-07[Ada] Computation of Shift_Left and large signed valuesArnaud Charlet1-17/+19
gcc/ada/ * sem_eval.adb (Fold_Shift): Fix computation of Shift_Left resulting in negative signed values.
2021-05-07[Ada] Fix signature mismatch for Defining_EntityEric Botcazou2-35/+31
gcc/ada/ * sem_util.ads (Defining_Entity): Remove Empty_On_Errors parameter. (Defining_Entity_Or_Empty): New function. * sem_util.adb (Defining_Entity): Move bulk of implementation to... (Defining_Entity_Or_Empty): ...here. Do not raise Program_Error. (Innermost_Master_Scope_Depth): Call Defining_Entity_Or_Empty.
2021-05-07[Ada] Implement aspect No_Controlled_PartsJustin Squirek6-1/+568
gcc/ada/ * aspects.ads: Add entries to register Aspect_No_Controlled_Parts. * freeze.adb (Check_No_Controlled_Parts_Violations): Added to check requirements of aspect No_Controlled_Parts after a type has been frozen. (Freeze_Entity): Add call to Check_No_Controlled_Parts_Violations. (Find_Aspect_No_Controlled_Parts): Created to obtain the aspect specification for No_Controlled_Parts on a given type when present. (Find_Aspect_No_Controlled_Parts_Value): Protect against invalid value. (Has_Aspect_No_Controlled_Parts): Created as a prediate function to check if No_Controlled_Parts has been specified on a type for Get_Anacestor_Types_With_Specification. (Get_Aspect_No_Controlled_Parts_Value): Created to obtain the value of the aspect No_Controlled_Parts when specified on a given type. (Get_Generic_Formal_Types_In_Hierarchy): Created to collect formal types in a given type's hierarchy. (Get_Types_With_Aspect_In_Hierarchy): Created to collect types in a given type's hierarchy with No_Controlled_Parts specified. * sem_ch13.adb (Analyze_One_Aspect): Add processing for No_Controlled_Parts, and fix error in check for allowed pragmas for formal types. (Check_Expr_Is_OK_Static_Expression): Created to enforce checking of static expressions in the same vein as Analyze_Pragma.Check_Expr_OK_Static_Expression. * sem_util.adb (Collect_Types_In_Hierarchy): Created to collect types in a given type's hierarchy that match a given predicate function. * sem_util.ads: Fix typo. * snames.ads-tmpl: Add entry for No_Controlled_Parts.
2021-05-07[Ada] Raise Constraint_Error for Compose and Scaling if Machine_OverflowsEric Botcazou1-6/+13
gcc/ada/ * libgnat/s-fatgen.adb (Scaling): Raise Constraint_Error in the overflow case when T'Machine_Overflows is True.
2021-05-07[Ada] Minor efficiency improvement in containersBob Duff1-10/+13
gcc/ada/ * libgnat/a-conhel.adb (TC_Check): Move the Assert into the 'if'.
2021-05-07[Ada] sigtramp: fix powerpc64 against -fPICFrederic Konrad1-3/+3
gcc/ada/ * sigtramp-vxworks-target.inc: Use a local label for the TOC.
2021-05-07[Ada] Move Has_Inferable_Discriminants to Sem_UtilClaire Dross3-89/+89
gcc/ada/ * exp_ch4.adb (Has_Inferable_Discriminants): Moved to Sem_Util. * sem_util.ads, sem_util.adb (Has_Inferable_Discriminants): Moved from Exp_Ch4.
2021-05-07[Ada] Spurious error on protected call in inherited postconditionEd Schonberg1-0/+1
gcc/ada/ * exp_util.adb (Build_Class_Wide_Expression, Replace_Entity): Add guard to verify that the enclosing pragma is a precondition.
2021-05-07i386: Do not emit mask compares for mode sizes < 16 [PR100445]Uros Bizjak2-1/+10
Recent addition of v*cond* patterns for MMXMODEI modes allows 64bit MMX modes to enter ix86_expand_sse_cmp. ix86_use_mask_cmp_p was not prepared to reject mode sizes < 16, resulting in ICE due to unavailability of 64bit masked PCOM instructions. 2021-05-07 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/100445 * config/i386/i386-expand.c (ix86_use_mask_cmp_p): Return false for mode sizes < 16. gcc/testsuite/ PR target/100445 * gcc.target/i386/pr100445-1.c: New test.
2021-05-07i386: Fix up 8-byte vcond* with -mxop [PR100445]Jakub Jelinek2-0/+23
ix86_expand_sse_movcc has special TARGET_XOP handling and the recent addition of support of v*cond* patterns for MMXMODEI modes results in ICEs because the expected pattern doesn't exist. We can handle it using 128-bit vpcmov (if we ignore the upper 64 bits like we ignore in other TARGET_MMX_WITH_SSE support). 2021-05-07 Jakub Jelinek <jakub@redhat.com> PR target/100445 * config/i386/mmx.md (*xop_pcmov_<mode>): New define_insn. * gcc.target/i386/pr100445.c: New test.
2021-05-07Daily bump.GCC Administrator9-1/+446
2021-05-06preprocessor: Fix pp-number lexing of digit separators [PR83873, PR97604]Joseph Myers6-8/+37
When the preprocessor lexes preprocessing numbers in lex_number, it accepts digit separators in more cases than actually permitted in pp-numbers by the standard syntax. One thing this accepts is adjacent digit separators; there is some code to reject those later, but as noted in bug 83873 it fails to cover the case of adjacent digit separators within a floating-point exponent. Accepting adjacent digit separators only results in a missing diagnostic, not in valid code being rejected or being accepted with incorrect semantics, because the correct lexing in such a case would have '' start the following preprocessing tokens, and no valid preprocessing token starts '' while ' isn't valid on its own as a preprocessing token either. So this patch fixes that case by moving the error for adjacent digit separators to lex_number (allowing a more specific diagnostic than if '' were excluded from the pp-number completely). Other cases inappropriately accepted involve digit separators before '.', 'e+', 'e-', 'p+' or 'p-' (or corresponding uppercase variants). In those cases, as shown by the test digit-sep-pp-number.C added, this can result in valid code being wrongly rejected as a result of too many characters being included in the pp-number. So this case is fixed by terminating the pp-number at the correct character according to the standard. That test also covers the case where a digit separator was followed by an identifier-nondigit that is not a nondigit (e.g. a UCN); that case was already handled correctly. Bootstrapped with no regressions for x86_64-pc-linux-gnu. libcpp/ PR c++/83873 PR preprocessor/97604 * lex.c (lex_number): Reject adjacent digit separators here. Do not allow digit separators before '.' or an exponent with sign. * expr.c (cpp_classify_number): Do not check for adjacent digit separators here. gcc/testsuite/ PR c++/83873 PR preprocessor/97604 * g++.dg/cpp1y/digit-sep-neg-2.C, g++.dg/cpp1y/digit-sep-pp-number.C: New tests. * g++.dg/cpp1y/digit-sep-line-neg.C, g++.dg/cpp1y/digit-sep-neg.C: Adjust expected messages.
2021-05-06libstdc++: Improve static assert messagesJonathan Wakely3-4/+4
The message used for static assertions should be phrased so that it's unambiguous whether the condition should be true or false. The message should definitely not state the negative condition. libstdc++-v3/ChangeLog: * include/bits/stl_algobase.h (__copy_move, __copy_move_backward): Improve static_assert messages. * testsuite/25_algorithms/copy/58982.cc: Adjust expected output. * testsuite/25_algorithms/copy_n/58982.cc: Likewise.
2021-05-06ipa-sra: Do not bail out when callers cannot be clonedMartin Jambor2-21/+24
IPA-SRA fails to produce (very simple) edge summaries when a caller cannot be cloned or its signature cannot be changed which makes it less powerful for no good reason. This patch fixes that problem. gcc/ChangeLog: 2021-04-12 Martin Jambor <mjambor@suse.cz> * ipa-sra.c (ipa_sra_dump_all_summaries): Dump edge summaries even when there is no function summary. (ipa_sra_summarize_function): produce edge summaries even when bailing out early. gcc/testsuite/ChangeLog: 2021-04-12 Martin Jambor <mjambor@suse.cz> * gcc.dg/ipa/ipa-sra-1.c (main): Revert change done by 05193687dde, make the argv again pointer to an array.
2021-05-06go: use htab_eq_string in godumpTom Tromey1-11/+3
This changes godump to use the new htab_eq_string function. gcc * godump.c (string_hash_eq): Remove. (go_finish): Use htab_eq_string.
2021-05-06gcc: use htab_eq_stringTom Tromey1-10/+1
This changes one spot in GCC to use the new htab_eq_string function. gcc * gengtype-state.c (read_state): Use htab_eq_string. (string_eq): Remove.
2021-05-06libiberty: add htab_eq_stringTom Tromey3-8/+10
The libiberty hash table includes a helper function for strings, but no equality function. Consequently, this equality function has been reimplemented a number of times in both the gcc and binutils-gdb source trees. This patch adds the function to the libiberty hash table, as a step toward the goal of removing all the copies. One change to gcc is included here. Normally I would have put this in the next patch, but gensupport.c used the most natural name for its reimplementation of this function, and this can't coexist with the extern function in libiberty. include * hashtab.h (htab_eq_string): Declare. libiberty * hashtab.c (htab_eq_string): New function. gcc * gensupport.c (htab_eq_string): Remove.
2021-05-06Add line debug info for virtual thunksBernd Edlinger9-50/+224
There is no debug info when the DECL_IGNORED_P flag is set. But sometimes we have the line info of the function decl, as in the case of on virtual thunks. So instead of no line info at all, we emit at least the location of the function decl. On the other side, there are DECL_IGNORED_P functions which do not have any source line info at all. Remove those from the debug_range info, to make it clear for the debugger that the line info for these functions is invalid. This has the effect that the debugger will not step into the function without debug info. 2021-05-06 Bernd Edlinger <bernd.edlinger@hotmail.de> PR ipa/97937 * debug.h (gcc_debug_hooks): Add set_ignored_loc function pointer. * dwarf2out.h (dw_fde_node::ignored_debug): New data item. * dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Add dummy set_ignored_loc callbacks. * debug.c (do_nothing_debug_hooks): Likewise. * vmsdbgout.c (vmsdbg_debug_hooks): Likewise. * dwarf2out.c (text_section_used, cold_text_section_used): Remove. (in_text_section_p, last_text_label, last_cold_label, switch_text_ranges, switch_cold_ranges): New data items. (dwarf2out_note_section_used): Remove. (dwarf2out_begin_prologue): Set fde->ignored_debug and in_text_section_p. (mark_ignored_debug_section): New helper function. (dwarf2out_end_epilogue, dwarf2out_switch_text_section): Call mark_ignored_debug_section. (dwarf2_debug_hooks): Use dwarf2out_set_ignored_loc. (dwarf2_lineno_debug_hooks): Use dummy for set_ignored_loc. (size_of_aranges): Adjust formula for multi-part text ranges size. (output_aranges): Output multi-part text ranges. (dwarf2out_set_ignored_loc): New callback function. (dwarf2out_finish): Output multi-part text ranges. (dwarf2out_c_finalize): Clear new data items. * final.c (final_start_function_1): Call set_ignored_loc callback. (final_scan_insn_1): Likewise. * ggc-page.c (gt_ggc_mx): New helper function. * stringpool.c (gt_pch_nx): Likewise.
2021-05-06Fix PR testsuite/100454Eric Botcazou1-1/+1
gcc/testsuite/ * gnat.dg/opt93.adb: Compile only for LP64 targets.
2021-05-06testsuite: Add s390 to vect_*_cvt checks.Robin Dapp1-7/+22
This patch adds s390 to vect_*_cvt checks in target-supports.exp. gcc/testsuite/ChangeLog: * lib/target-supports.exp: Add s390 checks for vect conversions.
2021-05-06testsuite: Add vect_floatint_cvt to gcc.dg/vect/pr56541.cRobin Dapp1-1/+1
pr56541.c converts a float vector to an int (bool) vector. Add vect_floatint_cvt in order to select the right targets. gcc/testsuite/ChangeLog: * gcc.dg/vect/pr56541.c: Add vect_floatint_cvt.
2021-05-06Fortran: Assumed and explicit size class arrays [PR46691/99819].Paul Thomas5-10/+169
2021-05-06 Paul Thomas <pault@gcc.gnu.org> gcc/fortran/ChangeLog PR fortran/46691 PR fortran/99819 * class.c (gfc_build_class_symbol): Remove the error that disables assumed size class arrays. Class array types that are not deferred shape or assumed rank are given a unique name and placed in the procedure namespace. * trans-array.c (gfc_trans_g77_array): Obtain the data pointer for class arrays. (gfc_trans_dummy_array_bias): Suppress the runtime error for extent violations in explicit shape class arrays because it always fails. * trans-expr.c (gfc_conv_procedure_call): Handle assumed size class actual arguments passed to non-descriptor formal args by using the data pointer, stored as the symbol's backend decl. gcc/testsuite/ChangeLog PR fortran/46691 PR fortran/99819 * gfortran.dg/class_dummy_6.f90: New test. * gfortran.dg/class_dummy_7.f90: New test.
2021-05-06libstdc++: Implement LWG 3533 changes to foo_view::iterator::base()Patrick Palka1-8/+6
libstdc++-v3/ChangeLog: * include/std/ranges (filter_view::_Iterator::base): Make the const& overload unconstrained and return a const reference as per LWG 3533. Make unconditionally noexcept. (transform_view::_Iterator::base): Likewise. (elements_view::_Iterator::base): Likewise.
2021-05-06libstdc++: Implement LWG 3391 changes to move/counted_iterator::base()Patrick Palka3-10/+48
libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (move_iterator::base): Make the const& overload unconstrained and return a const reference as per LWG 3391. Make unconditionally noexcept. (counted_iterator::base): Likewise. * testsuite/24_iterators/move_iterator/lwg3391.cc: New test. * testsuite/24_iterators/move_iterator/move_only.cc: Adjust has_member_base concept to decay-copy the result of base().
2021-05-06refactor SSA rewriting timevarsRichard Biener2-12/+2
This avoids too deep stacks of timevars during incremental SSA rewrite and basically use TV_TREE_INTO_SSA for all into-SSA rewrite work and TV_TREE_SSA_INCREMENTAL for update_ssa. 2021-05-06 Richard Biener <rguenther@suse.de> * timevar.def (TV_TREE_INSERT_PHI_NODES): Remove. (TV_TREE_SSA_REWRITE_BLOCKS): Likewise. (TV_TREE_INTO_SSA): New. * tree-into-ssa.c (insert_phi_nodes): Do not account separately. (rewrite_blocks): Likewise. (pass_data_build_ssa): Account to TV_TREE_INTO_SSA.
2021-05-06libstdc++: Fix definition of std::remove_cvref_tJonathan Wakely2-4/+20
I originally defined std::remove_cvref_t in terms of the internal __remove_cvref_t trait, to avoid instantiating the remove_cvref class template. However, as described in P1715R0 that is observable by users and is thus non-conforming. This defines remove_cvref_t as specified in the standard. libstdc++-v3/ChangeLog: * include/std/type_traits (remove_cvref_t): Define in terms of remove_cvref. * testsuite/20_util/remove_cvref/value.cc: Check alias.
2021-05-06Revert "libstdc++: Use unsigned char argument to std::isdigit"Jonathan Wakely1-1/+1
This reverts commit d0d6ca019717305df0ef41e3fe1da48f7f561fac.
2021-05-06phiopt: Use gphi *phi instead of gimple *phi some moreJakub Jelinek1-14/+12
Various functions in phiopt are also called with a gphi * but use gimple * argument for it. 2021-05-06 Jakub Jelinek <jakub@redhat.com> * tree-ssa-phiopt.c (value_replacement, minmax_replacement, abs_replacement, xor_replacement, cond_removal_in_popcount_clz_ctz_pattern, replace_phi_edge_with_variable): Change type of phi argument from gimple * to gphi *.
2021-05-06Avoid update_ssa quadraticness in loop splittingRichard Biener1-10/+7
We already take care to not apply loop splitting to IL produced by splitting so we should be able to delay updating SSA and loop-closed SSA that was left broken after loop versioning until after we processed all opportunities. 2021-05-06 Richard Biener <rguenther@suse.de> * tree-ssa-loop-split.c (split_loop): Delay updating SSA form. Output an opt-info message. (do_split_loop_on_cond): Likewise. (tree_ssa_split_loops): Update SSA form here.
2021-05-06Fix IPA SRA removal of DECL_BY_REFERENCE returnRichard Biener1-0/+2
While doing bogus call LHS removal I noticed that cloning with dropping a return value creates a bogus replacement for a DECL_BY_REFERENCE DECL_RESULT, resulting in MEM_REFs of aggregates rather than pointers. The following fixes this latent issue. 2021-05-06 Richard Biener <rguenther@suse.de> * tree-inline.c (tree_function_versioning): Fix DECL_BY_REFERENCE return variable removal.
2021-05-06testsuite: gcc.c-torture/execute/ieee/cdivchkld.c needs fmaxlChristophe Lyon1-0/+4
The new test gcc.c-torture/execute/ieee/cdivchkld.c needs fmaxl(), which may not be available, for instance on aarch64-elf with newlib. As discussed in the PR, requiring c99_runtime enables to skip the test in this case. 2021-05-06 Christophe Lyon <christophe.lyon@linaro.org> PR testsuite/100355 gcc/testsuite/ * gcc.c-torture/execute/ieee/cdivchkld.x: New.
2021-05-06IBM Z: Fix error checking for builtin vec_permiMarius Hillenbrand4-31/+76
The builtin vec_permi is peculiar in that its immediate operand is encoded differently than the immediate operand that is backing the builtin. This fixes the check for the immediate operand, adding a regression test in the process. This partially reverts commit 3191c1f4488d1f7563b563d7ae2a102a26f16d82 2021-05-06 Marius Hillenbrand <mhillen@linux.ibm.com> gcc/ChangeLog: * config/s390/s390-builtins.def (O_M5, O1_M5, ...): Remove unused macros. (s390_vec_permi_s64, s390_vec_permi_b64, s390_vec_permi_u64) (s390_vec_permi_dbl, s390_vpdi): Use the O3_U2 type for the immediate operand. * config/s390/s390.c (s390_const_operand_ok): Remove unused values. gcc/testsuite/ChangeLog: * gcc.target/s390/zvector/imm-range-error-1.c: Fix test for __builtin_s390_vpdi. * gcc.target/s390/zvector/vec-permi.c: New test for builtin vec_permi.
2021-05-06phiopt: Optimize (x <=> y) cmp z [PR94589]Jakub Jelinek9-0/+922
genericize_spaceship genericizes i <=> j to approximately ({ int c; if (i == j) c = 0; else if (i < j) c = -1; else c = 1; c; }) for strong ordering and ({ int c; if (i == j) c = 0; else if (i < j) c = -1; else if (i > j) c = 1; else c = 2; c; }) for partial ordering. The C++ standard supports then == or != comparisons of that against strong/partial ordering enums, or </<=/==/!=/>/>= comparisons of <=> result against literal 0. In some cases we already optimize that but in many cases we keep performing all the 2 or 3 comparisons, compute the spaceship value and then compare that. The following patch recognizes those patterns if the <=> operands are integral types or floating point (the latter only for -ffast-math) and optimizes it to the single comparison that is needed (plus adds debug stmts if needed for the spaceship result). There is one thing I'd like to address in a follow-up: the pr94589-2.C testcase should be matching just 12 times each, but runs into operator>=(partial_ordering, unspecified) being defined as (_M_value&1)==_M_value rather than _M_value>=0. When not honoring NaNs, the 2 case should be unreachable and so (_M_value&1)==_M_value is then equivalent to _M_value>=0, but is not a single use but two uses. I'll need to pattern match that case specially. 2021-05-06 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94589 * tree-ssa-phiopt.c (tree_ssa_phiopt_worker): Call spaceship_replacement. (cond_only_block_p, spaceship_replacement): New functions. * gcc.dg/pr94589-1.c: New test. * gcc.dg/pr94589-2.c: New test. * gcc.dg/pr94589-3.c: New test. * gcc.dg/pr94589-4.c: New test. * g++.dg/opt/pr94589-1.C: New test. * g++.dg/opt/pr94589-2.C: New test. * g++.dg/opt/pr94589-3.C: New test. * g++.dg/opt/pr94589-4.C: New test.
2021-05-06ipa/100373 - fix emutls lowering compare-debug issueRichard Biener2-4/+24
emutls figured that tls uses in debug-insns need lowering but that obviously has effects on code-generation as can be seen in the following IL diff with the new testcase: <bb 2> [local count: 1073741824]: - a = 0; + # DEBUG BEGIN_STMT _4 = __builtin___emutls_get_address (&__emutls_v.b); + # DEBUG D#1 => *_4 + # DEBUG d => (long int) D#1 + # DEBUG BEGIN_STMT + a = 0; + # DEBUG BEGIN_STMT *_4 = 0; return; where it figured the debug use of b in the original <bb 2> [local count: 1073741824]: # DEBUG BEGIN_STMT # DEBUG D#1 => b # DEBUG d => (long int) D#1 # DEBUG BEGIN_STMT a = 0; needs lowering (it maybe does when we want to produce perfect debug but that's just bad luck). The following patch fixes this by avoiding to create a new emutls address when visiting debug stmts and instead resets them. Another option might be to simply not lower debug stmt uses but I have no way to verify actual debug info for this. 2021-05-05 Richard Biener <rguenther@suse.de> PR ipa/100373 * tree-emutls.c (gen_emutls_addr): Pass in whether we're dealing with a debug use and only query existing addresses if so. (lower_emutls_1): Avoid splitting out addresses for debug stmts, reset the debug stmt when we fail to find existing lowered addresses. (lower_emutls_phi_arg): Set wi.stmt. * gcc.dg/pr100373.c: New testcase.
2021-05-06[Ada] ACATS 4.1R-c611a04: Class-wide preconditions in dispatching callsJavier Miranda1-22/+84
gcc/ada/ * exp_disp.adb (Build_Class_Wide_Check): Extending the functionality of this routine to climb to the ancestors searching for the enclosing overridden dispatching primitive that has a class-wide precondition to generate the check.
2021-05-06[Ada] Avoid repeated analysis of constraint rangesPiotr Trojanek1-2/+0
gcc/ada/ * sem_ch3.adb (Constraint_Index): Remove redundant problematic analysis.
2021-05-06[Ada] Assert failure on E_Enumeration_Literal and front-end unnestingArnaud Charlet1-3/+6
gcc/ada/ * exp_unst.adb (Note_Uplevel_Bound): Exclude E_Enumeration_Literal.
2021-05-06[Ada] Bad expansion with -gnato2 and if expressionArnaud Charlet1-2/+7
gcc/ada/ * exp_ch4.adb (Expand_N_If_Expression): Apply_Arithmetic_Overflow_Check will not deal with Then/Else_Actions so skip minimizing overflow checks if any actions are present.
2021-05-06[Ada] In CodePeer mode, use regular-exception handlingBoris Yakobowski1-6/+2
gcc/ada/ * gnat1drv.adb (Adjust_Global_Switches): Simplify logic.
2021-05-06[Ada] AI12-0411: Add "bool" to Interfaces.CArnaud Charlet12-21/+24
gcc/ada/ * libgnat/i-c.ads (bool): New type. * libgnat/i-cexten.ads, libgnat/i-cexten__128.ads (bool): Now a subtype of Interfaces.C.bool. * libgnarl/s-interr__vxworks.adb (Interrupt_Manager): Qualify False. * libgnarl/s-interr.adb, libgnarl/s-interr__hwint.adb, libgnarl/s-tasini.adb, libgnarl/s-tasren.adb, libgnarl/s-tassta.adb, libgnarl/s-tpobmu.adb, libgnarl/s-tpobop.adb, libgnarl/s-tpopmo.adb: Replace Assert (False) by Assert (Standard.False).
2021-05-06[Ada] Explain meaning of Non_Std_ExecutableGhjuvan Lacambre1-1/+4
gcc/ada/ * make.adb (Compute_Executable): Document parameter.