Commit Graph

177877 Commits

Author SHA1 Message Date
Piotr Trojanek
a4dafb8b92 [Ada] Simplify processing of 'Valid_Scalars on array types
2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Do not call
	Scalar_Part_Present on the array component's type.
	(Build_Array_VS_Func): Remove Comp_Typ parameter, because it can
	be easily computed from the Array_Top parameter *and redundant
	parameters are confusing and error-prone).
2020-06-19 04:17:10 -04:00
Piotr Trojanek
66bd7af5cc [Ada] Fix validity checking for class-wide objects
2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Build_Record_VS_Func): Strip privacy and type
	derivation from the root type when 'Valid_Scalars is applied to
	a class-wide type.
2020-06-19 04:17:09 -04:00
Piotr Trojanek
5af0271f0e [Ada] Remove repeated testing of Check_Validity_Of_Parameters
2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* checks.adb (Apply_Parameter_Validity_Checks): Remove testing
	of Check_Validity_Of_Parameters for every formal parameter and
	function result.
2020-06-19 04:17:08 -04:00
Arnaud Charlet
75c44bc6a0 [Ada] Add missing warning tag for some overlapping actuals warnings
2020-06-19  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Add missing
	warning tag.
2020-06-19 04:17:07 -04:00
GCC Administrator
aae80e833d Daily bump. 2020-06-19 00:16:32 +00:00
Jason Merrill
b56dc0fc6c c++: More P2002 operator<=> refinements.
* Disallow && references.
* Allow empty unions.
* Improve diagnostics for a subobject comparison with
  non-comparison-category type.

gcc/cp/ChangeLog:

	* method.c (early_check_defaulted_comparison): Check for &&.
	(build_comparison_op): Allow empty union.  Diagnose non-category
	type.
	(common_comparison_type): Remove handling for non-category type.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/spaceship-ref1.C: New test.
	* g++.dg/cpp2a/spaceship-synth-neg4.C: New test.
	* g++.dg/cpp2a/spaceship-union1.C: New test.
2020-06-18 16:00:30 -04:00
Fei Yang
e54353a72a vect: Use vect_relevant_for_alignment_p consistently
Minor code refactorings in tree-vect-data-refs.c.  When trying loop peeling
to force alignment, call vect_relevant_for_alignment_p to filter out data
references in the loop whose alignment is irrelevant.

2020-06-18  Felix Yang  <felix.yang@huawei.com>

gcc/
	* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Call
	vect_relevant_for_alignment_p to filter out data references in
	the loop whose alignment is irrelevant when trying loop peeling
	to force alignment.
2020-06-18 20:11:09 +01:00
Uros Bizjak
e95395926a i386: Fix mode of ZERO_EXTRACT RTXes, remove ext_register_operand predicate.
The mode of ZERO_EXTRACT RTX should match the mode of its LOC register
operand.  The mode should be HI, SI or DImode to enable combine to synthesize
extractions from HImode and DImode operands, in addition to existing SImode.
Further, these changes tighten allowed modes for extv, extzv and insv
named patterns and finally enable removal of ext_register_operand
special predicate.

2020-18-06  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

	* config/i386/i386.md (*cmpqi_ext<mode>_1): Use SWI248 mode
	iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
	mode iterator for the first operand of ZERO_EXTRACT RTX.
	Change ext_register_operand predicate to register_operand.
	Rename from *cmpqi_ext_1.
	(*cmpqi_ext<mode>_2): Ditto.  Rename from *cmpqi_ext_2.
	(*cmpqi_ext<mode>_3): Ditto.  Rename from *cmpqi_ext_3.
	(*cmpqi_ext<mode>_4): Ditto.  Rename from *cmpqi_ext_4.
	(cmpi_ext_3): Use HImode instead of SImode for ZERO_EXTRACT RTX.
	(*extv<mode>): Use SWI24 mode iterator for the first operand
	of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.
	(*extzv<mode>): Use SWI248 mode iterator for the first operand
	of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.
	(*extzvqi): Use SWI248 mode iterator instead of SImode for
	ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first operand
	of ZERO_EXTRACT RTX.  Change ext_register_operand predicate to
	register_operand.
	(*extzvqi_mem_rex64 and corresponding peephole2):  Use SWI248 mode
	iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
	mode iterator for the first operand of ZERO_EXTRACT RTX.
	Change ext_register_operand predicate to register_operand.
	(@insv<mode>_1): Use SWI248 mode iterator for the first operand
	of ZERO_EXTRACT RTX.  Change ext_register_operand predicate to
	register_operand.
	(*insvqi_1): Use SWI248 mode iterator instead of SImode
	for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the
	first operand of ZERO_EXTRACT RTX.  Change ext_register_operand
	predicate to register_operand.
	(*insvqi_2): Ditto.
	(*insvqi_3): Ditto.
	(*insvqi_1_mem_rex64 and corresponding peephole2):  Use SWI248 mode
	iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
	mode iterator for the first operand of ZERO_EXTRACT RTX.
	Change ext_register_operand predicate to register_operand.
	(addqi_ext_1): New expander.
	(*addqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
	for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
	operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.  Rename from *addqi_ext_1.
	(*addqi_ext<mode>_2): Ditto. Rename from *addqi_ext_2.
	(divmodqi4): Use HImode instead of SImode for ZERO_EXTRACT RTX.
	(udivmodqi4): Ditto.
	(testqi_ext_1): Use HImode instead of SImode for ZERO_EXTRACT RTX.
	(*testqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
	for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
	operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.  Rename from *testqi_ext_1.
	(*testqi_ext<mode>_2): Ditto.  Rename from *testqi_ext_2.
	(andqi_ext_1): New expander.
	(*andqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
	for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
	operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.  Rename from andqi_ext_1.
	(*andqi_ext<mode>_1_cc): Ditto.  Rename from *andqi_ext_1_cc.
	(*andqi_ext<mode>_2): Ditto.  Rename from *andqi_ext_2.
	(*<code>qi_ext<mode>_1): Ditto.  Rename from *<code>qi_ext_1.
	(*<code>qi_ext<mode>_2): Ditto.  Rename from *<code>qi_ext_2.
	(xorqi_ext_1_cc): Use HImode instead of SImode for ZERO_EXTRACT RTX.
	(*xorqi_ext<mode>_1_cc):  Use SWI248 mode iterator instead of SImode
	for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
	operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
	to register_operand.  Rename from *xorqi_ext_1_cc.
	* config/i386/i386-expand.c (ix86_split_idivmod): Emit ZERO_EXTRACT
	in mode, matching its first operand.
	(promote_duplicated_reg): Update for renamed insv<mode>_1.
	* config/i386/predicates.md (ext_register_operand): Remove predicate.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr78904-1a.c: New test.
	* gcc.target/i386/pr78904-1b.c: Ditto.
	* gcc.target/i386/pr78904-2a.c: Ditto.
	* gcc.target/i386/pr78904-2b.c: Ditto.
	* gcc.target/i386/pr78904-3a.c: Ditto.
	* gcc.target/i386/pr78904-3b.c: Ditto.
	* gcc.target/i386/pr78904-4a.c: Ditto.
	* gcc.target/i386/pr78904-4b.c: Ditto.
	* gcc.target/i386/pr78904-5a.c: Ditto.
	* gcc.target/i386/pr78904-5b.c: Ditto.
	* gcc.target/i386/pr78904-6a.c: Ditto.
	* gcc.target/i386/pr78904-6b.c: Ditto.
	* gcc.target/i386/pr78967-1a.c: Ditto.
	* gcc.target/i386/pr78967-1b.c: Ditto.
	* gcc.target/i386/pr78967-2a.c: Ditto.
	* gcc.target/i386/pr78967-2b.c: Ditto.
2020-06-18 20:12:48 +02:00
Martin Sebor
5acc654e38 Avoid warning for memset writing over multiple members.
Resolves:
PR middle-end/95667 - unintended warning for memset writing across multiple members
PR middle-end/92814 - missing -Wstringop-overflow writing into a dynamically allocated flexible array member

gcc/ChangeLog:

	PR middle-end/95667
	PR middle-end/92814
	* builtins.c (compute_objsize): Remove call to
	compute_builtin_object_size and instead compute conservative sizes
	directly here.

gcc/testsuite/ChangeLog:

	PR middle-end/95667
	PR middle-end/92814
	* gcc.dg/Wstringop-overflow-25.c: Remove xfails.
	* gcc.dg/Wstringop-overflow-39.c: New test.
2020-06-18 12:00:36 -06:00
Marek Polacek
5421fae8b1 c++: ICE in requires-expressions with invalid args [PR95735]
This ICE-on-invalid goes back to GCC 6.  In finish_template_variable,
if coerce_innermost_template_parms returns error_mark_node, we pass
it down to constraints_satisfied_p and that error_mark_node flows
down to various satisfy_* functions and then to various tsubst_*
functions, where we crash.  diagnose_constraints also doesn't cope
with error arglist, so I think we should just return as in the
patch below.

gcc/cp/ChangeLog:

	PR c++/95735
	* pt.c (finish_template_variable): Return if
	coerce_innermost_template_parms return error_mark_node.

gcc/testsuite/ChangeLog:

	PR c++/95735
	* g++.dg/cpp2a/concepts-err2.C: New test.
2020-06-18 11:51:01 -04:00
Christophe Lyon
634e6f4910 Fix use of inaccessible member in pr94052.C
The recent PR41437 fix exposed a latent use of an inaccessible member in
the below testcase.

	gcc/testsuite/ChangeLog:

	* g++.target/aarch64/pr94052.C: Give z::ad public access.
2020-06-18 15:27:21 +00:00
Martin Liska
72cb486456
vectorizer: add _bb_vec_info::region_stmts and reverse_region_stmts
gcc/ChangeLog:

	* coretypes.h (struct iterator_range): New type.
	* tree-vect-patterns.c (vect_determine_precisions): Use
	range-based iterator.
	(vect_pattern_recog): Likewise.
	* tree-vect-slp.c (_bb_vec_info):  Likewise.
	(_bb_vec_info::~_bb_vec_info): Likewise.
	(vect_slp_check_for_constructors): Likewise.
	* tree-vectorizer.h:Add new iterators
	and functions that use it.
2020-06-18 16:58:27 +02:00
Jonathan Wakely
bd0a89dcd8 Add missing PR number to ChangeLog (PR 95378)
gcc/c-family/ChangeLog:

	* ChangeLog:
2020-06-18 15:34:51 +01:00
Martin Liska
e68cc3a8f8
rs6000: Fix creation of VEC_COND_EXPR
gcc/ChangeLog:

	* config/rs6000/rs6000-call.c (fold_build_vec_cmp):
	Since 502d63b6d6, first argument
	of a VEC_COND_EXPR cannot be tcc_comparison and so that
	a SSA_NAME needs to be created before we use it for the first
	argument of the VEC_COND_EXPR.
	(fold_compare_helper): Pass gsi to fold_build_vec_cmp.
2020-06-18 16:12:06 +02:00
Tobias Burnus
ac70b20b10 OpenMP/Fortran: Reject allocatable components in map clause
gcc/fortran/ChangeLog:

	* openmp.c (resolve_omp_clauses): Reject vars with
	allocatable components in OpenMP map clauses.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/map-alloc-comp-1.f90: New test.
2020-06-18 15:27:30 +02:00
Richard Biener
eccc3d4326 middle-end/95739 - fix vector condition IFN expansion
This fixes the omission of moving the expansion result to the
target.

2020-06-18  Richard Biener  <rguenther@suse.de>

	PR middle-end/95739
	* internal-fn.c (expand_vect_cond_optab_fn): Move the result
	to the target if necessary.
	(expand_vect_cond_mask_optab_fn): Likewise.
2020-06-18 14:47:34 +02:00
Martin Liska
9435fb9668
Fix typo in tree-ssa-reassoc.c.
gcc/ChangeLog:

	* tree-ssa-reassoc.c (ovce_extract_ops): Replace *vcond with
	vcond as we check for NULL pointer.
2020-06-18 14:46:02 +02:00
Martin Liska
9b4bdaf794
gcc-changelog: checkout & pull order
contrib/ChangeLog:

	* gcc-changelog/git_update_version.py: First checkout and then
	run git pull ---rebase.
2020-06-18 14:45:39 +02:00
Marek Polacek
81caacc273 c++: Fix tsubst ICE with invalid static_cast [PR95728]
Since r11-423 tsubst_copy_and_build/TREE_LIST uses tsubst_tree_list
instead of open coding it.  While the latter could return an error
node wrapped in a TREE_LIST, the former can return a naked error node.

That broke in tsubst_copy_and_build/NEW_EXPR:
  tree placement = RECUR (TREE_OPERAND (t, 0));
  // placement is now error_mark_node, so...
  for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
  // ... this crashes

If we just return, we avoid the ICE and improve the diagnostic a bit.

gcc/cp/ChangeLog:

	PR c++/95728
	* pt.c (tsubst_copy_and_build) <case NEW_EXPR>: Return error_mark_node
	if placement is erroneous.

gcc/testsuite/ChangeLog:

	PR c++/95728
	* g++.dg/template/cast6.C: New test.
2020-06-18 08:32:21 -04:00
Martin Liska
2c53566539
gcc-changelog: support merge commits in git_update_version
contrib/ChangeLog:

	* gcc-changelog/git_update_version.py: Support merge commits
	and walk only on the branch that is being merged and generate
	missing ChangeLog entries.
2020-06-18 14:30:47 +02:00
Tobias Burnus
3870268b27 silence empty-body warning
gcc/ChangeLog:

	* gimple-pretty-print.c (dump_binary_rhs): Use braces to
	silence empty-body warning with gcc_fallthrough.
2020-06-18 13:19:03 +02:00
Jakub Jelinek
2e0f4a18bc phiopt: Improve minmax optimization [PR95699]
As discussed in the PR, the
x < 0x80000000U to (int) x >= 0
optimization stands in the way of minmax_replacement optimization,
so for comparisons with most of the constants it works well, but when the
above mentioned optimization triggers, it is unable to do it.
The match.pd (cond (cmp (convert? x) c1) (op x c2) c3) -> (op (minmax x c1) c2)
optimization is able to look through that and this patch
teaches minmax_replacement about it too.

2020-06-18  Jakub Jelinek  <jakub@redhat.com>

	PR tree-optimization/95699
	* tree-ssa-phiopt.c (minmax_replacement): Treat (signed int)x < 0
	as x > INT_MAX and (signed int)x >= 0 as x <= INT_MAX.  Move variable
	declarations to the statements that set them where possible.

	* gcc.dg/tree-ssa/pr95699.c: New test.
2020-06-18 12:12:43 +02:00
Jakub Jelinek
9a875db43c forwprop: simplify_vector_constructor follow-up fix [PR95713]
As the following testcase shows, the exception for the aarch64
vec_pack_trunc_di is not sufficient on x86, the halfvectype
"vectors" have SImode but the x86 vec_pack_trunc_si meant for
the bool bitmasks combines 2x SImode into DImode, while in the
testcase the halfvectype is 1x SImode "vector" with SImode and
result is 2x HImode "vector" with SImode.

Richard Sandiford's reply:
FWIW, since the aarch64 case was only found by inspection and might
not be useful, personally I'd prefer to drop that case after all.

2020-06-18  Jakub Jelinek  <jakub@redhat.com>

	PR target/95713
	* tree-ssa-forwprop.c (simplify_vector_constructor): Don't allow
	scalar mode halfvectype other than vector boolean for
	VEC_PACK_TRUNC_EXPR.

	* gcc.dg/pr95713.c: New test.
2020-06-18 12:12:43 +02:00
Richard Biener
5553433d7b avoid early asm output
This avoids early assembler output via the gimplifier creating
new static CTORs.  The output machinery seems to be prepared to
output constants recursively and it's just a matter of
appropriately defering or not defering output.

This also has the advantage of not outputting .string for
optimized away local aggregate initializers containing string
references.

2020-06-18  Richard Biener  <rguenther@suse.de>

	* varasm.c (assemble_variable): Make sure to not
	defer output when outputting addressed constants.
	(output_constant_def_contents): Likewise.
	(add_constant_to_table): Take and pass on whether to
	defer output.
	(output_addressed_constants): Likewise.
	(output_constant_def): Pass on whether to defer output
	to add_constant_to_table.
	(tree_output_constant_def): Defer output of constants.
2020-06-18 12:11:44 +02:00
Richard Biener
da2b7c7f0a remove SLP_TREE_TWO_OPERATORS, add SLP permutation node
This removes the SLP_TREE_TWO_OPERATORS hack in favor of having
explicit SLP nodes for both computations and the blend operation.
For this introduce a generic merge + select + permute SLP node
(with implementation limits).

Building upon earlier patches it adds vect_stmt_dominates_stmt_p
and the ability to compute a vector insertion place from
vectorized stmts (which now have UID zero) as needed for
the permute node.

2020-06-17  Richard Biener  <rguenther@suse.de>

	* tree-vectorizer.h (_slp_tree::two_operators): Remove.
	(_slp_tree::lane_permutation): New member.
	(_slp_tree::code): Likewise.
	(SLP_TREE_TWO_OPERATORS): Remove.
	(SLP_TREE_LANE_PERMUTATION): New.
	(SLP_TREE_CODE): Likewise.
	(vect_stmt_dominates_stmt_p): Declare.
	* tree-vectorizer.c (vect_stmt_dominates_stmt_p): New function.
	* tree-vect-stmts.c (vect_model_simple_cost): Remove
	SLP_TREE_TWO_OPERATORS handling.
	* tree-vect-slp.c (_slp_tree::_slp_tree): Amend.
	(_slp_tree::~_slp_tree): Likewise.
	(vect_two_operations_perm_ok_p): Remove.
	(vect_build_slp_tree_1): Remove verification of two-operator
	permutation here.
	(vect_build_slp_tree_2): When we have two different operators
	build two computation SLP nodes and a blend.
	(vect_print_slp_tree): Print the lane permutation if it exists.
	(slp_copy_subtree): Copy it.
	(vect_slp_rearrange_stmts): Re-arrange it.
	(vect_slp_analyze_node_operations_1): Handle SLP_TREE_CODE
	VEC_PERM_EXPR explicitely.
	(vect_schedule_slp_instance): Likewise.  Remove old
	SLP_TREE_TWO_OPERATORS code.
	(vectorizable_slp_permutation): New function.
2020-06-18 12:05:37 +02:00
Eric Botcazou
2ab42c70a6 [Ada] Fix small inefficiency in previous change to expander
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Get_Size_For_Range): Only make sure to return a
	size lower than that of the original type if possible.
	* libgnat/s-rannum.adb (Random_Discrete): Back out optimization
	added for 32-bit types.
2020-06-18 05:08:37 -04:00
Arnaud Charlet
424ce99fb5 [Ada] ACATS 4.1J - B854003 - Subtype conformance check missed
2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_ch6.ads, sem_ch6.adb (Check_Formal_Conformance): New
	subprogram.
	(Check_Conformance): Move code to Check_Formal_Conformance.
	* sem_ch8.adb (Analyze_Subprogram_Renaming): Check for formal
	conformance when needed.
2020-06-18 05:08:36 -04:00
Eric Botcazou
6c8e4f7e38 [Ada] Narrow large arithmetic and comparison operations
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Narrow_Large_Operation): New procedure to try
	and narrow large arithmetic and comparison operations.
	(Expand_N_In): Call it.
	(Expand_N_Op_Abs): Likewise.
	(Expand_N_Op_Add): Likewise.
	(Expand_N_Op_Divide): Likewise.
	(Expand_N_Op_Eq): Likewise.
	(Expand_N_Op_Ge): Likewise.
	(Expand_N_Op_Gt): Likewise.
	(Expand_N_Op_Le): Likewise.
	(Expand_N_Op_Lt): Likewise.
	(Expand_N_Op_Minus): Likewise.
	(Expand_N_Op_Mod): Likewise.
	(Expand_N_Op_Multiply): Likewise.
	(Expand_N_Op_Ne): Likewise.
	(Expand_N_Op_Plus): Likewise.
	(Expand_N_Op_Rem): Likewise.
	(Expand_N_Op_Subtract): Likewise.
	(Expand_N_Type_Conversion): Use Convert_To procedure.
	* exp_ch9.adb (Is_Pure_Barrier) <N_Identifier>: Skip all
	numeric types.
	<N_Type_Conversion>: Use explicit criterion.
2020-06-18 05:08:36 -04:00
Eric Botcazou
4bfab79a72 [Ada] Small cleanup in constraint checking code for allocators
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_Allocator_Expression): Apply constraint
	and predicate checks for the qualified expression on entry,
	followed by constraint and predicate checks for the allocator
	itself, and return early if this results in a static error.
	(Expand_N_Allocator): Do not do the same here.  Instead apply
	constraint and predicate checks for arrays in the subtype
	indication case.
	* exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply
	range checks to allocators here.
2020-06-18 05:08:35 -04:00
Javier Miranda
b93d80bc8f [Ada] Crash in tagged type constructor with task components
2020-06-18  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch6.adb (BIP_Suffix_Kind, Is_Build_In_Place_Entity): Move
	declarations...
	* exp_ch6.ads: Here.
	* exp_util.adb (Is_Secondary_Stack_BIP_Func_Call): Do not rely
	on the name of the scope to locate the extra formal BIPalloc
	since they are copied when the pointer type associated with
	dispatching calls is built; rely on routines
	Is_Build_In_Place_Entity and BIP_Suffix_Kind.
	* exp_disp.adb (Expand_Dispatching_Call): Set the scope of the
	first extra formal of the internally built pointer type.
	* sem_ch3.adb (Derive_Subprogram): Do not inherit extra formals
	from a limited interface parent since limitedness is not
	inherited in such case (AI-419) and this affects the extra
	formals.
	* sprint.adb (Write_Itype): Output extra formals of subprogram
	types.
2020-06-18 05:08:34 -04:00
Ghjuvan Lacambre
4f4fd8ae2c [Ada] Update output of verbose error summary
2020-06-18  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* errout.adb (Write_Error_Summary): Display number of warnings
	treated as errors.
	* errutil.ads: Update comment.
2020-06-18 05:08:33 -04:00
Eric Botcazou
3874e79d94 [Ada] Small cleanup in the attribute code of the expander
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Analyze_Attribute) <Asm_{In,Out}put>: Alphabetize.
	<Component_Size>: Add check for universal integer attribute.
	<Aft>, <Bit_Order>, <Definite>, <Max_Alignment_For_Allocation>,
	<Scalar_Storage_Order>: Raise Program_Error on them.
	* sem_attr.adb (Eval_Attribute) <Component_Size>: Add comment on
	the packed array case.
2020-06-18 05:08:32 -04:00
Steve Baird
13175003d4 [Ada] Implement AI12-0032 fixes for 'Old attribute accessibility
2020-06-18  Steve Baird  <baird@adacore.com>

gcc/ada/

	* sem_util.adb (Object_Access_Level): Treat a 'Old attribute
	reference like an aggregate in determining its static
	accessibility level; after the evaluation of the relevant
	post-condition, the implicitly declared constant associated with
	an Old attribute reference ceases to exist. Similarly for
	Loop_Entry attribute.
	* exp_ch6.adb (Expand_Call_Helper): For an attribute reference
	that is expanded into a reference to an implicitly declared
	constant (e.g., a 'Old or 'Loop_Entry attribute), compute the
	dynamic accessibility level of that constant by looking at the
	declaration of the constant (as opposed to looking at the
	attribute reference).
2020-06-18 05:08:31 -04:00
Steve Baird
a6c467131b [Ada] No Default_Initial_Condition check when declaring an imported object
2020-06-18  Steve Baird  <baird@adacore.com>

gcc/ada/

	* exp_ch3.adb (Expand_N_Object_Declaration): Do not generate a
	default initial condition check for the declaration of an
	imported object.
2020-06-18 05:08:30 -04:00
Arnaud Charlet
8cd7aec26f [Ada] Add support for XDR streaming in the default runtime
2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* Makefile.rtl: Add s-statxd.o.
	* bindgen.adb (Gen_Adainit): Add support for XDR_Stream.
	* bindusg.adb (Display): Add mention of -xdr.
	* gnatbind.adb: Process -xdr switch.
	* init.c (__gl_xdr_stream): New.
	* opt.ads (XDR_Stream): New.
	* libgnat/s-stratt__xdr.adb: Rename to...
	* libgnat/s-statxd.adb: this and adjust.
	* libgnat/s-statxd.ads: New.
	* libgnat/s-stratt.ads, libgnat/s-stratt.adb: Choose between
	default and XDR implementation at runtime.
	* libgnat/s-ststop.ads: Update comments.
	* doc/gnat_rm/implementation_advice.rst: Update doc on XDR
	streaming.
	* gnat_rm.texi: Regenerate.
2020-06-18 05:08:30 -04:00
Eric Botcazou
5b3950bed9 [Ada] Fix host/target confusion for attribute To_Address
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_attr.adb (Analyze_Attribute) <To_Address>: Use the address
	size of the target instead of the host when checking the value of
	a static expression.  Also use standard idiom for exponentiation.
2020-06-18 05:08:29 -04:00
Eric Botcazou
0c32ab8232 [Ada] Add second warning for convention C_Variadic_n
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_prag.adb (Process_Convention): Give a warning on C_Variadic_n
	being applied to a subprogram with exactly n parameters.
2020-06-18 05:08:28 -04:00
Arnaud Charlet
c9a56fd316 [Ada] Profile mismatch between C and Ada functions
2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnarl/s-osinte__linux.ads, libgnat/g-io.adb,
	libgnat/g-socket.adb, libgnat/g-socthi.adb,
	libgnat/g-socthi.ads, libgnat/g-socthi__vxworks.adb,
	libgnat/g-socthi__vxworks.ads, libgnat/g-sothco.ads,
	libgnat/s-io.adb, libgnat/a-except.adb: Fix function profile
	mismatch with imported C functions.
2020-06-18 05:08:27 -04:00
Eric Botcazou
5126ca1fa7 [Ada] Minor cleanup in Expand_Call_Helper
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Remove superfluous calls
	to Relocate_Node and merge calls to Analyze and Resolve in a
	couple of places.  Do not attempt to generate a range check
	for an actual parameter against the formal's type of a derived
	subprogram after generating a conversion to the formal's type
	of the parent subprogram.
2020-06-18 05:08:26 -04:00
Eric Botcazou
12be130c3f [Ada] Improve compile-time evaluation of value ranges
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* checks.adb (Compute_Range_For_Arithmetic_Op): New procedure to
	compute a range for an arithmetical operation extracted from...
	(Minimize_Eliminate_Overflows): ...here.  Call it.
	(Determine_Range_Cache_O): New cache for Original_Node nodes.
	(Determine_Range): Call Compute_Range_For_Arithmetic_Op for all
	arithmetic expressions. Use Attribute_Id in lieu of Attribute_Name
	for attributes. Add handling for Range_Length alongside Length.
	Add specific handling for Alignment, Bit, First_Bit, Last_Bit,
	Max_Size_In_Storage_Elements, Position, Bit_Position,
	Component_Size, Object_Size, Size, Value_Size, Descriptor_Size.
	(Enable_Overflow_Check): Omit the check for Abs and Minus if the
	operand cannot be the largest negative number.
	(Selected_Length_Checks): Use Pos for Number_Dimensions.
	* exp_attr.adb (Expand_N_Attribute_Reference): Move compile-time
	handling of Bit_Position, Descriptor_Size, First_Bit, Last_Bit
	and Position to...
	* sem_attr.adb (Eval_Attribute): ...here.  Move up Alignment for
	objects and use Compile_Time_Known_Attribute in this case too.
2020-06-18 05:08:25 -04:00
Ghjuvan Lacambre
78689aa295 [Ada] Do not treat pragma Compile_Time_Warning as error even with -gnatwe
2020-06-18  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* erroutc.ads: Declare new Is_Compile_Time_Msg boolean,
	add new Compile_Time_Pragma field to Error_Msg_Object type.
	(Count_Compile_Time_Pragma_Warnings): New function.
	* erroutc.adb (Count_Compile_Time_Pragma_Warnings): New
	function.
	(Compilation_Errors): Take Compile_Time warnings into account
	when tallying Errors/Warnings.
	* errout.ads (Error_Msg): New procedure.
	* errout.adb (Error_Msg): New procedure.
	(Error_Msg_Internal): Set new Compile_Time_Pragma field in
	Error_Msg_Object.
	* errutil.adb (Error_Msg): Set new Compile_Time_Pragma field in
	Error_Msg_Object.
	* sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Pass
	True to new Error_Msg procedure.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Update doc for
	the Compile_Time_Warning pragma.
	* gnat_rm.texi: Regenerate.
	* opt.ads: Update comment.
2020-06-18 05:08:24 -04:00
Arnaud Charlet
668fb87d74 [Ada] Suppress CodePeer message on possible uninitialized variable
2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_ch4.adb (Check_Compatible_Profiles): Add explicit
	initialization.
2020-06-18 05:08:23 -04:00
Piotr Trojanek
a9fb2055f3 [Ada] Fix failed assertion on a slice indexed by a subtype_indication
2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* checks.adb (Generate_Index_Checks): Handle
	N_Subtype_Indication returned from Scalar_Range.
2020-06-18 05:08:22 -04:00
Piotr Trojanek
c94bbfbe57 [Ada] Cleanups in code related to static expressions
2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* checks.adb, sem_ch3.adb: Minor refactorings.
	* sem_eval.adb (Eval_Qualified_Expression): Fix reference to RM
	rule in comment; only set a local variable Hex in the branch
	where it is used.
2020-06-18 05:08:22 -04:00
Piotr Trojanek
0f7b6a2eb3 [Ada] Avoid forced loading of System.Priority in CodePeer mode
2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_eval.adb (Check_Non_Static_Context): Use Is_RTE.
2020-06-18 05:08:20 -04:00
Arnaud Charlet
606e70fd3d [Ada] ACATS 4.1L - B452002 - Wrong universal access "=" rules
2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_ch4.adb (Find_Equality_Types.Check_Access_Object_Types):
	New function, used to implement RM 4.5.2 (9.6/2).
	(Find_Equality_Types.Check_Compatible_Profiles): New function,
	used to implement RM 4.5.2(9.7/2).
	(Find_Equality_Types.Reference_Anonymous_Access_Type): New
	function.
	(Find_Equality_Types.Try_One_Interp): Fix handling of anonymous
	access types which was accepting both too much and too little.
	Remove accumulated special and incomplete cases for
	instantiations, replaced by Has_Compatible_Type.
	(Analyze_Overloaded_Selected_Component): Use
	Is_Anonymous_Access_Type instead of Ekind_In.
	* sem_res.adb: Code cleanup and bug fix: use
	Is_Anonymous_Access_Type instead of Ekind_In.  Relax checking of
	anonymous access parameter when universal_access "=" is
	involved.
	* sem_type.adb: Likewise.
	(Find_Unique_Type): Move code from here...
	(Specific_Type): ...to here. Also add missing handling of access
	to class wide types.
	* einfo.ads, einfo.adb (Is_Access_Object_Type): New.
2020-06-18 05:08:20 -04:00
Bob Duff
41e52aa585 [Ada] AI12-0293-1 Implement storage streams
2020-06-18  Bob Duff  <duff@adacore.com>

gcc/ada/

	* libgnat/a-strsto.ads, libgnat/a-ststbo.adb,
	libgnat/a-ststbo.ads, libgnat/a-ststun.adb,
	libgnat/a-ststun.ads: New files, containing packages
	Ada.Streams.Storage, Ada.Streams.Storage.Bounded, and
	Ada.Streams.Storage.Unbounded.
	* impunit.adb, Makefile.rtl: Add new file names.
2020-06-18 05:08:19 -04:00
Javier Miranda
02bf80a34e [Ada] Missing error on aspects Input and Output
2020-06-18  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_ch13.adb (Has_Good_Profile): Enforce strictness in the
	check. Required to detect wrong profiles for Input and Output.
	(Analyze_Stream_TSS_Definition): Minor enhancement in the text
	of the error for class-wide attributes.
2020-06-18 05:08:18 -04:00
Eric Botcazou
25a11453ca [Ada] Small adjustment to Get_Integer_Type function
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Get_Integer_Type): Pick an unsigned type based
	on the Esize of the base type of the input type.
2020-06-18 05:08:17 -04:00
Eric Botcazou
2e64cf0552 [Ada] Fix invalid expression sharing in Expand_Array_Equality
2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_Array_Equality): For the optimization of
	the 2-element case, build new expression lists for the indices.
2020-06-18 05:08:16 -04:00