Commit Graph

186171 Commits

Author SHA1 Message Date
Arnaud Charlet
5ddd01d6d4 [Ada] Replace Opt.Extensions_Allowed by Ada_Version
gcc/ada/

	* fe.h, opt.adb, opt.ads, par-prag.adb, sem_prag.adb,
	switch-c.adb (Extensions_Allowed): Replace by a function.
	(Ada_Version_Type): Add new value Ada_With_Extensions, to
	replace setting of Extensions_Allowed.  Update setting of
	Extensions_Allowed.
2021-06-18 04:36:46 -04:00
Arnaud Charlet
4153c75471 [Ada] GNAT.Compiler_Version and LTO
gcc/ada/

	* bindgen.adb (Gen_Output_File_Ada): Generate a new constant
	GNAT_Version_Address.
	* libgnat/g-comver.adb (GNAT_Version_Address): New;
	(GNAT_Version): Use GNAT_Version_Address to disable LTO warning.
2021-06-18 04:36:46 -04:00
Javier Miranda
07537fe632 [Ada] Ada2020: Special handling of types derived from runtime
gcc/ada/

	* einfo.ads (Is_Ada_2022_Only): Adding documentation.
	* gen_il-fields.ads (Is_Ada_2022_Only): New flag.
	* gen_il-gen-gen_entities.adb (Is_Ada_2022_Only): New flag.
	* itypes.adb (Create_Null_Excluding_Itype): Inherit
	Is_Ada_2022_Only.
	* sem_ch3.adb (Check_Abstract_Overriding): Skip reporting error
	on Ada 2022 only subprograms that require overriding if we are
	not in Ada 2022 mode.
	(Derive_Subprogram): Inherit Is_Ada_2022_Only.
	* sem_ch6.adb (Check_Overriding_Indicator): Inherit
	Is_Ada_2022_Only.
	(New_Overloaded_Entity): Inherit Is_Ada_2022_Only.
	* sem_ch7.adb (Declare_Inherited_Private_Subprograms): Inherit
	Is_Ada_2022_Only.
	(Preserve_Full_Attributes): Inherit Is_Ada_2022_Only.
	* sem_disp.adb (Find_Hidden_Overridden_Primitive): Inherit
	Is_Ada_2022_Only.
	(Override_Dispatching_Operation): Inherit Is_Ada_2022_Only.
	* sem_prag.adb (Analyze_Pragma): Allow form with argument for
	Ada 2022.
	* sem_type.adb: (Disambiguate): Deal with Is_Ada_2022_Only
	* lib-xref.adb (Generate_Reference): Error on static and
	dispatching calls to Ada 2022 subprograms that require
	overriding if we are not in Ada 2022 mode; warn on other
	references to Ada 2022 entities when not in Ada 2022 mode.
	* sem_ch13.adb (Inherit_Aspects_At_Freeze_Point): Inherit
	Ada_2020_Only.
	* libgnat/a-cdlili.ads (Empty): Adding pragma Ada_2022.
	* libgnat/a-cidlli.ads (Empty): Adding pragma Ada_2022.
	* libgnat/a-ciorma.ads (Empty): Adding pragma Ada_2022.
	* libgnat/a-cobove.ads (Empty): Adding pragma Ada_2022.
	* libgnat/a-coorma.ads (Empty): Adding pragma Ada_2022.
	(New_Vector): Adding pragma Ada_2022.
	(Insert_Vector): Adding pragma Ada_2022.
	(Prepend_Vector): Adding pragma Ada_2022.
	(Append_Vector): Adding pragma Ada_2022.
2021-06-18 04:36:46 -04:00
Andrew Pinski
64b5da8f97 Add statistics counting to PHI-OPT
This should have been done before I started to work on connecting
PHI-OPT to match-and-simplify to see quickly if we miss anything
but it is better late than never.
Anyways there was no statistics counting in PHI-OPT before so adding
it is the right thing to do.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/ChangeLog:

	* tree-ssa-phiopt.c (replace_phi_edge_with_variable):
	Add counting of how many times it is done.
	(factor_out_conditional_conversion): Likewise.
	(match_simplify_replacement): Likewise.
	(value_replacement): Likewise.
	(spaceship_replacement): Likewise.
	(cond_store_replacement): Likewise.
	(cond_if_else_store_replacement_1): Likewise.
	(hoist_adjacent_loads): Likewise.
2021-06-18 00:58:18 -07:00
Andrew Pinski
2f1686ff70 Disallow pointer and offset types on some gimple
While debugging PR 100925, I found that the gimple verifiers
don't reject NEGATE on pointer or offset type.
This patch adds the check on some unary and binary gimple which
should not have operated on pointer/offset types.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

Thanks,
Andrew Pinski

gcc/ChangeLog:

	* tree-cfg.c (verify_gimple_assign_unary): Reject point and offset
	types on NEGATE_EXPR, ABS_EXPR, BIT_NOT_EXPR, PAREN_EXPR and CNONJ_EXPR.
	(verify_gimple_assign_binary): Reject point and offset types on
	MULT_EXPR, MULT_HIGHPART_EXPR, TRUNC_DIV_EXPR, CEIL_DIV_EXPR,
	FLOOR_DIV_EXPR, ROUND_DIV_EXPR, TRUNC_MOD_EXPR, CEIL_MOD_EXPR,
	FLOOR_MOD_EXPR, ROUND_MOD_EXPR, RDIV_EXPR, and EXACT_DIV_EXPR.
2021-06-18 00:58:18 -07:00
Patrick Palka
2786064d91 libstdc++: Move ranges algos used by <ranges> into ranges_util.h
The <ranges> header defines simplified copies of some ranges algorithms
in order to avoid including the entirety of ranges_algo.h.  A subsequent
patch is going to want to use ranges::search in <ranges> as well, and
that algorithm is more complicated compared to the other copied ones.

So rather than additionally copying ranges::search into <ranges>, this
patch splits out all the ranges algos used by <ranges> (including
ranges::search) from ranges_algo.h to ranges_util.h, and deletes the
simplified copies in <ranges>.  This seems like the best place to
put these algorithms, as ranges_util.h is currently included only from
<ranges> and ranges_algo.h.

libstdc++-v3/ChangeLog:

	* include/bits/ranges_algo.h (__find_fn, find, __find_if_fn)
	(find_if, __find_if_not_fn, find_if_not, _in_in_result)
	(__mismatch_fn, mismatch, __search_fn, search): Move to ...
	* include/bits/ranges_util.h: ... here.
	* include/std/ranges (__detail::find, __detail::find_if)
	(__detail::find_if_not, __detail::mismatch): Remove.
	(filter_view): Use ranges::find_if instead.
	(drop_while_view): Use ranges::find_if_not instead.
	(split_view): Use ranges::find and ranges::mismatch instead.
2021-06-17 22:44:41 -04:00
Patrick Palka
4b4f5666b4 libstdc++: Implement P2325 changes to default-constructibility of views
This implements the wording changes of P2325R3 "Views should not be
required to be default constructible".  Changes are relatively
straightforward, besides perhaps those to __box (which now stands
for copyable-box instead of semiregular-box) and __non_propagating_cache.

For __box, this patch implements the recommended practice to also avoid
std::optional when the boxed type is nothrow_move/copy_constructible.

For __non_propagating_cache, now that it's used by split_view::_M_current,
we need to add assignment from a value of the underlying type to the
subset of the std::optional API implemented for the cache (needed by
split_view::begin()).  Hence the new __non_propagating_cache::operator=
overload.

In passing, this fixes the undesirable list-init in the constructors of
the partial specialization of __box as reported in PR100475 comment #7.

libstdc++-v3/ChangeLog:

	* include/bits/iterator_concepts.h (weakly_incrementable): Remove
	default_initializable requirement.
	* include/bits/ranges_base.h (ranges::view): Likewise.
	* include/bits/ranges_util.h (subrange): Constrain the default
	ctor.
	* include/bits/stl_iterator.h (back_insert_iterator): Remove the
	default ctor.
	(front_insert_iterator): Likewise.
	(insert_iterator): Likewise.  Remove NSDMIs.
	(common_iterator): Constrain the default ctor.
	(counted_iterator): Likewise.
	* include/bits/stream_iterator.h (ostream_iterator): Remove the
	default ctor.
	* include/std/ranges (__detail::__box::operator=): Handle
	self-assignment in the primary template.
	(__detail::__box): In the partial specialization: adjust
	constraints as per P2325.  Add specialized operator= for the
	case when the wrapped type is not copyable.  Constrain the
	default ctor.  Avoid list-initialization.
	(single_view): Constraint the default ctor.
	(iota_view): Relax semiregular constraint to copyable.
	Constrain the default ctor.
	(iota_view::_Iterator): Constraint the default ctor.
	(basic_istream_view): Remove the default ctor.  Remove NSDMIs.
	Remove redundant checks for empty _M_stream.
	(basic_istream_view::_Iterator): Likewise.
	(ref_view): Remove the default ctor.  Remove NSDMIs.
	(ref_view::_Iterator): Constrain the default ctor.
	(__detail::__non_propagating_cache::operator=): Define overload
	for assigning from a value of the underlying type.
	(filter_view): Likewise.
	(filter_view::_Iterator): Likewise.
	(transform_view): Likewise.
	(transform_view::_Iterator): Likewise.
	(take_view): Likewise.
	(take_view::_Iterator): Likewise.
	(take_while_view): Likewise.
	(take_while_view::_Iterator): Likewise.
	(drop_while_view): Likewise.
	(drop_while_view::_Iterator): Likewise.
	(join_view): Likewise.
	(split_view::_OuterIter::__current): Adjust after changing the
	type of _M_current.
	(split_view::_M_current): Wrap it in a __non_propagating_cache.
	(split_view::split_view): Constrain the default ctor.
	(common_view): Constrain the default ctor.
	(reverse_view): Likewise.
	(elements_view): Likewise.
	* include/std/span (enable_view<span<_ElementType, _Extent>>):
	Define this partial specialization to true unconditionally.
	* include/std/version (__cpp_lib_ranges): Adjust value.
	* testsuite/24_iterators/back_insert_iterator/constexpr.cc:
	Don't attempt to default construct a back_insert_iterator.
	* testsuite/24_iterators/front_insert_iterator/constexpr.cc:
	Don't attempt to default construct a front_insert_iterator.
	* testsuite/24_iterators/insert_iterator/constexpr.cc:
	Don't attempt to default construct an insert_iterator.
	* testsuite/24_iterators/ostream_iterator/requirements/constexpr.cc:
	Remove this test for default constructibility of ostream_iterator.
	* testsuite/std/ranges/97600.cc: Don't attempt to default
	construct a basic_istream_view.
	* testsuite/std/ranges/adaptors/detail/semiregular_box.cc:
	Rename to ...
	* testsuite/std/ranges/adaptors/detail/copyable_box.cc: ... this.
	(test02): Adjust now that __box is copyable-box not
	semiregular-box.
	(test03): New test.
	* testsuite/std/ranges/p2325.cc: New test.
	* testsuite/std/ranges/single_view.cc (test06): New test.
	* testsuite/std/ranges/view.cc: Adjust now that view doesn't
	require default_initializable.
2021-06-17 22:29:03 -04:00
Michael Meissner
7d08043da9 Add IEEE 128-bit min/max support on PowerPC.
This patch adds the support for the IEEE 128-bit floating point C minimum and
maximum instructions.  The next patch will add the support for using the
compare and set mask instruction to implement conditional moves.

This patch does not try to re-use the code used for SF/DF min/max
support.  It defines a separate insn for the IEEE 128-bit support.  It
uses the code iterator <minmax> to simplify adding both operations.

GCC will not convert ternary operations into using min/max instructions
provided in this patch unless the user uses -Ofast.  The next patch that adds
conditional move instructions will enable the ternary conversion in many cases.

gcc/
2021-06-17  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/rs6000.c (rs6000_emit_minmax): Add support for ISA
	3.1 IEEE 128-bit floating point xsmaxcqp/xsmincqp instructions.
	* config/rs6000/rs6000.md (s<minmax><mode>3, IEEE128 iterator):
	New insns.

gcc/testsuite/
2021-06-17  Michael Meissner  <meissner@linux.ibm.com>

	* gcc.target/powerpc/float128-minmax-2.c: New test.
2021-06-17 22:05:16 -04:00
GCC Administrator
688359a27d Daily bump. 2021-06-18 00:16:58 +00:00
Jonathan Wakely
b376b1ef38 libstdc++: Simplify constexpr checks in std::char_traits [PR 91488]
This removes the helper functions added by r8-1294 to detect whether the
char_traits member functions can be evaluated at compile time. Instead,
we can just use __builtin_constant_evaluated directly, which is well
supported by non-GCC compilers by now.

As a result, there is a chance that those members will no longer be
usable in constant expressions when using old versions of non-GCC
compilers. Make the relevant feature test macros depend on the
availability of __builtin_constant_evaluated, so they are defined only
when the feature is actualyl available.

The new testcase from the PR is added to the libitm testsuite, because
that's where we can be sure it's OK to use the -fgnu-tm option.

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

	PR libstdc++/91488

libstdc++-v3/ChangeLog:

	* include/bits/basic_string.h (__cpp_lib_constexpr_string): Only
	define when is_constant_evaluated is available.
	* include/bits/char_traits.h (__cpp_lib_constexpr_char_traits):
	Likewise.
	(__constant_string_p, __constant_array_p): Remove.
	(char_traits): Use is_constant_evaluated directly.
	* include/std/version (__cpp_lib_constexpr_char_traits)
	(__cpp_lib_constexpr_string): Only define when
	is_constant_evaluated is available.

libitm/ChangeLog:

	* testsuite/libitm.c++/libstdc++-pr91488.C: New test.
2021-06-17 22:00:58 +01:00
Jason Merrill
331e20a69b c++: deleted after first declaration [PR101106]
An explicitly deleted function must be deleted on its first declaration.  We
were diagnosing this error only with -Wpedantic, but always giving the
"previous declaration" note.  This patch removes the -Wpedantic dependency
and also makes the note depend on the previous diagnostic.

	PR c++/101106

gcc/cp/ChangeLog:

	* decl.c (duplicate_decls): Make 'deleted after first declaration'
	pedwarn on by default.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp0x/deleted15.C: New test.
2021-06-17 15:48:07 -04:00
Jason Merrill
58e3b17f4c mklog: add subject line skeleton
In the recent gcc-commit-mklog thread on gcc@ it occurred to me that the
command could also fill in part of the subject line.  If the first PR is
foo/1234, and the commit does not yet have a subject line, this will add

foo: [PR1234]

contrib/ChangeLog:

	* mklog.py: Add an initial component: [PRnnnnn] line when
	we have a PR.
2021-06-17 13:15:57 -04:00
Aaron Sawdey
00f730ec3a Add needed earlyclobber to fusion patterns
The add-logical and add-add fusion patterns all have constraint
alternatives "=0,1,&r,r" for the output (3). The inputs 0 and 1
are used in the first fusion instruction and then either may be
reused as a temp for the output of the first insn which is
input to the second. However, if input 2 is the same as 0 or 1,
it gets clobbered unexpectedly. So the first 2 alts need to be
"=&0,&1,&r,r" instead to indicate that in alts 0 and 1, the
register used for 3 is earlyclobber, hence can't be the same as
input 2.

This was actually encountered in the backport of the add-logical
fusion patch to gcc-11. Some code in go hit this case:

   <runtime.fillAligned+520>:        andc r30,r30,r9
r30 now (~(x|((x&c)+c)))&(~c) --> this is new x
   <runtime.fillAligned+524>:        b <runtime.fillAligned+288>
   <runtime.fillAligned+288>:        addi r31,r31,-1
r31 now m-1
   <runtime.fillAligned+292>:        srd r31,r30,r31
r31 now x>>(m-1)
   <runtime.fillAligned+296>:        subf r30,r31,r30
r30 now x-(x>>(m-1))
   <runtime.fillAligned+300>:        or r30,r30,r30   # mdoom
nop
   <runtime.fillAligned+304>:        not     r3,r30
r3 now ~(x-(x>>(m-1))) -- WHOOPS

The or r30,r30,r30 was meant to be or-ing in the earlier value
of r30 which was overwritten by the output of the subf.

gcc/ChangeLog

	* config/rs6000/genfusion.pl (gen_logical_addsubf): Add
	earlyclobber to alts 0/1.
	(gen_addadd): Add earlyclobber to alts 0/1.
	* config/rs6000/fusion.md: Regenerate file.
2021-06-17 10:48:17 -05:00
Trevor Saunders
caeb8892a5 fix get-loop_hot_path with gcc 4.8.5
gcc/ChangeLog:

	* cfgloopanal.c (get_loop_hot_path): Make path an auto_vec.
2021-06-17 11:12:30 -04:00
Arnaud Charlet
7ba8725fc3 [Ada] Crash on overriding of an abstract primitive on an incomplete type
gcc/ada/

	* sem_ch3.adb (Check_Ops_From_Incomplete_Type): Protect against
	no Primitive_Operations.
2021-06-17 10:32:17 -04:00
Vadim Godunko
59d5d8cdb9 [Ada] Fix operations on Unbounded_String...
gcc/ada/

	* libgnat/a-strunb__shared.ads (Allocate): Additional parameter
	to provide additional amount of space to be allocated.
	* libgnat/a-strunb__shared.adb (Aligned_Max_Length): Limit
	length to Natural'Last when requested length is larger than it.
	(Allocate): Merge two slightly different implementations into
	one.
2021-06-17 10:32:16 -04:00
Gary Dismukes
d32db3a763 [Ada] Implementation of Inox feature of fixed lower bounds on array types/subtypes
gcc/ada/

	* checks.adb (Discrete_Range_Cond): For an index subtype that
	has a fixed lower bound, require that the range's lower bound
	match that of the subtype.
	(Selected_Range_Checks): Warn about the case where a static
	lower bound does not equal an index subtype's fixed lower bound.
	* einfo.ads (Is_Fixed_Lower_Bound_Array_Subtype,
	Is_Fixed_Lower_Bound_Index_Subtype): Document new entity flag.
	* exp_ch4.adb (Expand_N_Type_Conversion): If the operand is of
	an unconstrained array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the operand.
	* exp_ch6.adb (Expand_Simple_Function_Return): If the result
	subtype is an unconstrained array subtype with fixed lower
	bound, then Expand_Sliding_Conversion is applied to the return
	object.
	* exp_util.ads (Expand_Sliding_Conversion): New procedure for
	applying a sliding subtype conversion to an array object of a
	fixed-lower-bound subtype when needed.
	* exp_util.adb: Add with_clause for Freeze.
	(Expand_Sliding_Conversion): New procedure for applying a
	sliding subtype conversion to an array object of a
	fixed-lower-bound subtype when needed.  It traverses the indexes
	of the unconstrained array type/subtype to create a target
	constrained subtype and rewrites the array object to be a
	conversion to that subtype, when there's at least one index
	whose lower bound does not statically match the fixed-lower
	bound of the target subtype.
	* gen_il-fields.ads (type Opt_Field_Enum): Add literals
	Is_Fixed_Lower_Bound_Array_Subtype and
	Is_Fixed_Lower_Bound_Index_Subtype for new flags on type
	entities.
	* gen_il-gen-gen_entities.adb: Add calls to
	Create_Semantic_Field for the new fixed-lower-bound flags on
	type entities.
	* par-ch3.adb (P_Array_Type_Definition): Add handling for
	parsing of fixed-lower-bound index ranges in unconstrained array
	types. Report an error if such an index is encountered and GNAT
	language extensions are not enabled.
	(P_Index_Subtype_Def_With_Fixed_Lower_Bound): Support procedure
	for parsing unconstrained index ranges.
	(P_Index_Or_Discriminant_Constraint): Add handling for parsing
	of index constraints that specify ranges with fixed lower
	bounds. Report an error if such an index is encountered and GNAT
	language extensions are not enabled.
	* sem_ch3.adb (Analyze_Object_Declaration): If the object's
	nominal subtype is an array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the object.
	(Array_Type_Declaration): Mark the array type and the subtypes
	of any indexes that specify a fixed lower bound as being
	fixed-lower-bound subtypes, and set the High_bound of the range
	of such an index to the upper bound of the named subtype.
	(Constrain_Array): For an array subtype with one or more index
	ranges specifying a fixed lower bound, set Is_Constrained to
	False and set the array subtype's
	Is_Fixed_Lower_Bound_Array_Subtype flag to True.
	(Constrain_Index): Mark the subtypes of an index that specifies
	a fixed lower bound as being a fixed-lower-bound index subtype,
	and set the High_bound of the range of such an index to the
	upper bound of the base type of the array type's corresponding
	index.
	* sem_res.adb (Resolve_Actuals): If a formal is of an
	unconstrained array subtype with fixed lower bound, then
	Expand_Sliding_Conversion is applied to the actual.
	* sem_util.adb (Build_Actual_Subtype): If the actual subtype
	corresponds to an unconstrained array subtype having any indexes
	with fixed lower bounds, then set the lower bounds of any such
	indexes of the actual subtype to the appropriate fixed lower
	bound of the formal subtype (rather than taking it from the
	formal itself).
	* sprint.adb (Sprint_Node_Actual, case N_Range): If a range's
	Etype has a fixed lower bound, then print "<>" rather than the
	High_Bound of the range.
2021-06-17 10:32:16 -04:00
Bob Duff
4892e31dac [Ada] Warn on 'in out' param containing access in predefined private type
gcc/ada/

	* sem_util.adb, sem_util.ads (Has_Access_Values): New formal
	Include_Internal to indicate whether internal types should be
	included.
	* sem_warn.adb (Check_References): Change E_Out_Parameter to
	Formal_Kind, to match the comment about Spec_Entity.  Pass
	Include_Internal => False to Has_Access_Values, so that we warn
	on types with access values that happen to be in internal types,
	such as Unbounded_String.
	* sem_attr.adb (Attribute_Has_Access_Values): Pass
	Include_Internal => True to Has_Access_Values, to preserve
	existing behavior.
	* libgnat/g-rewdat.adb (Do_Output): Change B from 'in out' to
	'in', to avoid warning enabled by the change to sem_warn.adb.
	* libgnat/s-objrea.adb (Check_Read_Offset): Change S from 'in
	out' to 'in', to avoid warning enabled by the change to
	sem_warn.adb.
2021-06-17 10:32:16 -04:00
Steve Baird
e1dfbb03f9 [Ada] Casing on composite values
gcc/ada/

	* exp_ch5.adb
	(Expand_N_Case_Statement.Expand_General_Case_Statement): New
	subprogram.
	(Expand_N_Case_Statement): If extensions are allowed and the
	case selector is not of a discrete type, then call
	Expand_General_Case_Statement to generate expansion instead of
	flagging the non-discrete selector as an error.
	* sem_case.ads (Is_Case_Choice_Pattern): New Boolean-valued
	function for testing whether a given expression occurs as part
	of a case choice pattern.
	* sem_case.adb (Composite_Case_Ops): New package providing
	support routines for the new form of case statements. This
	includes a nested package, Composite_Case_Ops.Value_Sets, which
	encapsulates the "representative values" implementation of
	composite value sets.
	(Check_Choices.Check_Case_Pattern_Choices): New procedure for
	semantic checking of non-discrete case choices. This includes
	the checks pertaining to coverage and overlapping.
	(Check_Choices.Check_Composite_Case_Selector): New procedure for
	semantic checking of non-discrete case selectors.
	(Check_Choices): If extensions are allowed then a non-discrete
	selector type no longer implies that an error must have been
	flagged earlier.  Instead of simply returning, call
	Check_Composite_Case_Selector and Check_Case_Pattern_Choices.
	(Is_Case_Choice_Pattern): Body of new function declared in
	sem_case.ads .
	* sem_ch5.adb (Analyze_Case_Statement): If extensions are
	allowed, then we can't use RM 5.4's "The selecting_expression is
	expected to be of any discrete type" name resolution rule.
	Handle the case where the type of the selecting expression is
	not discrete, as well as the new ambiguous-name-resolution error
	cases made possible by this change.
	* sem_res.adb (Resolve_Entity_Name): It is ok to treat the name
	of a type or subtype as an expression if it is part of a case
	choice pattern, as in "(Field1 => Positive, Field2 => <>)".
	* exp_aggr.adb (Expand_Record_Aggregate): Do not expand case
	choice aggregates.
	* gen_il-fields.ads: Define two new node attributes,
	Binding_Chars and Multidefined_Bindings.
	* gen_il-gen-gen_nodes.adb: The new Multidefined_Bindings
	attribute is Boolean-valued and may be set on
	N_Case_Statement_Alternative nodes. The new Binding_Chars
	attribute is Name_Id-valued and may be set on
	N_Component_Association nodes.
	* par-ch4.adb (P_Record_Or_Array_Component_Association): When
	parsing a component association, check for both new syntax forms
	used to specify a bound value in a case-choice aggregate.  In
	the case of a box value, an identifier may occur within the box,
	as in "Foo => <Abc>" instead of "Foo => <>". In the more general
	case, an expression (or a box) may be followed by "is
	<identifier>", as in
	"Foo => Bar is Abc" instead of just "Foo => Bar".
	* sem_aggr.adb (Resolve_Record_Aggregate): Do not transform box
	component values in a case-choice aggregate.
	* sinfo.ads: Provide comments for the new attributes added in
	gen_il-fields.ads.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Describe this
	new feature in documentation for pragma Extensions_Allowed.
	* gnat_rm.texi: Regenerate.
2021-06-17 10:32:15 -04:00
Arnaud Charlet
5f900b589c [Ada] Missing finalization on nested expression with action
gcc/ada/

	* exp_ch4.adb (Expand_N_Expression_With_Actions.Process_Action):
	Do not abandon processing on a nested N_Expression_With_Actions
	or N_Loop_Statement, otherwise we may miss some transient
	declarations.
2021-06-17 10:32:15 -04:00
Arnaud Charlet
b4d46ee9a1 [Ada] Crash on a nested aggregate containing controlled objects
gcc/ada/

	* exp_util.adb (Find_Hook_Context): Do not stop on an aggregate
	node.
2021-06-17 10:32:15 -04:00
Piotr Trojanek
aeafd222d4 [Ada] Fix detection of valid renamings for overlapping checks
gcc/ada/

	* sem_util.adb (Is_Valid_Renaming): Check not only indexed
	components, but slices too.
2021-06-17 10:32:15 -04:00
Piotr Trojanek
fc473ce74c [Ada] Don't check No_Wide_Characters restriction for illegal types
gcc/ada/

	* sem_ch3.adb (Analyze_Private_Extension_Declaration): Check
	No_Wide_Characters restriction after rejecting illegal parent
	types.
	(Derived_Type_Declaration): Likewise.
	(Find_Type_Of_Subtype_Indic): Remove check for
	No_Wide_Characters restriction, which was done too early.
2021-06-17 10:32:14 -04:00
Piotr Trojanek
4476d93455 [Ada] Remove dubious wrapper of a recursive function
gcc/ada/

	* sem_util.adb (Is_Valid_Renaming): Body moved from its nested
	routine.
2021-06-17 10:32:14 -04:00
Gary Dismukes
83a5b1df3d [Ada] Error in instance on incomplete actual passed to formal incomplete type
gcc/ada/

	* sem_ch12.adb (Instantiate_Type): If the actual type for an
	incomplete formal type is also incomplete, but has a Full_View,
	use the Full_View of the actual type rather than the incomplete
	view.
2021-06-17 10:32:14 -04:00
Piotr Trojanek
cad7431bd6 [Ada] Fix punctuation in documentation of warnings for aliasing actuals
gcc/ada/

	* doc/gnat_ugn/building_executable_programs_with_gnat.rst
	(-gnatw.I): Remove double period at the end of sentence.
	* gnat_ugn.texi: Regenerate.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
3447d9e49e [Ada] Fix detection of slices that denote the same object
gcc/ada/

	* sem_util.adb (Denotes_Same_Object): Call Get_Index_Bounds with
	the range of a slice object, not its type.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
a6d844cd86 [Ada] Check all pairs of actuals for overlapping
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Fix style;
	refactor repeated calls to Nkind; remove early RETURN.
2021-06-17 10:32:13 -04:00
Piotr Trojanek
679124db5b [Ada] Fix handling of generic types in check for overlapping actuals
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Ignore formal of
	generic types, but keep examining other parameters.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
e50d50f0c2 [Ada] Remove dead code for overlapping actuals and prefix notation
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove dead code.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
f0cc08566e [Ada] Cleanup redundant conditions in checks for overlapping actuals
gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove repeated
	code.
2021-06-17 10:32:12 -04:00
Piotr Trojanek
f59ca9eee8 [Ada] Use source casing in messages for aliasing checks
gcc/ada/

	* checks.adb (Overlap_Check): Replace Set_Casing with
	Adjust_Name_Case and adapt surrounding code as needed.
2021-06-17 10:32:12 -04:00
Arnaud Charlet
54f039c934 [Ada] Move runtime units for Put_Image attribute to libgnarl
gcc/ada/

	* libgnat/s-putaim.ads, libgnat/s-putaim.adb: Move...
	* libgnarl/s-putaim.ads, libgnarl/s-putaim.adb: ... here.
2021-06-17 10:32:11 -04:00
Arnaud Charlet
2be63603c6 [Ada] Provide new function Uintp.UI_To_Unsigned_64
gcc/ada/

	* uintp.ads, uintp.adb (UI_To_Unsigned_64): New.
2021-06-17 10:32:11 -04:00
Piotr Trojanek
a76825d6c1 [Ada] Clarify error for unsupported ELIMINATED overflow mode
gcc/ada/

	* sem_prag.adb (Get_Overflow_Mode): Reword error message.
	* switch-c.adb (Get_Overflow_Mode): Likewise.
2021-06-17 10:32:11 -04:00
Richard Kenner
24c554da57 [Ada] Look at Others_Discrete_Choices for N_Others_Choice
gcc/ada/

	* exp_util.adb (Expand_Static_Predicates_In_Choices): Handle
	Others_Discrete_Choices in N_Others_Choice.
2021-06-17 10:32:11 -04:00
Arnaud Charlet
79495262f3 [Ada] Minor comment cleanup
gcc/ada/

	* atree.adb: Remove redundant comment with spec.
	* sem_warn.adb: Fix typo in comment.
2021-06-17 10:32:10 -04:00
Arnaud Charlet
419ad27a77 [Ada] Do not systematically suppress checks on atree.adb
gcc/ada/

	* atree.adb: Do not suppress checks.
2021-06-17 10:32:10 -04:00
Justin Squirek
1326b0e896 [Ada] Removal of technical debt
gcc/ada/

	* exp_ch3.adb (Check_Missing_Others): Add comment.
	(Build_Initialization_Call): Remove inaccurate accessibility
	comment.
	* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Remove
	test for Ada2012.
	(Analyze_Package_Instantiation): Remove speculative comment.
	(Inline_Instance_Body): Add comments for loops.
	(Build_Subprogram_Renaming): Remove comment about fix being
	partial and "ugly."
	(Instantiate_Subprogram_Body): Remove comment referencing DEC
	related internal issue.
	(Subtypes_Match): Add comment and simplify anonymous access
	test.
	(Is_Global): Add test for when E is an expanded name, and
	calculate the scope accordingly.
	* sem_ch6.adb (Analyze_Function_Return): Update comment
	regarding accessibility, and add check for
	Warn_On_Ada_2012_Compatibility.
	(Mask_Type_Refs): Add comments.
	(Analyze_Subprogram_Declaration): Remove mysterious suppression
	of elaboration checks.
	* sem_ch7.adb (Preserve_Full_Attributes): Preserve Is_Atomic
	value.
	* sem_ch8.adb (Most_Descendant_Use_Clause): Remove comment.
	(Note_Redundant_Use): Fix calls to Find_First_Use to be
	Find_Most_Prev.
	(Get_Object_Name): Modify error message to be more descriptive.
	(Known_But_Visible): Remove mysterious special case for
	GNAT_Mode.
	(Find_First_Use): Removed.
	(Find_Most_Prev): Renamed from Find_First_Use.
	* sem_prag.adb (Check_Static_Constraint): Add comments to
	routine.
2021-06-17 10:32:10 -04:00
Bob Duff
8863c3aa86 [Ada] Display Entity in debugging printouts
gcc/ada/

	* treepr.adb (Print_Node): Display the Entity or Associated_Node
	fields if appropriate.
	* sinfo-utils.ads (F_Associated_Node, F_Entity): Remove. These
	are no longer needed.
2021-06-17 10:32:09 -04:00
Piotr Trojanek
9e1ca4e3ab [Ada] Apply aliasing checks only to names and not to objects as actuals
gcc/ada/

	* checks.adb (Apply_Parameter_Aliasing_Checks): Replace calls to
	Is_Object_Reference with calls to Is_Name_Reference; remove
	asymmetric condition that only detected an aggregate as the
	first actual (aggregate objects were just a special case of an
	object reference that was not a name).
2021-06-17 10:32:09 -04:00
Bob Duff
f54fb769ec [Ada] Fix varsize node name conflict
gcc/ada/

	* gen_il-gen.adb, gen_il-internals.ads: Generate field
	enumeration literals with "F_" prefix.  Update all generated
	references accordingly.
	* atree.adb, einfo-utils.adb, sem_ch3.adb, sem_ch5.adb,
	sem_ch6.adb, sem_ch8.adb, sinfo-cn.adb, sinfo-utils.adb,
	sinfo-utils.ads, treepr.adb: Add "F_" prefix to all uses of the
	field enumeration literals.
2021-06-17 10:32:09 -04:00
Arnaud Charlet
1b96f017cd [Ada] AI12-0411 Add "bool" to Interfaces.C
gcc/ada/

	* libgnat/i-c.ads, libgnat/i-cexten.ads,
	libgnat/i-cexten__128.ads: bool renamed C_bool.
2021-06-17 10:32:09 -04:00
Piotr Trojanek
02e9e5fb97 [Ada] Reject allocators in contexts restricted by SPARK
gcc/ada/

	* sem_ch4.adb (Analyze_Allocator): Reject allocators in
	restricted contexts.
2021-06-17 10:32:08 -04:00
Andrew MacLeod
8cbaa09333 Fix spacing and typos in comments.
* gimple-range-cache.cc: Comment cleanups.
	* gimple-range-gori.cc: Comment cleanups.
	* gimple-range.cc: Comment/spacing cleanups
	* value-range.h: Comment cleanups.
2021-06-17 10:12:38 -04:00
Patrick Palka
2b87f3318c libstdc++: Non-triv-copyable extra args aren't simple [PR100940]
This force-enables perfect forwarding call wrapper semantics whenever
the extra arguments of a partially applied range adaptor aren't all
trivially copyable, so as to avoid incurring unnecessary copies of
potentially expensive-to-copy objects (such as std::function objects)
when invoking the adaptor.

	PR libstdc++/100940

libstdc++-v3/ChangeLog:

	* include/std/ranges (__adaptor::_Partial): For the "simple"
	forwarding partial specializations, also require that
	the extra arguments are trivially copyable.
	* testsuite/std/ranges/adaptors/100577.cc (test04): New test.
2021-06-17 09:46:07 -04:00
Patrick Palka
0f4a2fb44d libstdc++: Refine range adaptors' "simple extra args" mechanism [PR100940]
The _S_has_simple_extra_args mechanism is used to simplify forwarding
of range adaptor's extra arguments when perfect forwarding call wrapper
semantics isn't required for correctness, on a per-adaptor basis.
Both views::take and views::drop are flagged as such, but it turns out
perfect forwarding semantics are needed for these adaptors in some
contrived cases, e.g. when their extra argument is a move-only class
that's implicitly convertible to an integral type.

To fix this, we could just clear the flag for views::take/drop as with
views::split, but that'd come at the cost of acceptable diagnostics
for ill-formed uses of these adaptors (see PR100577).

This patch instead allows adaptors to parameterize their
_S_has_simple_extra_args flag according the types of the captured extra
arguments, so that we could conditionally disable perfect forwarding
semantics only when the types of the extra arguments permit it.  We
then use this finer-grained mechanism to safely disable perfect
forwarding semantics for views::take/drop when the extra argument is
integer-like, rather than incorrectly always disabling it.  Similarly,
for views::split, rather than always enabling perfect forwarding
semantics we now safely disable it when the extra argument is a scalar
or a view, and recover good diagnostics for these common cases.

	PR libstdc++/100940

libstdc++-v3/ChangeLog:

	* include/std/ranges (__adaptor::_RangeAdaptor): Document the
	template form of _S_has_simple_extra_args.
	(__adaptor::__adaptor_has_simple_extra_args): Add _Args template
	parameter pack.  Try to treat _S_has_simple_extra_args as a
	variable template parameterized by _Args.
	(__adaptor::_Partial): Pass _Arg/_Args to the constraint
	__adaptor_has_simple_extra_args.
	(views::_Take::_S_has_simple_extra_args): Templatize according
	to the type of the extra argument.
	(views::_Drop::_S_has_simple_extra_args): Likewise.
	(views::_Split::_S_has_simple_extra_args): Define.
	* testsuite/std/ranges/adaptors/100577.cc (test01, test02):
	Adjust after changes to _S_has_simple_extra_args mechanism.
	(test03): Define.
2021-06-17 09:46:04 -04:00
Chung-Lin Tang
275c736e73 libgomp: Structure element mapping for OpenMP 5.0
This patch implement OpenMP 5.0 requirements of incrementing/decrementing
the reference count of a mapped structure at most once (across all elements)
on a construct.

This is implemented by pulling in libgomp/hashtab.h and using htab_t as a
pointer set. Structure element list siblings also have pointers-to-refcounts
linked together, to naturally achieve uniform increment/decrement without
repeating.

There are still some questions on whether using such a htab_t based set is
faster/slower than using a sorted pointer array based implementation. This
is to be researched on later.

libgomp/ChangeLog:

	* hashtab.h (htab_clear): New function with initialization code
	factored out from...
	(htab_create): ...here, adjust to use htab_clear function.

	* libgomp.h (REFCOUNT_SPECIAL): New symbol to denote range of
	special refcount values, add comments.
	(REFCOUNT_INFINITY): Adjust definition to use REFCOUNT_SPECIAL.
	(REFCOUNT_LINK): Likewise.
	(REFCOUNT_STRUCTELEM): New special refcount range for structure
	element siblings.
	(REFCOUNT_STRUCTELEM_P): Macro for testing for structure element
	sibling maps.
	(REFCOUNT_STRUCTELEM_FLAG_FIRST): Flag to indicate first sibling.
	(REFCOUNT_STRUCTELEM_FLAG_LAST):  Flag to indicate last sibling.
	(REFCOUNT_STRUCTELEM_FIRST_P): Macro to test _FIRST flag.
	(REFCOUNT_STRUCTELEM_LAST_P): Macro to test _LAST flag.
	(struct splay_tree_key_s): Add structelem_refcount and
	structelem_refcount_ptr fields into a union with dynamic_refcount.
	Add comments.
	(gomp_map_vars): Delete declaration.
	(gomp_map_vars_async): Likewise.
	(gomp_unmap_vars): Likewise.
	(gomp_unmap_vars_async): Likewise.
	(goacc_map_vars): New declaration.
	(goacc_unmap_vars): Likewise.

	* oacc-mem.c (acc_map_data): Adjust to use goacc_map_vars.
	(goacc_enter_datum): Likewise.
	(goacc_enter_data_internal): Likewise.
	* oacc-parallel.c (GOACC_parallel_keyed): Adjust to use goacc_map_vars
	and goacc_unmap_vars.
	(GOACC_data_start): Adjust to use goacc_map_vars.
	(GOACC_data_end): Adjust to use goacc_unmap_vars.

	* target.c (hash_entry_type): New typedef.
	(htab_alloc): New function hook for hashtab.h.
	(htab_free): Likewise.
	(htab_hash): Likewise.
	(htab_eq): Likewise.
	(hashtab.h): Add file include.
	(gomp_increment_refcount): New function.
	(gomp_decrement_refcount): Likewise.
	(gomp_map_vars_existing): Add refcount_set parameter, adjust to use
	gomp_increment_refcount.
	(gomp_map_fields_existing): Add refcount_set parameter, adjust calls
	to gomp_map_vars_existing.

	(gomp_map_vars_internal): Add refcount_set parameter, add local openmp_p
	variable to guard OpenMP specific paths, adjust calls to
	gomp_map_vars_existing, add structure element sibling splay_tree_key
	sequence creation code, adjust Fortran map case to avoid increment
	under OpenMP.
	(gomp_map_vars): Adjust to static, add refcount_set parameter, manage
	local refcount_set if caller passed in NULL, adjust call to
	gomp_map_vars_internal.
	(gomp_map_vars_async): Adjust and rename into...
	(goacc_map_vars): ...this new function, adjust call to
	gomp_map_vars_internal.

	(gomp_remove_splay_tree_key): New function with code factored out from
	gomp_remove_var_internal.
	(gomp_remove_var_internal): Add code to handle removing multiple
	splay_tree_key sequence for structure elements, adjust code to use
	gomp_remove_splay_tree_key for splay-tree key removal.
	(gomp_unmap_vars_internal): Add refcount_set parameter, adjust to use
	gomp_decrement_refcount.
	(gomp_unmap_vars): Adjust to static, add refcount_set parameter, manage
	local refcount_set if caller passed in NULL, adjust call to
	gomp_unmap_vars_internal.
	(gomp_unmap_vars_async): Adjust and rename into...
	(goacc_unmap_vars): ...this new function, adjust call to
	gomp_unmap_vars_internal.
	(GOMP_target): Manage refcount_set and adjust calls to gomp_map_vars and
	gomp_unmap_vars.
	(GOMP_target_ext): Likewise.
	(gomp_target_data_fallback): Adjust call to gomp_map_vars.
	(GOMP_target_data): Likewise.
	(GOMP_target_data_ext): Likewise.
	(GOMP_target_end_data): Adjust call to gomp_unmap_vars.
	(gomp_exit_data): Add refcount_set parameter, adjust to use
	gomp_decrement_refcount, adjust to queue splay-tree keys for removal
	after main loop.
	(GOMP_target_enter_exit_data): Manage refcount_set and adjust calls to
	gomp_map_vars and gomp_exit_data.
	(gomp_target_task_fn): Likewise.

	* testsuite/libgomp.c-c++-common/refcount-1.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-1.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-2.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-3.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-4.c: New testcase.
	* testsuite/libgomp.c-c++-common/struct-elem-5.c: New testcase.
2021-06-17 21:34:59 +08:00
H.J. Lu
967b465302 Add a target calls hook: TARGET_PUSH_ARGUMENT
1. Replace PUSH_ARGS with a target calls hook, TARGET_PUSH_ARGUMENT, which
takes an integer argument.  When it returns true, push instructions will
be used to pass outgoing arguments.  If the argument is nonzero, it is
the number of bytes to push and indicates the PUSH instruction usage is
optional so that the backend can decide if PUSH instructions should be
generated.  Otherwise, the argument is zero.
2. Implement x86 target hook which returns false when the number of bytes
to push is no less than 16 (8 for 32-bit targets) if vector load and store
can be used.
3. Remove target PUSH_ARGS definitions which return 0 as it is the same
as the default.
4. Define TARGET_PUSH_ARGUMENT of cr16 and m32c to always return true.

gcc/

	PR target/100704
	* calls.c (expand_call): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	(emit_library_call_value_1): Likewise.
	* defaults.h (PUSH_ARGS): Removed.
	(PUSH_ARGS_REVERSED): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
	(emit_push_insn): Pass the number bytes to push to
	targetm.calls.push_argument and pass 0 if ARGS_ADDR is 0.
	* hooks.c (hook_bool_uint_true): New.
	* hooks.h (hook_bool_uint_true): Likewise.
	* rtlanal.c (nonzero_bits1): Replace PUSH_ARGS with
	targetm.calls.push_argument (0).
	* target.def (push_argument): Add a targetm.calls hook.
	* targhooks.c (default_push_argument): New.
	* targhooks.h (default_push_argument): Likewise.
	* config/bpf/bpf.h (PUSH_ARGS): Removed.
	* config/cr16/cr16.c (TARGET_PUSH_ARGUMENT): New.
	* config/cr16/cr16.h (PUSH_ARGS): Removed.
	* config/i386/i386.c (ix86_push_argument): New.
	(TARGET_PUSH_ARGUMENT): Likewise.
	* config/i386/i386.h (PUSH_ARGS): Removed.
	* config/m32c/m32c.c (TARGET_PUSH_ARGUMENT): New.
	* config/m32c/m32c.h (PUSH_ARGS): Removed.
	* config/nios2/nios2.h (PUSH_ARGS): Likewise.
	* config/pru/pru.h (PUSH_ARGS): Likewise.
	* doc/tm.texi.in: Remove PUSH_ARGS documentation.  Add
	TARGET_PUSH_ARGUMENT hook.
	* doc/tm.texi: Regenerated.

gcc/testsuite/

	PR target/100704
	* gcc.target/i386/pr100704-1.c: New test.
	* gcc.target/i386/pr100704-2.c: Likewise.
	* gcc.target/i386/pr100704-3.c: Likewise.
2021-06-17 06:33:14 -07:00
Uros Bizjak
20a2c8ace0 i386: Add variable vec_set for 64bit vectors [PR97194]
To generate sane code a SSE4.1 variable PBLENDV instruction is needed.

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

gcc/
	PR target/97194
	* config/i386/i386-expand.c (expand_vector_set_var):
	Handle V2FS mode remapping.  Pass TARGET_MMX_WITH_SSE to
	ix86_expand_vector_init_duplicate.
	(ix86_expand_vector_init_duplicate): Emit insv_1 for
	QImode for !TARGET_PARTIAL_REG_STALL.
	* config/i386/predicates.md (vec_setm_mmx_operand): New predicate.
	* config/i386/mmx.md (vec_setv2sf): Use vec_setm_mmx_operand
	as operand 2 predicate.  Call ix86_expand_vector_set_var
	for non-constant index operand.
	(vec_setv2si): Ditto.
	(vec_setv4hi): Ditto.
	(vec_setv8qi): ditto.

gcc/testsuite/

	PR target/97194
	* gcc.target/i386/sse4_1-vec-set-1.c: New test.
	* gcc.target/i386/sse4_1-vec-set-2.c: ditto.
2021-06-17 15:19:54 +02:00