Commit Graph

180421 Commits

Author SHA1 Message Date
Jonathan Wakely 2c2278f300 libstdc++: Remove inheritance from std::coroutine_handle<> [LWG 3460]
This removes the coroutine_handle<> base class from the primary template
and the noop_coroutine_promise explicit specialization. To preserve the
API various members are added, as they are no longer inherited from the
base class.

I've also tweaked some indentation and formatting, and replaced
subclause numbers from the standard with stable names like
[coroutine.handle.con].

libstdc++-v3/ChangeLog:

	* include/std/coroutine (coroutine_handle<_Promise>): Remove
	base class. Add constructors, conversions, accessors etc. as
	proposed for LWG 3460.
	(coroutine_handle<noop_coroutine_promise>): Likewise.
	* testsuite/18_support/coroutines/lwg3460.cc: New test.
2020-10-20 11:37:48 +01:00
Jozef Lawrynowicz 8c3846e802 MSP430: Support a memory operand for op1 of andneghi3
This fixes an ICE caused by an unrecognizeable insn generated when
compiling gcc.c-torture/execute/pr97386-1.c at -O0.

gcc/ChangeLog:

	* config/msp430/msp430.md (andneghi3): Allow general operand for
	op1 and update output assembler template.
2020-10-20 11:26:56 +01:00
Tobias Burnus b3032d1b84 collect-utils.c, lto-wrapper + mkoffload: Improve -save-temps filename
gcc/ChangeLog:

	* collect-utils.c (collect_execute, fork_execute): Add at-file suffix
	argument.
	* collect-utils.h (collect_execute, fork_execute): Update prototype.
	* collect2.c (maybe_run_lto_and_relink, do_link, main, do_dsymutil):
	Update calls by passing NULL.
	* config/i386/intelmic-mkoffload.c (compile_for_target,
	generate_host_descr_file, prepare_target_image, main): Likewise.
	* config/gcn/mkoffload.c (compile_native, main): Pass at-file suffix.
	* config/nvptx/mkoffload.c (compile_native, main): Likewise.
	* lto-wrapper.c (compile_offload_image): Likewise.
2020-10-20 12:14:03 +02:00
Vitaly Buka 00b355522b Fix compilation on older systems
Cherry-pick upstream commit f97ca48b1cbbf5da065e94271cb3af4f1c907dd4.

Fixes https://bugs.llvm.org/show_bug.cgi?id=47896
2020-10-20 11:15:10 +02:00
Aldy Hernandez f0c0f124eb Special case shifting by zero in operator_rshift::op1_range.
gcc/ChangeLog:

	* range-op.cc (operator_rshift::op1_range): Special case
	shifting by zero.
2020-10-20 10:33:48 +02:00
Piotr Trojanek 8f70460005 [Ada] Refine type for type constraining routines
gcc/ada/

	* sem_ch3.adb (Constrain_Decimal, Constrain_Enumeration,
	Constrain_Float, Constrain_Integer, Constrain_Ordinary_Fixed):
	Refine parameter type from Node_Id to Entity_Id.
2020-10-20 03:21:54 -04:00
Piotr Trojanek 420021eaee [Ada] Prevent crashes when pretty-printing freeze nodes from gdb
gcc/ada/

	* sprint.adb (po): Set Dump_Freeze_Null to False; align colons.
	(ps): Likewise.
2020-10-20 03:21:53 -04:00
Ed Schonberg 3bb4836fe1 [Ada] AI12-0339: Empty function for Aggregate aspect of Ada containers
gcc/ada/

	* sinfo.ads, sinfo.adb: The flag Box_Present can appear in
	Iterated_Element_Association nodes.
	* sem_aggr.adb (Resolve_Aggregate): Call
	Resolve_Container_Aggregate when type of context has
	corresponding aspect.
	* sem_type.adb (Covers): In Ada_2020 an aggregate is compatible
	with a type that carries the corresponding aspect.
	* exp_ch3.adb (Make_Controlling_Function_Wrappers): Do not
	create declarations and bodies for inherited primitive functions
	of null extensions that dispatch on result, when current scope
	includes an immediately visible non-overloadable homonym of the
	function.
	* libgnat/a-cborse.adb, libgnat/a-cborse.ads,
	libgnat/a-cbhase.ads, libgnat/a-cbhase.adb,
	libgnat/a-cborma.adb, libgnat/a-cborma.ads,
	libgnat/a-cbhama.adb, libgnat/a-cbhama.ads,
	libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads,
	libgnat/a-convec.ads, libgnat/a-ciorse.ads,
	libgnat/a-cihase.ads, libgnat/a-cihase.adb,
	libgnat/a-ciorma.ads, libgnat/a-cihama.ads,
	libgnat/a-cihama.adb, libgnat/a-cidlli.ads,
	libgnat/a-cidlli.adb, libgnat/a-coinve.adb,
	libgnat/a-cobove.adb, libgnat/a-cobove.ads,
	libgnat/a-convec.adb, libgnat/a-coinve.ads,
	libgnat/a-coorse.ads, libgnat/a-cohase.adb,
	libgnat/a-cohase.ads, libgnat/a-coorma.ads,
	libgnat/a-cohama.adb, libgnat/a-cohama.ads,
	libgnat/a-cdlili.ads: Add primitive function Empty for use in
	aspect Aggregate, and add corresponding body or expression
	function.
2020-10-20 03:21:52 -04:00
Arnaud Charlet 71400efc5e [Ada] Add support for Unreferenced aspect on formal parameters
gcc/ada/

	* aspects.adb (Has_Aspect_Specifications_Flag): Add
	N_Parameter_Specification.
	* par-ch13.adb (Aspect_Specifications_Present): Also handle case
	of an unknown aspect on the last formal parameter (terminated by
	a Tok_Right_Paren). Minor reformatting.
	* par-ch6.adb (P_Formal_Part): Scan aspects on formal
	parameters.
	* par.adb: Fix typos.
	* sem_ch6.adb (Process_Formals): Add processing of aspects and
	in particular Unreferenced aspect for now.
	* sinfo.ads: Allow ASPECT_SPECIFICATIONS on a
	PARAMETER_SPECIFICATION.
	* doc/gnat_rm/implementation_defined_aspects.rst
	(Aspect Unreferenced): Update documentation.
	* gnat_rm.texi: Regenerate.
2020-10-20 03:21:51 -04:00
Piotr Trojanek 53642c37e2 [Ada] Refine result type of Get_Accessibility
gcc/ada/

	* sem_util.ads, sem_util.adb (Get_Accessibility): Refine result
	type from Node_Id to Entity_Id.
2020-10-20 03:21:50 -04:00
Piotr Trojanek b21732c521 [Ada] Replace low-level Ekind membership tests with high-level Is_Formal
gcc/ada/

	* einfo.adb, exp_attr.adb, sem_ch13.adb, sem_util.adb: Use
	Is_Formal where possible.
2020-10-20 03:21:49 -04:00
Steve Baird 4c5e9870f2 [Ada] Implement AI12-0280 Making 'Old more flexible
gcc/ada/

	* sem_util.ads: Declare a new package, Old_Attr_Util, which in
	turn declares two more packages, Conditional_Evaluation and
	Indirect_Temps. Conditional_Evaluation provides a predicate for
	deciding whether a given 'Old attribute reference is eligible
	for conditional evaluation and, in the case where it is
	eligible, a function that constructs the Boolean-valued
	condition that is to be evaluated at run time in deciding
	whether to evaluate the attribute prefix.  Indirect_Temps
	provides support for declaring a temporary which is only
	initialized conditionally; more specifically, an access type and
	a variable of that type are declared (unconditionally) and then
	the variable is (conditionally) initialized with an allocator.
	The existence of the access type and the pointer variable is
	hidden from clients, except that a predicate,
	Is_Access_Type_For_Indirect_Temp, is provided for identifying
	such access types. This is needed because we want such an access
	type to be treated like a "normal" access type (specifically
	with respect to finalization of allocated objects). Other parts
	of the compiler treat access types differently if
	Comes_From_Source is False, or if the secondary stack storage
	pool is used; this predicate is used to disable this special
	treatment.
	* sem_attr.adb (Uneval_Old_Msg): Improve message text to reflect
	Ada202x changes.
	(Analyze_Attribute): A previously-illegal 'Old attribute
	reference is accepted in Ada2020 if it is eligible for
	conditional evaluation.
	* sem_res.adb (Valid_Conversion): Do not treat a rewritten 'Old
	attribute like other rewrite substitutions. This makes a
	difference, for example, in the case where we are generating the
	expansion of a membership test of the form "Saooaaat'Old in
	Named_Access_Type"; in this case Valid_Conversion needs to
	return True (otherwise the expansion will be False - see the
	call site in exp_ch4.adb).
	* exp_attr.adb (Expand_N_Attribute_Reference): When expanding a
	'Old attribute reference, test for the case where the reference
	is eligible for conditional evaluation. In that case, use the
	new "indirect temporary" mechanism provided by Sem_Util.
	* exp_prag.adb
	(Expand_Attributes_In_Consequence.Expand_Attributes): If
	Sem_Util.Indirect_Temp_Needed indicates that there could be
	correctness problems associated with the old expansion scheme
	for dealing with 'Old attributes in contract cases consequences,
	then we use the new "indirect temporary" mechanism provided by
	Sem_Util instead. We do not want to do this unconditionally.
	* sem_util.adb: Provide a body for the new Old_Attr_Util
	package. Further work is needed in several areas for
	correctness:
	- The function Is_Repeatedly_Evaluated does not deal with
	container aggregates yet.
	- The function Is_Known_On_Entry does not deal with interactions
	with the Global aspect.
	Each area where more work is needed is indicated with a "???"
	comment in the code; a more detailed description can be found
	there. Some optimization opportunties are similarly indicated
	with a "???" comment.
	* exp_ch3.adb (Freeze_Type): In deciding whether to generate
	expansion for the list controller of an access type, take the
	predicate Is_Access_Type_For_Indirect_Temp into account. If the
	predicate yields True, then generate the expansion.
	* exp_util.adb (Build_Allocate_Deallocate_Proc): We don't
	normally finalize allocated objects that are allocated on the
	secondary stack. Add an exception to this rule if the predicate
	Is_Access_Type_For_Indirect_Temp yields True.  As a result of
	this exception, we have to deal with the fact that gigi expects
	a different parameter profile if we are using the secondary
	stack pool; the Pool and Alignment parameters must be omitted in
	this case.
2020-10-20 03:21:48 -04:00
Javier Miranda e3b69cc24f [Ada] Spurious error in current instance used as formal package
gcc/ada/

	* sem_ch12.adb (Install_Parents_Of_Generic_Context,
	Remove_Parents_Of_Generic_Context): New subprograms.
	(Instantiate_Package_Body): Adding assertions to ensure that
	installed parents are properly removed.
2020-10-20 03:21:47 -04:00
Claire Dross 6875e1282d [Ada] Make attribute Update an obsolescent feature
gcc/ada/

	* sem_attr.adb (Analyze_Attribute): Emit a warning on 'Update
	when Warn_On_Obsolescent_Feature is set to True.
2020-10-20 03:21:46 -04:00
Richard Kenner b68e5db5c2 [Ada] CUDA: build procedure calls instead of function calls
gcc/ada/

	* gnat_cuda.adb (Build_Register_Function_Call): Make procedure
	call instead of function, rename to
	Build_Register_Procedure_Call.
	(Build_CUDA_Init_Proc): Make procedure call instead of function.
2020-10-20 03:21:45 -04:00
Justin Squirek abc694ce7c [Ada] Crash on cond expression as actual for anonymous access formal
gcc/ada/

	* exp_ch6.adb (Expand_Branch): Properly anticipate expansion of
	conditional expressions producing object declarations in
	addition to assignment statements, and rename formal.
2020-10-20 03:21:45 -04:00
Yannick Moy c01c11cc9c [Ada] Fixes for pretty command-line GNATprove output with -gnatdF
gcc/ada/

	* errout.adb (Write_Source_Code_Line): Adopt display closer to
	GCC format.
	(Output_Messages): Deal specially with info messages.
	* erroutc.adb (Prescan_Message): Fix bug leading to check
	messages being considered as error messages in pretty output
	mode.
2020-10-20 03:21:44 -04:00
Justin Squirek 04b06947cb [Ada] Hang on cond expression as actual for anonymous access formal
gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Properly handle the case
	where the condition of a conditional expression has been
	optimized out when calculating the value of an extra
	accessibility parameter.
2020-10-20 03:21:43 -04:00
Bob Duff 854f9a8167 [Ada] gnatpp: Fix documentation of threshold switches
gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Change "_" to "-".
2020-10-20 03:21:42 -04:00
Arnaud Charlet 66b6967856 [Ada] New warning on not fully initialized box aggregate
gcc/ada/

	* sem_aggr.adb (Resolve_Aggregate): Warn on not fully
	initialized box aggregate.
	* sem_aggr.ads: Fix typo.
	* sem_res.adb (Resolve_Actuals): Fix typo in error message
	format marking it incorrectly as a continuation message.
	* sem_elab.adb (Check_Internal_Call_Continue): Similarly, add
	missing primary message in case of a call to an actual generic
	subprogram.
	* sem_warn.adb (Check_References): Do not warn on read but never
	assigned variables if the type is partially initialized.
	* libgnat/a-except.ads, libgnat/a-ststun.ads,
	libgnat/g-sechas.ads, libgnat/a-cbdlli.ads,
	libgnat/a-cfdlli.ads, libgnat/a-cobove.ads,
	libgnat/a-cohata.ads, libgnat/a-crbltr.ads,
	libgnat/a-cbmutr.ads, libgnat/a-crdlli.ads,
	libgnat/a-cbsyqu.ads: Address new warning.
	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
	Update doc on -gnatwv.
	* gnat_ugn.texi: Regenerate.

gcc/testsuite/

	* gnat.dg/opt11.adb: Add new expected warning.
2020-10-20 03:21:41 -04:00
Gary Dismukes 6af3576f43 [Ada] Inlining nonstatic calls to static expression functions
gcc/ada/

	* sem_ch6.adb (Analyze_Expression_Function): Mark static
	expression functions as inlined.
2020-10-20 03:21:40 -04:00
Arnaud Charlet b03a25ff5a [Ada] Crash on precondition, discriminant and protected objects
gcc/ada/

	* contracts.adb (Is_Prologue_Renaming): This function was
	missing support for E_Constant which can also be generated in
	protected objects.
2020-10-20 03:21:39 -04:00
Arnaud Charlet 2e55a8e5b7 [Ada] Issue with gnatbind -V switch and Ada 2012
gcc/ada/

	* bindgen.adb (Gen_Bind_Env_String): Generate Ada 2012 compatible
	strings. Code cleanup.
2020-10-20 03:21:38 -04:00
Yannick Moy 562ccc89f5 [Ada] Fix comments as volatility properties can apply to objects
gcc/ada/

	* sem_util.adb, sem_util.ads: Comment fix.
2020-10-20 03:21:37 -04:00
Arnaud Charlet 8281a07f0c [Ada] Spurious discriminant check on "for of" loop
gcc/ada/

	* sem_ch8.adb (Check_Constrained_Object): Suppress discriminant
	checks when the type has default discriminants and comes from
	expansion of a "for of" loop.
2020-10-20 03:21:36 -04:00
Bob Duff 83dcc2bd35 [Ada] Flexible AST node structure
gcc/ada/

	* atree.ads: Make Default_Node a constant.  Remove the
	modification of Comes_From_Source, and use a separate flag for
	that.  Change Sloc to 0; it always overwritten, and never left
	as the No_Location value.
	(Print_Statistics): Move to spec so we can call it from
	gnat1drv.
	(Num_Nodes): Rename to clarify that this is approximate.
	Correct comment: nodes and entities are never deleted, the count
	is never decremented, and this is not used by Xref.
	(Initialize): Correct comment: Error_List is not created here.
	Other minor naming and comment changes.
	* atree.adb (Extend_Node, New_Copy, New_Entity, New_Node):
	Streamline these. Simplify and improve efficiency.  Move code
	from Allocate_Initialize_Node to these, where it can be executed
	unconditionally.  Take advantage of automatic zeroing of the
	Nodes table.
	(Allocate_Initialize_Node): Remove this. It was an efficiency
	bottleneck, and somewhat complicated, because it was called from
	4 places, and had all sorts of conditionals to check where it
	was called from. Better to move most of that code to the call
	sites, where it can be executed (or not) unconditionally.
	(Allocate_New_Node): New procedure to partly replace
	Allocate_Initialize_Node (called from just 2 of those 4 places).
	(Comes_From_Source_Default): New flag written/read by
	Set_Comes_From_Source_Default/Get_Comes_From_Source_Default.
	This allows us to make Default_Node into a constant with
	all-zeros value.
	(Set_Paren_Count_Of_Copy): New procedure to avoid duplicated
	code.
	(Report): New procedure to encapsulate the call to the reporting
	procedure.
	(Atree_Private_Part): We now need a body for this package, to
	contain package body Nodes.
	(Approx_Num_Nodes_And_Entities): Was Num_Nodes.  For efficiency,
	compute the answer from Nodes.Last. That way we don't need to
	increment a counter on every node creation. Other minor naming
	and comment changes.
	* gnat1drv.adb: Call Atree.Print_Statistics if -gnatd.A switch
	was given.  Add comment documenting the new order dependency (we
	must process the command line before calling Atree.Initialize).
	* debug.adb: Document -gnatd.A.
	* einfo.adb, sinfo.adb: Remove useless Style_Checks pragmas.
	* nlists.ads (Allocate_List_Tables): Inline makes node creation
	a little faster.
	* nlists.adb (Initialize): Remove local constant E, which didn't
	seem to add clarity.
	* treepr.adb (Print_Init): Use renamed
	Approx_Num_Nodes_And_Entities function.
	* types.ads: Change the Low and High bounds as described above.
	* types.h: Change Low and High bounds to match types.ads.
	* sem_ch8.adb, namet.adb, namet.ads: Move the computation of
	Last_Name_Id from sem_ch8 to namet, and correct it to not assume
	Name_Ids are positive.
	* ali.adb, ali-util.adb, bindo-writers.adb, exp_dist.adb,
	fmap.adb, fname-uf.adb, osint.adb: Fix various hash functions to
	avoid assuming the various ranges are positive. Note that "mod"
	returns a nonnegative result when the second operand is
	positive. "rem" can return negative values in that case (in
	particular, if the first operand is negative, which it now is).
	* switch-c.adb: Allow switch -gnaten to control the value of
	Nodes_Size_In_Meg.
	* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
	Remove traling whitespaces.
	* opt.ads (Nodes_Size_In_Meg): New Variable.
2020-10-20 03:21:35 -04:00
Eric Botcazou 1b93e420fc [Ada] Fix internal error on bit-aligned component of function call
gcc/ada/

	* exp_util.adb (Remove_Side_Effects): Always generate a renaming
	that is handled by the front-end in the case of an indexed or a
	selected component whose prefix has a nonstandard representation.
2020-10-20 03:21:34 -04:00
Pat Rogers d3c2ce8e4e [Ada] Document Ada.Task_Initialization
gcc/ada/

	* doc/gnat_rm/the_gnat_library.rst: Add Ada.Task_Initialization.
	* gnat_rm.texi: Regenerate.
2020-10-20 03:21:33 -04:00
Yannick Moy be273749fa [Ada] Display source code pointing at locations in messages for GNATprove
gcc/ada/

	* errout.adb: (Error_Msg-Internal): Pass the location for a line
	insertion if any in the message.
	(Output_Messages: Add display of source code lines if -gnatdF is
	set.
	(Write_Source_Code_Line): Code clean up.
	* erroutc.adb (Prescan_Message): Apply prescan for continuation
	lines when -gnatdF is set, and record presence of line
	insertion.
	* erroutc.ads (Has_Insertion_Line): New global for prescan.
	(Error_Msg_Object): Add field to record line insertion if
	present.
	* errutil.adb (Error_Msg): Pass no location for Insertion_Sloc.
2020-10-20 03:21:32 -04:00
Arnaud Charlet bc60bb5eb9 [Ada] Remove extra validity check in case statement
gcc/ada/

	* exp_ch5.adb (Expand_N_Case_Statement): Do not generate
	validity check when possible.
2020-10-20 03:21:31 -04:00
Ed Schonberg f3f1debe1b [Ada] Ada_2020: Further code cleanup for container aggregates
gcc/ada/

	* exp_aggr.adb (Expand_Iterated_Component): Reorganize code to
	ensure that Loop_Id is properly initialized on all paths, and
	remove code duplication.
2020-10-20 03:21:30 -04:00
Piotr Trojanek 797c14b5cd [Ada] Propagate predicate function to a full view of a private subtype
gcc/ada/

	* sem_ch3.adb (Analyze_Subtype_Declaration): Propagate predicate
	function to full view of the created type as well, if it was
	created.
2020-10-20 03:21:30 -04:00
Arnaud Charlet e837a62185 [Ada] Code clean up
gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Merge handling of
	Simple_Storage_Pool and Storage_Pool.
2020-10-20 03:21:29 -04:00
Piotr Trojanek afa1ffd42c [Ada] Support for new aspect Subprogram_Variant on recursive subprograms
gcc/ada/

	* aspects.ads: Introduce Subprogram_Variant aspect with the
	following properties: GNAT-specific, with mandatory expression,
	not a representation aspect, never delayed.
	* contracts.adb (Expand_Subprogram_Contract): Mention new aspect
	in the comment.
	(Add_Contract_Item): Support addition of pragma
	Subprogram_Variant to N_Contract node.
	(Analyze_Entry_Or_Subprogram_Contract): Mention new aspect in
	the comment; add pragma Subprogram_Variant to N_Contract node.
	(Build_Postconditions_Procedure): Adapt call to
	Insert_Before_First_Source_Declaration, which is now reused in
	expansion of new aspect.
	(Process_Contract_Cases_For): Also process Subprogram_Variant,
	which is stored in N_Contract node together with Contract_Cases.
	* contracts.ads (Analyze_Entry_Or_Subprogram_Contract): Mention
	new aspect in the comment.
	(Analyze_Entry_Or_Subprogram_Body_Contract): Likewise.
	* einfo.adb (Get_Pragma): Support retrieval of new pragma.
	* einfo.ads (Get_Pragma): Likewise.
	* exp_ch6.adb (Check_Subprogram_Variant): New routine for
	emitting call to check Subprogram_Variant expressions at run
	time.
	(Expand_Call_Helper): Check Subprogram_Variant expressions at
	recursive calls.
	* exp_prag.adb (Make_Op): Moved from expansion of pragma
	Loop_Variant to Exp_Util, so it is now reused for expansion of
	pragma Subprogram_Variant.
	(Process_Variant): Adapt call to Make_Op after moving it to
	Exp_Util.
	(Expand_Pragma_Subprogram_Variant): New routine.
	* exp_prag.ads (Expand_Pragma_Subprogram_Variant): Likewise.
	* exp_util.adb (Make_Variant_Comparison): Moved from Exp_Prag
	(see above).
	* exp_util.ads (Make_Variant_Comparison): Likewise.
	* inline.adb (Remove_Aspects_And_Pragmas): Handle aspect/pragma
	Subprogram_Variant just like similar contracts.
	* par-prag.adb (Prag): Likewise.
	* sem.adb (Insert_Before_First_Source_Declaration): Moved from
	Contracts (see above).
	* sem.ads (Insert_Before_First_Source_Declaration): Likewise.
	* sem_ch12.adb: Mention new aspect in the comment about
	"Implementation of Generic Contracts", just like similar aspects
	are mentioned there.
	* sem_ch13.adb (Insert_Pragma): Mention new aspect in the
	comment, because this routine is now used for Subprogram_Variant
	just like for other similar aspects.
	(Analyze_Aspect_Specifications): Mention new aspect in comments;
	it is handled just like aspect Contract_Cases.
	(Check_Aspect_At_Freeze_Point): Do not expect aspect
	Subprogram_Variant just like we don't expect aspect
	Contract_Cases.
	* sem_prag.adb (Ensure_Aggregate_Form): Now also used for pragma
	Subprogram_Variant, so update comment.
	(Analyze_Pragma): Add initial checks for pragma
	Subprogram_Variant.
	(Analyze_Subprogram_Variant_In_Decl_Part): New routine with
	secondary checks on the new pragma.
	(Sig_Flags): Handle references within pragma Subprogram_Variant
	expression just like references in similar pragma
	Contract_Cases.
	(Is_Valid_Assertion_Kind): Handle Subprogram_Variant just like
	other similar contracts.
	* sem_prag.ads (Analyze_Subprogram_Variant_In_Decl_Part): New
	routine.
	* sem_res.adb (Same_Or_Aliased_Subprograms): Moved to Sem_Util,
	so it can be reused for detection of recursive calls where
	Subprogram_Variant needs to be verified.
	* sem_util.adb (Is_Subprogram_Contract_Annotation): Handle new
	Subprogram_Variant annotation just like other similar
	annotations.
	(Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above).
	* sem_util.ads (Is_Subprogram_Contract_Annotation): Mention new
	aspect in the comment.
	(Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above).
	* sinfo.ads (N_Contract): Document handling of
	Subprogram_Variant.
	* snames.ads-tmpl: Add name for the internally generated
	procedure with checks for Subprogram_Variant expression, name
	for the new aspect and new pragma corresponding to aspect
	Subprogram_Variant.
2020-10-20 03:21:28 -04:00
Piotr Trojanek 87eb6d2c2a [Ada] Minor reorder subprogram declarations alphabetically
gcc/ada/

	* exp_util.ads: Reorder declaration.
2020-10-20 03:21:26 -04:00
Richard Biener a335f6f4ee tree-optimization/97496 - avoid SLP externs in patterns
I forgot to guard the promotion to external for the case where the
def is in a pattern.

2020-10-20  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97496
	* tree-vect-slp.c (vect_get_and_check_slp_defs): Guard extern
	promotion with not in pattern.

	* gcc.dg/vect/bb-slp-pr97496.c: New testcase.
2020-10-20 09:03:02 +02:00
Aldy Hernandez 57fa4146eb Add { target int128 } to gcc.dg/pr97488.c
__int128 does not exist on 32-bit targets.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr97488.c: Add target int128 predicate.
2020-10-20 02:42:12 -04:00
Stefan Schulze Frielinghaus bc252d9903 IBM Z: Emit vector alignment hints for strlen
In case the vectorized version of strlen is used, then each memory
access inside the loop is 16-byte aligned.  Thus add this kind of
information so that vector alignment hints can later on be emitted.

gcc/ChangeLog:

	* config/s390/s390.c (s390_expand_vec_strlen): Add alignment
	for memory access inside loop.
2020-10-20 08:35:15 +02:00
GCC Administrator 970d683f67 Daily bump. 2020-10-20 00:16:29 +00:00
Andrew MacLeod 6e02de9461 Use precision and sign to compare types for ranges
Sanity check ranges by comparing just SIGN and PRECISION.

	gcc/
	PR tree-optimization/97360
	* gimple-range.h (range_compatible_p): New.
	* gimple-range-gori.cc (is_gimple_logical_p): Use range_compatible_p.
	(range_is_either_true_or_false): Ditto.
	(gori_compute::outgoing_edge_range_p): Cast result to the correct
	type if necessary.
	(logical_stmt_cache::cacheable_p): Use range_compatible_p.
	* gimple-range.cc (gimple_ranger::calc_stmt): Check range_compatible_p
	before casting the range.
	(gimple_ranger::range_on_exit): Use range_compatible_p.
	(gimple_ranger::range_on_edge): Ditto.

	gcc/testsuite/
	* gcc.dg/pr97360-2.c: New test.
2020-10-19 19:11:17 -04:00
David Edelsohn f000b7c436 testsuite: Enable and adjust powerpc vec-extract and vsu testcases.
This patch remove unnecessary target requirements from many vec-extract
testcases and enables the vsu testcases on AIX.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/sad-vectorize-1.c: Remove target.
	* gcc.target/powerpc/sad-vectorize-2.c: Remove target.
	* gcc.target/powerpc/vec-extract-v16qi-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v16qi.c: Remove target.
	* gcc.target/powerpc/vec-extract-v16qiu-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v16qiu.c: Remove target.
	* gcc.target/powerpc/vec-extract-v2df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v2di.c: Require lp64.
	* gcc.target/powerpc/vec-extract-v4sf.c: Remove target.
	* gcc.target/powerpc/vec-extract-v4si-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v4si.c: Remove target.
	* gcc.target/powerpc/vec-extract-v4siu-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v4siu.c: Remove target.
	* gcc.target/powerpc/vec-extract-v8hi-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v8hi.c: Remove target.
	* gcc.target/powerpc/vec-extract-v8hiu-df.c: Remove target.
	* gcc.target/powerpc/vec-extract-v8hiu.c: Remove target.
	* gcc.target/powerpc/vec-init-1.c: Remove target.
	* gcc.target/powerpc/vec-init-2.c: Require lp64.
	* gcc.target/powerpc/vec-init-3.c: Require lp64.
	* gcc.target/powerpc/vec-init-4.c: Remove target.
	* gcc.target/powerpc/vec-init-5.c: Remove target.
	* gcc.target/powerpc/vec-init-6.c: Require lp64.
	* gcc.target/powerpc/vec-init-7.c: Require lp64.
	* gcc.target/powerpc/vec-init-8.c: Remove target.
	* gcc.target/powerpc/vec-init-9.c: Require lp64.
	* gcc.target/powerpc/vec-setup-double.c: Remove target.
	* gcc.target/powerpc/vec-setup-long.c: Remove target.
	* gcc.target/powerpc/vsu/vec-xl-len-13.c: Correct expected warnings.
	* gcc.target/powerpc/vsu/vsu.exp: Enable on AIX.
2020-10-19 18:43:26 -04:00
Jonathan Wakely e7a0af84d6 libstdc++: Implement std::make_unique_for_overwrite
This is the std::unique_ptr part of P1020R1 (as amended by P1973R1) for
C++20. The std::shared_ptr part still needs to be done.

libstdc++-v3/ChangeLog:

	* include/bits/unique_ptr.h (make_unique_for_overwrite): Define
	for C++20.
	* testsuite/20_util/unique_ptr/creation/array_neg.cc: Remove
	unused header. Adjust standard reference.
	* testsuite/20_util/unique_ptr/creation/for_overwrite.cc: New test.
	* testsuite/20_util/unique_ptr/creation/for_overwrite__neg.cc: New test.
2020-10-19 22:11:39 +01:00
David Edelsohn badeac77f5 testsuite: Enable and adjust powerpc fold-vec-extract/insert testcases.
This patch enables a number of testcases on non-Linux targets, adjusts
the target requirements, and updates the expected results.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/fold-vec-extract-char.p7.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-char.p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-char.p9.c: Remove target.
	Expect 3 addi for ilp32.
	* gcc.target/powerpc/fold-vec-extract-double.p7.c: Remove target.
	Add -mbig-endian for Linux.
	* gcc.target/powerpc/fold-vec-extract-double.p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-float.p7.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-float.p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-float.p9.c: Require lp64.
	* gcc.target/powerpc/fold-vec-extract-int.p7.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-int.p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-int.p9.c: Remove target.
	Expect 3 addi for ilp32.
	* gcc.target/powerpc/fold-vec-extract-longlong.p7.c: Remove target.
	Expect 4 addi for ilp32.
	* gcc.target/powerpc/fold-vec-extract-longlong.p8.c: Remove target.
	Expect 4 addi for ilp32.
	* gcc.target/powerpc/fold-vec-extract-longlong.p9.c: Require lp64.
	* gcc.target/powerpc/fold-vec-extract-short.p7.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-short.p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-extract-short.p9.c: Require lp64.
	* gcc.target/powerpc/fold-vec-insert-char-p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-char-p9.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-double.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-float-p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-float-p9.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-int-p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-int-p9.c: Remove target.
	Require 8 addi for ilp32.
	* gcc.target/powerpc/fold-vec-insert-longlong.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-short-p8.c: Remove target.
	* gcc.target/powerpc/fold-vec-insert-short-p9.c: Remove target.
	* gcc.target/powerpc/fold-vec-select-double.c: Remove target.
	* gcc.target/powerpc/fold-vec-select-float.c: Remove target.
	* gcc.target/powerpc/fold-vec-splats-int.c: Require lp64.
	* gcc.target/powerpc/fold-vec-splats-longlong.c: Require lp64.
2020-10-19 15:54:31 -04:00
Iain Sandoe b003c4b14b coroutines: Emit error for invalid promise return types [PR97438].
At one stage, use cases were proposed for allowing the promise
type to contain both return_value and return_void.  That was
not accepted into C++20, so we should reject it as per the PR.

gcc/cp/ChangeLog:

	PR c++/97438
	* coroutines.cc (struct coroutine_info): Add a field to
	record that we emitted a promise type error.
	(coro_promise_type_found_p): Check for the case that the
	promise type contains both return_void and return_value.
	Emit an error if so, with information about the wrong
	type methods.

gcc/testsuite/ChangeLog:

	PR c++/97438
	* g++.dg/coroutines/pr97438.C: New test.
2020-10-19 20:22:37 +01:00
Martin Jambor 619f91eaa8 cplxlower: Avoid a transform when looking at a default definition
In PR 97456, IPA-SRA triggers a bug in tree-complex.c where it
converts:

 <bb 2>
   a$_M_value_21 = COMPLEX_EXPR <ISRA.18_10(D), ISRA.18_10(D)>;

(where ISRA.18 is IPA-SRA created PARM_DECL with DECL_IGNORED_P set,
which is why it only happens with IPA-SRA) into:

  <bb 2>
    a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_10(D), a$_M_value$real_10(D)>;

i.e. it replaces two uses of the parameter default-def with two
uninitialized default-defs of a new variable - all in hope to produce
code with better debug info.

This patch fixes it by avoiding the transform when the SSA_NAME to be
replaced is a default definition.

gcc/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/97456
	* tree-complex.c (set_component_ssa_name): Do not replace ignored decl
	default definitions with new component vars.  Reorder if conditions.

gcc/testsuite/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/97456
	* gcc.dg/tree-ssa/pr97456.c: New test.
2020-10-19 19:21:10 +02:00
Jonathan Wakely fc77484c4a libstdc++: Use reserved name for C++20 attribute
Although the compiler supports the [[no_unique_address]] attribute, it's
not a reserved name prior to C++20, so we can't use it in std::tuple.
Use [[__no_unique_address__]] instead.

libstdc++-v3/ChangeLog:

	* include/std/tuple (_Head_base<Idx, Head, true>): Use reserved
	form of __no_unique_address__ attribute because
	no_unique_address is not reserved prior to C++20.
2020-10-19 18:07:21 +01:00
Jonathan Wakely aa6d2be1e3 libstdc++: Optimize container node-handle type for size
The use of std::optional in _Node_handle makes the node handle types for
associative and unordered containers larger than necessary. It also
greatly increases the amount of code included, as <optional> is quite
large.

The boolean flag that records whether the std::optional contains a value
is redundant, because the _Node_handle::_M_ptr member provides the same
information. If the node handle has a non-null pointer it also has an
allocator, and not otherwise. By replacing std::optional with a custom
union type (and using _M_ptr to tell which union member is active) all
node handle sizes can be reduced by sizeof(allocator_type::pointer).

This makes the node handle types incompatible with previous releases, so
must be done before the C++17 ABI is fixed for GCC 11.

libstdc++-v3/ChangeLog:

	* include/bits/node_handle.h (_Node_handle_common): Replace
	std::optional with custom type.
	* testsuite/20_util/variant/exception_safety.cc: Add missing
	header include.
2020-10-19 18:06:51 +01:00
Nathan Sidwell 5abe05b433 preprocessor: Fix non-fn fn-like macro at EOF [PR97471]
We inject EOF tokens between macro argument lists, but had
confused/stale logic in the non-fn invocation.  Renamed the magic
'eof' token, as it's now only used for macro argument termination.
Always rewind the non-OPEN_PAREN token.

	libcpp/
	* internal.h (struct cpp_reader): Rename 'eof' field to 'endarg'.
	* init.c (cpp_create_reader): Adjust.
	* macro.c (collect_args): Use endarg for separator.  Always rewind
	in the not-fn case.
	gcc/testsuite/
	* c-c++-common/cpp/pr97471.c: New.
2020-10-19 08:00:41 -07:00
David Edelsohn 8d31eb8f17 rs6000: correct BE vextract_fp_from_short[hl] vperm masks
xvcvhpsp instruction converts a vector of bfloat16 half precision to single
precision.  The intrinsics vextract_fp_from_shorth and
vextract_fp_from_shortl select the high or low four elements of a
half precision vector to convert.  The intrinsics use vperm to select
the appropriate portion of the half precision vector and redistribute
the values for the xvcvhpsp instruction.  The big endian versions of the
masks for the intrinsics were initialized wrong.  This patch replaces the
masks with the correct values.  This corrects the failure of
builtins-3-p9-runnable.c testcase on big endian systems.

Bootstrapped powerpc-ibm-aix7.2.3.0 Power9.

gcc/ChangeLog:

	* config/rs6000/vsx.md (vextract_fp_from_shorth):  Fix vals_be.
	(vextract_fp_from_shortl) Same.
2020-10-19 09:19:52 -04:00
Aldy Hernandez 2d2f4ffc97 Gracefully handle right shifts larger than the precision.
gcc/ChangeLog:

	PR tree-optimization/97488
	* range-op.cc (operator_lshift::op1_range): Handle large right shifts.

gcc/testsuite/ChangeLog:

	* gcc.dg/pr97488.c: New test.
2020-10-19 08:34:01 -04:00