Commit Graph

185894 Commits

Author SHA1 Message Date
Jeff Law
6d43ec5096 Minor improvement to compare elimination
gcc/
	* compare-elim.c (try_eliminate_compare): Run DCE to clean things
	up before eliminating comparisons.
2021-06-15 12:43:42 -04:00
Aldy Hernandez
4602714382 range-ops: (nonzero | X) is nonzero
For bitwise or, nonzero|X is always nonzero.  Make sure we don't drop to
varying in this case.

gcc/ChangeLog:

	* range-op.cc (operator_bitwise_or::wi_fold): Make sure
	nonzero|X is nonzero.
	(range_op_bitwise_and_tests): Add tests for above.
2021-06-15 18:41:09 +02:00
Carl Love
913b13fcb1 Fix for vcmpequt builtin
The vcmpequt builtin define eqvv1ti3 points to the eqv define instruction
for the eqv instruction.  The vcmpequt builtin define should point to the
vector_eqv1ti instruction definition for the vcmpequq instruction.

2021-06-15  Carl Love  <cel@us.ibm.com>

gcc/ChangeLog
	PR target/101022
	* config/rs6000/rs6000-builtin.def (VCMPEQUT): Fix the ICODE for the
	enum definition.
	(VRLQ, VSLQ, VSRQ, VSRAQ): Remove unused BU_P10_OVERLOAD_2
	definitions.
2021-06-15 10:43:33 -05:00
Tobias Burnus
1de31913d2 Fortran/OpenMP: Extend defaultmap clause for OpenMP 5 [PR92568]
PR fortran/92568

gcc/fortran/ChangeLog:

	* dump-parse-tree.c (show_omp_clauses): Update for defaultmap.
	* f95-lang.c (LANG_HOOKS_OMP_ALLOCATABLE_P,
	LANG_HOOKS_OMP_SCALAR_TARGET_P): New.
	* gfortran.h (enum gfc_omp_defaultmap,
	enum gfc_omp_defaultmap_category): New.
	* openmp.c (gfc_match_omp_clauses): Update defaultmap matching.
	* trans-decl.c (gfc_finish_decl_attrs): Set GFC_DECL_SCALAR_TARGET.
	* trans-openmp.c (gfc_omp_allocatable_p, gfc_omp_scalar_target_p): New.
	(gfc_omp_scalar_p): Take 'ptr_alloc_ok' argument.
	(gfc_trans_omp_clauses, gfc_split_omp_clauses): Update for
	defaultmap changes.
	* trans.h (gfc_omp_scalar_p): Update prototype.
	(gfc_omp_allocatable_p, gfc_omp_scalar_target_p): New.
	(struct lang_decl): Add scalar_target.
	(GFC_DECL_SCALAR_TARGET, GFC_DECL_GET_SCALAR_TARGET): New.

gcc/ChangeLog:

	* gimplify.c (enum gimplify_defaultmap_kind): Add GDMK_SCALAR_TARGET.
	(struct gimplify_omp_ctx): Extend defaultmap array by one.
	(new_omp_context): Init defaultmap[GDMK_SCALAR_TARGET].
	(omp_notice_variable): Update type classification for Fortran.
	(gimplify_scan_omp_clauses): Update calls for new argument; handle
	GDMK_SCALAR_TARGET; for Fortran, GDMK_POINTER avoid GOVD_MAP_0LEN_ARRAY.
	* langhooks-def.h (lhd_omp_scalar_p): Add 'ptr_ok' argument.
	* langhooks.c (lhd_omp_scalar_p): Likewise.
	(LANG_HOOKS_OMP_ALLOCATABLE_P, LANG_HOOKS_OMP_SCALAR_TARGET_P): New.
	(LANG_HOOKS_DECLS): Add them.
	* langhooks.h (struct lang_hooks_for_decls): Add new hooks, update
	omp_scalar_p pointer type to include the new bool argument.

libgomp/ChangeLog:

	* testsuite/libgomp.fortran/defaultmap-8.f90: New test.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/pr99928-1.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-2.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-3.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-4.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-5.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-6.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/pr99928-8.f90: Uncomment 'defaultmap(none)'.
	* gfortran.dg/gomp/defaultmap-1.f90: New test.
	* gfortran.dg/gomp/defaultmap-2.f90: New test.
	* gfortran.dg/gomp/defaultmap-3.f90: New test.
	* gfortran.dg/gomp/defaultmap-4.f90: New test.
	* gfortran.dg/gomp/defaultmap-5.f90: New test.
	* gfortran.dg/gomp/defaultmap-6.f90: New test.
	* gfortran.dg/gomp/defaultmap-7.f90: New test.
2021-06-15 16:07:11 +02:00
David Malcolm
9a2c9579fd analyzer: track dynamic extents of regions
This patch extends region_model to add tracking of the sizes of
dynamically-allocated regions, both on the heap (via malloc etc) and
stack (via alloca).  It adds enough purging of this state to avoid
blowing up any existing analyzer test cases.

The state can be queried via a new "__analyzer_dump_capacity" for use
in DejaGnu tests but other than that doesn't do anything - I have
various followup experiments that make use of this.

gcc/analyzer/ChangeLog:
	* engine.cc (exploded_node::on_stmt): Handle __analyzer_dump_capacity.
	(exploded_node::on_stmt): Drop m_sm_changes from on_stmt_flags.
	(state_change_requires_new_enode_p): New function...
	(exploded_graph::process_node): Call it, rather than querying
	flags.m_sm_changes, so that dynamic-extent differences can also
	trigger the splitting of nodes.
	* exploded-graph.h (struct on_stmt_flags): Drop field m_sm_changes.
	* program-state.cc (program_state::detect_leaks): Purge dead
	heap-allocated regions from dynamic extents.
	(selftest::test_program_state_1): Fix type of "size_in_bytes".
	(selftest::test_program_state_merging): Likewise.
	* region-model-impl-calls.cc
	(region_model::impl_call_analyzer_dump_capacity): New.
	(region_model::impl_call_free): Remove dynamic extents from the
	freed region.
	* region-model-reachability.h
	(reachable_regions::begin_mutable_base_regs): New.
	(reachable_regions::end_mutable_base_regs): New.
	* region-model.cc: Include "tree-object-size.h".
	(region_model::region_model): Support new field m_dynamic_extents.
	(region_model::operator=): Likewise.
	(region_model::operator==): Likewise.
	(region_model::dump_to_pp): Dump sizes of dynamic regions.
	(region_model::handle_unrecognized_call): Purge dynamic extents
	from any regions that have escaped mutably:.
	(region_model::get_capacity): New function.
	(region_model::add_constraint): Unset dynamic extents when a
	heap-allocated region's address is NULL.
	(region_model::unbind_region_and_descendents): Purge dynamic
	extents of unbound regions.
	(region_model::can_merge_with_p): Call
	m_dynamic_extents.can_merge_with_p.
	(region_model::create_region_for_heap_alloc): Assert that
	size_in_bytes's type is compatible with size_type_node.  Update
	for renaming of record_dynamic_extents to set_dynamic_extents.
	(region_model::create_region_for_alloca): Likewise.
	(region_model::record_dynamic_extents): Rename to...
	(region_model::set_dynamic_extents): ...this.  Assert that
	size_in_bytes's type is compatible with size_type_node.  Add it
	to the m_dynamic_extents map.
	(region_model::get_dynamic_extents): New.
	(region_model::unset_dynamic_extents): New.
	(selftest::test_state_merging): Fix type of "size".
	(selftest::test_malloc_constraints): Likewise.
	(selftest::test_malloc): Verify dynamic extents.
	(selftest::test_alloca): Likewise.
	* region-model.h (region_to_value_map::is_empty): New.
	(region_model::dynamic_extents_t): New typedef.
	(region_model::impl_call_analyzer_dump_capacity): New decl.
	(region_model::get_dynamic_extents): New function.
	(region_model::get_dynamic_extents): New decl.
	(region_model::set_dynamic_extents): New decl.
	(region_model::unset_dynamic_extents): New decl.
	(region_model::get_capacity): New decl.
	(region_model::record_dynamic_extents): Rename to set_dynamic_extents.
	(region_model::m_dynamic_extents): New field.

gcc/ChangeLog:
	* doc/analyzer.texi
	(Special Functions for Debugging the Analyzer): Add
	__analyzer_dump_capacity.

gcc/testsuite/ChangeLog:
	* gcc.dg/analyzer/analyzer-decls.h (__analyzer_dump_capacity): New decl.
	* gcc.dg/analyzer/capacity-1.c: New test.
	* gcc.dg/analyzer/capacity-2.c: New test.
	* gcc.dg/analyzer/capacity-3.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-15 09:31:26 -04:00
David Malcolm
d726a57b99 analyzer: add class region_to_value_map
Add a class for associating symbolic values with regions, for use
initially for recording the sizes of dynamically-allocated regions,
though this also could potentially be used for e.g. tracking strlen()
values.

gcc/analyzer/ChangeLog:
	* region-model.cc (region_to_value_map::operator=): New.
	(region_to_value_map::operator==): New.
	(region_to_value_map::dump_to_pp): New.
	(region_to_value_map::dump): New.
	(region_to_value_map::can_merge_with_p): New.
	* region-model.h (class region_to_value_map): New class.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-15 09:30:18 -04:00
David Malcolm
954c923529 analyzer testsuite: add explode-2a.c [PR101068]
Due to a bug (PR analyzer/101068), the analyzer only explores a limited
subset of the possible paths through gcc.dg/analyzer/explode-2.c,
and this artifically helps stop this testcase from exploding.
I intend to fix this at some point, but for now, this patch adds a
revised test case which captures the effective CFG due to the bug, so
that we explicitly have test coverage for that CFG.

gcc/testsuite/ChangeLog:
	PR analyzer/101068
	* gcc.dg/analyzer/explode-2a.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2021-06-15 09:29:23 -04:00
Steve Baird
ba998f6407 [Ada] Avoid unhelpful dead code warnings
gcc/ada/

	* exp_util.adb (Kill_Dead_Code): Generalize the existing
	handling of if statements to handle case statements similarly.
2021-06-15 06:19:40 -04:00
Eric Botcazou
759df6fd41 [Ada] Remove couple of obsolete declarations
gcc/ada/

	* raise.h (_gnat_builtin_longjmp): Delete.
	(set_gnat_exit_status): Likewise.
2021-06-15 06:19:39 -04:00
Piotr Trojanek
2a344c7982 [Ada] Enable removal of side-effects in component declarations
gcc/ada/

	* exp_util.adb (Possible_Side_Effect_In_SPARK): Handle component
	declaration just like full type and subtype declarations.
2021-06-15 06:19:38 -04:00
Yannick Moy
6ae60a649e [Ada] Extend function to retrieve first/last nodes to all declarations
gcc/ada/

	* errout.adb (First_And_Last_Node): Also apply to arbitrary late
	declarations, not only subprogram specs.
2021-06-15 06:19:37 -04:00
Bob Duff
40f464256c [Ada] Incorrect Reinit_Field_To_Zero calls for concurrent entities
gcc/ada/

	* sem_ch3.adb (Make_Class_Wide_Type): Make sure all the calls to
	Reinit_Field_To_Zero are for the correct Ekinds.
2021-06-15 06:19:36 -04:00
Bob Duff
811b8aa536 [Ada] No_Task_Parts aspect
gcc/ada/

	* aspects.ads (No_Task_Parts): New aspect.
	* snames.ads-tmpl: Add the aspect name.
	* exp_ch6.adb (Might_Have_Tasks): Return False if this is a
	class-wide type whose specific type has No_Task_Parts.
	* freeze.adb (Check_No_Parts_Violations): This is an adaptation
	of the procedure formerly known as
	Check_No_Controlled_Parts_Violations, which now supports both
	No_Controlled_Parts and No_Task_Parts.  It takes a parameter
	indicating which aspect is being checked.
	(Freeze_Entity): Call Check_No_Parts_Violations for both
	aspects.
	* sem_ch13.adb (Analyze_Aspect_Specifications): The code for
	Aspect_No_Controlled_Parts already works as is with
	Aspect_No_Task_Parts.
	* libgnat/a-iteint.ads: Add No_Task_Parts aspect to the two
	iterator iterfaces.
	* doc/gnat_rm/implementation_defined_aspects.rst: Add
	documentation for the No_Task_Parts aspect.
	* gnat_rm.texi: Regenerate.
2021-06-15 06:19:35 -04:00
Arnaud Charlet
4cee20bb1e [Ada] Fix handling of scopes for subprogram calls in unnesting
gcc/ada/

	* exp_unst.adb (Unnest_Subprogram.Build_Table.Visit_Node): Fix
	handling of scopes for subprogram calls.
2021-06-15 06:19:34 -04:00
Piotr Trojanek
903655af70 [Ada] Fix detection of access-to-variable types
gcc/ada/

	* sem_prag.adb: Fix typos in comments related to access types.
	* sem_util.adb (Is_Access_Variable): Stronger condition.
2021-06-15 06:19:33 -04:00
Arnaud Charlet
abcf517497 [Ada] Use runtime from base compiler during stage1
gcc/ada/

	* Make-generated.in: Add rule to copy runtime files needed
	during stage1.
	* raise.c: Remove obsolete symbols used during bootstrap.
	* gcc-interface/Make-lang.in: Do not use libgnat sources during
	stage1.
	(GNAT_ADA_OBJS, GNATBIND_OBJS): Split in two parts, the common
	part and the part only used outside of stage1.
	(ADA_GENERATED_FILES): Add runtime files needed during bootstrap
	when recent APIs are needed.
	(ada/b_gnatb.adb): Remove prerequisite.
	* gcc-interface/system.ads: Remove obsolete entries.
2021-06-15 06:19:32 -04:00
Eric Botcazou
472c843467 [Ada] Minor consistency fix for Windows SEH
gcc/ada/

	* raise-gcc.c (__gnat_personality_seh0): Use PERSONALITY_FUNCTION.
2021-06-15 06:19:31 -04:00
Ed Schonberg
9e47051a37 [Ada] AI12-0138: Iterators and other nonoverridable aspects
gcc/ada/

	* sem_util.adb (Is_Confirming): Separate the handling of
	Implicit_Dereference, for which no pragma is generated but which
	is already checked for legality in Sem_Ch13, including renamed
	discriminants in a derived type.
	(Is_Confirming, Same_Name): For expanded names, only check
	matching of selector, because prefix may correspond to original
	and derived types with different names and/or scopes. Semantic
	checks on aspect expression have already verified its legality.
	Add comments regarding possible gaps in RM description of the
	feature.
2021-06-15 06:19:30 -04:00
Gary Dismukes
3d4fbcb4c9 [Ada] Error when passing subprogram'Access to null-defaulted formal subprogram
gcc/ada/

	* freeze.adb (Freeze_Subprogram): Don't propagate conventions
	Intrinsic or Entry to anonymous access-to-subprogram types
	associated with subprograms having those conventions. Update
	related comment.
	* sem_attr.adb (Resolve_Attribute, Attribute_*Access): Remove
	special-case warning code for cases where a called subprogram
	has convention Intrinsic as well as its formal's type (the
	expected type for the Access attribute), since this case can no
	longer occur.
2021-06-15 06:19:29 -04:00
Piotr Trojanek
d675f35287 [Ada] Fix typos in comment about expansion of attribute Image
gcc/ada/

	* exp_imgv.adb (Expand_User_Defined_Enumeration_Image): Fix
	typos.
2021-06-15 06:19:28 -04:00
Bob Duff
df3db34e57 [Ada] Allow Known_Static_Component_Size (etc) on private types
gcc/ada/

	* einfo-utils.adb (Known_Component_Size,
	Known_Static_Component_Size, Unknown_Component_Size): Use
	Implementation_Base_Type instead of Base_Type.
2021-06-15 06:19:27 -04:00
Bob Duff
65067cb65d [Ada] Add Interface_Name field to E_Loop_Parameter
gcc/ada/

	* gen_il-gen-gen_entities.adb (E_Loop_Parameter): Add
	Interface_Name field.
2021-06-15 06:19:26 -04:00
Bob Duff
d31c2b9433 [Ada] Disable certain checks in predefined units
gcc/ada/

	* sem_cat.adb (Check_Non_Static_Default_Expr): Allow nonstatic
	expression in predefined unit with pragma Preelaborate.
2021-06-15 06:19:26 -04:00
Yannick Moy
688fb8553b [Ada] Clarify the semantics of signed intrinsic shift operations
gcc/ada/

	* doc/gnat_rm/intrinsic_subprograms.rst: More details on shift
	operations for signed types. Also add the missing Import and
	Convention on the example.
	* gnat_rm.texi: Regenerate.
2021-06-15 06:19:25 -04:00
Eric Botcazou
385484ef92 [Ada] Small cleanup in exception handling C code
gcc/ada/

	* raise-gcc.c: Include <cstdarg> instead of <stdarg.h> in C++.
	Include <stdbool.h> and unconditionally <stdlib.h> in C.
2021-06-15 06:19:24 -04:00
Piotr Trojanek
9880492caa [Ada] Remove redundant guard from Find_Overlaid_Entity
gcc/ada/

	* sem_util.ads (Find_Overlaid_Entity): Simplify comment for
	spec.
	* sem_util.adb (Find_Overlaid_Entity): Remove defensive code
	from body.
2021-06-15 06:19:23 -04:00
Eric Botcazou
86347b2d8d [Ada] Remove const qualifier on a couple of pointed-to types
gcc/ada/

	* argv.c: Add include of <stdlib.h> for the runtime.
	(gnat_argv): Change type to char ** and initialize to NULL.
	(gnat_envp): Likewise.
	* argv-lynxos178-raven-cert.c: Add include of <stdlib.h>.
	(gnat_argv): Change type to char ** and initialize to NULL.
	(gnat_envp): Likewise.
2021-06-15 06:19:22 -04:00
Bob Duff
b233916016 [Ada] Fix bug in if_expressions introduced by var-size nodes changes
gcc/ada/

	* gen_il-gen.adb (Setter_Needs_Parent): Add missing
	Then_Actions.  Fix self-contradictory comment.
	* exp_util.adb (Insert_Actions): Minor comment improvments.
2021-06-15 06:19:21 -04:00
Arnaud Charlet
f1e93d3f1a [Ada] Add support for folding more and/or expressions
gcc/ada/

	* sem_eval.adb (Eval_Logical_Op, Test_Expression_Is_Foldable):
	Add support for folding more "and"/"or" expressions.
	* exp_util.adb (Side_Effect_Free): Fix handling of membership
	tests.
2021-06-15 06:19:20 -04:00
Piotr Trojanek
69558e562c [Ada] Replace repeated calls by references to a local object
gcc/ada/

	* sem_res.adb (Resolve_Actual): Replace repeated calls to
	"Etype (F)" with references to "F_Typ", which keeps the results
	of exactly that call.
2021-06-15 06:19:19 -04:00
Bob Duff
5fdd694a74 [Ada] Variable-sized node types: improve error messages
gcc/ada/

	* gen_il-gen.adb (To_Bit_Offset): Use 'Base to avoid overflow in
	computations in Last_Bit when Offset = 'Last.
	(Choose_Offset): Give a better error message when we run out of
	fields.  In particular, point out that
	Gen_IL.Internals.Bit_Offset'Last needs to be increased.
2021-06-15 06:19:18 -04:00
Bob Duff
a7cadd1860 [Ada] Variable-sized node types -- cleanup
gcc/ada/

	* atree.ads, einfo-utils.ads, einfo-utils.adb, fe.h, gen_il.adb,
	gen_il.ads, gen_il-gen-gen_entities.adb,
	gen_il-gen-gen_nodes.adb, sem_ch12.adb, sem_ch3.adb,
	sem_util.adb, sinfo-utils.ads, treepr.adb, types.ads: Clean up
	??? comments and other comments.
	* atree.adb: Clean up ??? comments and other comments.
	(Validate_Node): Fix bug: "Off_0 (N) < Off_L (N)"
	should be "Off_0 (N) <= Off_L (N)".
	* gen_il-gen.adb, gen_il-gen.ads: Clean up ???
	comments and other comments.  Add support for getter-specific
	and setter-specific preconditions.  Detect the error of putting
	a field in the wrong subrange.  Misc cleanup.
	(Node_Field vs. Entity_Field): Clean up Nmake.  Improve
	comments.
	* gen_il-utils.ads: Misc cleanup. Move...
	* gen_il-internals.ads: ... here.
	* gen_il-utils.adb: Misc cleanup. Move...
	* gen_il-internals.adb: ... here.
	* gen_il-fields.ads: Move Was_Default_Init_Box_Association,
	which was in the wrong subrange.  Add comments.  Misc cleanup.
	* gen_il-types.ads: Add Named_Access_Kind.
	* sinfo-cn.adb: Clean up ??? comments and other comments.
	Remove redundant assertions.
	* einfo.ads, sinfo.ads: Clean up ??? comments and other
	comments.  Remove all the comments indicating field offsets.
	These are obsolete now that Gen_IL computes the offsets
	automatically.
2021-06-15 06:19:16 -04:00
Arnaud Charlet
81e68a1954 [Ada] Rename Ada 202* to Ada 2022
gcc/ada/

	* einfo.ads, errout.adb, errout.ads, exp_aggr.adb, exp_ch5.adb,
	exp_ch6.adb, exp_ch8.adb, exp_ch9.adb, exp_imgv.adb,
	exp_put_image.adb, fe.h, impunit.adb, impunit.ads,
	libgnat/a-cobove.ads, libgnat/a-convec.ads, opt.ads,
	par-ch12.adb, par-ch3.adb, par-ch4.adb, par-ch5.adb,
	par-ch6.adb, par-prag.adb, par-util.adb, scans.ads, scng.adb,
	sem_aggr.adb, sem_attr.adb, sem_ch10.adb, sem_ch12.adb,
	sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb,
	sem_ch8.adb, sem_elab.adb, sem_eval.adb, sem_prag.adb,
	sem_res.adb, sem_type.adb, sem_util.adb, sem_util.ads,
	sinfo.ads, snames.ads-tmpl, sprint.adb, switch-c.adb, usage.adb,
	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
	doc/gnat_rm/implementation_defined_aspects.rst,
	gcc-interface/trans.c: Update all references to Ada 2020 to Ada
	2022. Rename pragma Ada_2020 to Ada_2022.  Update documentation
	accordingly.
	* gnat_ugn.texi, gnat_rm.texi: Regenerate.
2021-06-15 06:19:14 -04:00
Steve Baird
4dbdeeb889 [Ada] Avoid inappropriate error messages regarding aggregates and variant parts
gcc/ada/

	* sem_util.adb (Gather_Components): Factor the test that was
	already being used to govern emitting a pre-Ada_2020 error
	message into an expression function,
	OK_Scope_For_Discrim_Value_Error_Messages. Call that new
	function in two places: the point where the same test was being
	performed previously, and in governing emission of a newer
	Ada_2020 error message. In both cases, the out-mode parameter
	Gather_Components.Report_Errors is set to True even if no error
	messages are generated within Gather_Components.
	* sem_util.ads: Correct a comment.
2021-06-15 06:19:13 -04:00
Richard Kenner
44d27e8e73 [Ada] Add more initialization of Stored_Constraint
gcc/ada/

	* sem_ch3.adb (Array_Type_Declaration, Build_Derived_Type):
	Reinitialize Stored_Constraint when needed.
	(Set_Modular_Size): Likewise.
	* atree.adb: (Check_Vanishing_Fields): Add node id to debugging
	information.
2021-06-15 06:19:11 -04:00
Bob Duff
a5db70e78a [Ada] Fix bug in subtype of private type with invariants
gcc/ada/

	* sem_util.adb (Propagate_Invariant_Attributes): Call
	Set_Has_Own_Invariants on the base type, because these are
	Base_Type_Only. The problem is that the base type of a type is
	indeed a base type when Set_Base_Type is called, but then the
	type is mutated into a subtype in rare cases.
	* atree.ads, atree.adb (Is_Entity): Export. Correct subtype of
	parameter in body.
	* gen_il-gen.adb: Improve getters so that "Pre => ..." can refer
	to the value of the field. Put Warnings (Off) on some with
	clauses that are not currently used, but might be used by such
	Pre's.
2021-06-15 06:19:10 -04:00
Piotr Trojanek
ed17bbe3c3 [Ada] Robust switching from incomplete to access types
gcc/ada/

	* sem_ch3.adb (Access_Type_Declaration): Add comments to explain
	the ordering of Mutate_Kind and Set_Directly_Designated_Type;
	remove temporary setting of Ekind to E_Access_Type for building
	_master objects, since now the Ekind is already set to its final
	value. Move repeated code into Setup_Access_Type routine and use
	it so that Process_Subtype is executed before mutating the kind
	of the type entity.
	* gen_il-gen-gen_entities.adb (Gen_Entities): Remove
	Directly_Designated_Type from E_Void, E_Private_Record,
	E_Limited_Private_Type and Incomplete_Kind; now it only belongs
	to Access_Kind entities.
	* sem_util.adb: Minor reformatting.
2021-06-15 06:19:09 -04:00
Jakub Jelinek
008153c843 expr: Fix up VEC_PACK_TRUNC_EXPR expansion [PR101046]
The following testcase ICEs, because we have a mode mismatch.
VEC_PACK_TRUNC_EXPR's operands have different modes from the result
(same vector mode size but twice as large element),
but we were passing non-NULL subtarget with the mode of the result
to the expansion of its arguments, so the VEC_PERM_EXPR in one of the
operands which had V8SImode operands and result had V16HImode target.

Fixed by clearing the subtarget if we are changing mode.

2021-06-15  Jakub Jelinek  <jakub@redhat.com>

	PR target/101046
	* expr.c (expand_expr_real_2) <case VEC_PACK_FIX_TRUNC_EXPR,
	case VEC_PACK_TRUNC_EXPR>: Clear subtarget when changing mode.

	* gcc.target/i386/pr101046.c: New test.
2021-06-15 11:36:47 +02:00
Richard Biener
dfef1164b1 Handle multiple latches in irreducible region mark
The following makes irreducible region discovery handle multiple latches.

2021-06-14  Richard Biener  <rguenther@suse.de>

	* cfgloopanal.c (mark_irreducible_loops): Use a dominance
	check to identify loop latches.
	* cfgloop.c (verify_loop_structure): Likewise.
	* loop-init.c (apply_loop_flags): Allow marked irreducible
	regions even with multiple latches.
	* predict.c (rebuild_frequencies): Simplify.
2021-06-15 10:31:16 +02:00
Richard Biener
b10f895f41 Assert we have irreducible regions marked in the threader
This adds an assert that would fire if any thread path registry
user runs into the check that relies on such regions marked.

2021-06-15  Richard Biener  <rguenther@suse.de>

	* tree-ssa-threadupdate.c
	(jump_thread_path_registry::mark_threaded_blocks): Assert we
	have marked irreducible regions.
2021-06-15 10:29:27 +02:00
Robin Dapp
3fe5464537 testsuite: Fix Wattributes test cases for s390 and add new tests.
There are several FAILs because we have an s390-specific check for a
warning which is not necessary anymore.  Remove it.

Add a new test case that expects a warning about conflicting function
alignment.  This would fail on s390 before but most likely on other
targets as well so it can be a target-independent test.

Also, add a test to verify that we do not emit a note when specifying
conflicting alignment for the same declaration.  Need to explicitly
handle every dg-note because handling one disables dg-note pruning.

gcc/testsuite/ChangeLog:

	* c-c++-common/Wattributes.c: Remove s390-specific check and add
	new tests.
	* gcc.dg/Wattributes-6.c: Likewise.
2021-06-15 09:38:23 +02:00
Robin Dapp
ba2eef033e c-family: Copy DECL_USER_ALIGN even if DECL_ALIGN is similar.
When re-declaring a function with differing attributes DECL_USER_ALIGN
is usually not merged/copied when DECL_ALIGN is similar.  On s390 this
will cause a warning message not to be shown.  Similarly, we warned
about the wrong alignment when short-circuiting an alignment initialization in
common_handle_aligned_attribute ().

Fix this by copying DECL_USER_ALIGN even if DECL_ALIGN is similar as
well as getting rid of the short-circuited initialization.

gcc/c-family/ChangeLog:

	* c-attribs.c (common_handle_aligned_attribute): Remove short
	circuit and dead code.

gcc/c/ChangeLog:

	* c-decl.c (merge_decls): Copy DECL_USER_ALIGN if DECL_ALIGN is
	similar.

gcc/cp/ChangeLog:

	* decl.c (duplicate_decls): Likewise.
2021-06-15 09:12:55 +02:00
Xionghu Luo
327a6b55e1 rs6000: Fix test case failures by PR100085 [PR101020]
Tested pass, committing as obvious.

gcc/testsuite/ChangeLog:

2021-06-14  Xionghu Luo  <luoxhu@linux.ibm.com>

	PR target/101020
	* gcc.target/powerpc/float128-call.c: Adjust counts for be and le.
2021-06-14 20:05:36 -05:00
GCC Administrator
8dc48181af Daily bump. 2021-06-15 00:16:37 +00:00
Martin Sebor
d9f1466f88 Teach compute_objsize about placement new [PR100876].
Resolves:
PR c++/100876 - -Wmismatched-new-delete should understand placement new when it's not inlined

gcc/ChangeLog:

	PR c++/100876
	* builtins.c (gimple_call_return_array): Check for attribute fn spec.
	Handle calls to placement new.
	(ndecl_dealloc_argno): Avoid placement delete.

gcc/testsuite/ChangeLog:

	PR c++/100876
	* g++.dg/warn/Wmismatched-new-delete-4.C: New test.
	* g++.dg/warn/Wmismatched-new-delete-5.C: New test.
	* g++.dg/warn/Wstringop-overflow-7.C: New test.
	* g++.dg/warn/Wfree-nonheap-object-6.C: New test.
	* g++.dg/analyzer/placement-new.C: Prune out expected warning.
2021-06-14 16:48:42 -06:00
Jonathan Wakely
f9598d89a9 libstdc++: Fix noexcept-specifier for ranges::empty
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* include/bits/ranges_base.h (ranges::empty): Check whether
	conversion to bool can throw.
	* testsuite/std/ranges/access/empty.cc: Check for correct
	noexcept-specifier.
2021-06-14 23:13:16 +01:00
Peter Bergner
20073534c0 rs6000: MMA builtin usage ICEs when used in a #pragma omp parallel and using -fopenmp [PR100777]
Using an MMA builtin within an openmp parallel code block, leads to an SSA
verification ICE on the temporaries we create while expanding the MMA builtins
at gimple time.  The solution is to use create_tmp_reg_or_ssa_name(), which
knows when to create either an SSA or register temporary.

2021-06-14  Peter Bergner  <bergner@linux.ibm.com>

gcc/
	PR target/100777
	* config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Use
	create_tmp_reg_or_ssa_name().

gcc/testsuite/
	PR target/100777
	* gcc.target/powerpc/pr100777.c: New test.
2021-06-14 16:55:18 -05:00
Andrew MacLeod
ecc5644fa3 Limit new value calculations to first order effects.
When utilzing poor values during propagation, we mostly care about values that
were undefined/processed directly used in calcualting the SSA_NAME being
processed.  2nd level derivations of such poor values rarely affect the
inital calculation.  Leave them to when they are directly encountered.

	* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
	(ranger_cache::enable_new_values): Set to specified value and
	return the old value.
	(ranger_cache::disable_new_values): Delete.
	(ranger_cache::fill_block_cache): Disable non 1st order derived
	poor values.
	* gimple-range-cache.h (ranger_cache): Adjust prototypes.
	* gimple-range.cc (gimple_ranger::range_of_expr): Adjust.
2021-06-14 17:06:32 -04:00
Jonathan Wakely
c37b5ddcc8 libstdc++: Fix common_reference for non-reference results [PR100894]
The result of COMMON-REF(A&, B&&) where they have no common reference
type should not be a reference. The implementation of COMMON-REF fails
to check that the result is a reference, so is well-formed when it
shouldn't be. This means that common_reference uses that result when it
shouldn't.

The fix is to reject the result of COMMON-REF(A, B) if it's not a
reference, so that common_reference falls through to the next case,
which uses COND-RES, which yields a non-reference result.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/100894
	* include/std/type_traits (__common_ref_impl<X&, Y&>): Only
	use the type if it's a reference.
	* testsuite/20_util/common_reference/100894.cc: New test.
2021-06-14 21:17:53 +01:00
Uros Bizjak
4986946f3b i386: Split V2HImode *punpckwd to SSE instruction [PR101058]
V2HImode *punpckwd should not be split to the insn that depends on
TARGET_MMX_WITH_SSE, since the later is disabled on 32bit targets.

Also return true early from ix86_vectorize_vec_perm_const when testing
with V2HI mode.  *punpckwd can be used to implement all permutations.

2021-06-14  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
	PR target/101058
	* config/i386/i386-expand.c (ix86_vectorize_vec_perm_const):
	Return true early when testing with V2HImode.
	* config/i386/mmx.md (*punpckwd): Split to sse2_pshuflw_1.

gcc/testsuite/

	PR target/101058
	* gcc.target/i386/pr101058.c: New test.
2021-06-14 20:57:11 +02:00