Commit Graph

177352 Commits

Author SHA1 Message Date
Justin Squirek
afb885445f [Ada] Missing accessibility error on object in type conversion
2020-06-11  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_util.adb (Expand_N_Attribute_Reference): Use original
	nodes where required to avoid looking at the expanded tree.
2020-06-11 05:53:33 -04:00
Arnaud Charlet
57f57ad106 [Ada] Remove aspects that were commented out
2020-06-11  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/a-catizo.ads, libgnat/a-nbnbin.ads,
	libgnat/a-nbnbre.ads, libgnat/a-nubinu.ads,
	libgnat/s-aoinar.ads, libgnat/s-aomoar.ads,
	libgnat/s-aotase.ads, libgnat/s-stopoo.ads: Remove aspects that
	we will not implement.
2020-06-11 05:53:32 -04:00
Arnaud Charlet
f7823e6299 [Ada] Add fallback on Integer_Arithmetic
2020-06-11  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-aoinar.adb (Atomic_Fetch_And_Add,
	Atomic_Fetch_And_Subtract): Add fallback using
	compare-and-exchange, in case the integer type does not map to a
	machine type.
2020-06-11 05:53:31 -04:00
Martin Liska
8cff672cb9
asan: fix RTX emission for ilp32
gcc/ChangeLog:

	PR sanitizer/95634
	* asan.c (asan_emit_stack_protection): Fix emission for ilp32
	by using Pmode instead of ptr_mode.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
2020-06-11 11:02:58 +02:00
Kewen Lin
37478789dc vect: Rename things related to rgroup_masks
Power supports vector memory access with length (in bytes) instructions.
Like existing fully masking for SVE, it is another approach to vectorize
the loop using partially-populated vectors.

As Richard Sandiford pointed out, we can rename the rgroup struct
rgroup_masks to rgroup_controls, rename its members mask_type to type,
masks to controls to be more generic.

Besides, this patch also renames some functions like vect_set_loop_mask
to vect_set_loop_control, release_vec_loop_masks to
release_vec_loop_controls, vect_set_loop_masks_directly to
vect_set_loop_controls_directly.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

	* tree-vect-loop-manip.c (vect_set_loop_mask): Renamed to ...
	(vect_set_loop_control): ... this.
	(vect_maybe_permute_loop_masks): Rename rgroup_masks related things.
	(vect_set_loop_masks_directly): Renamed to ...
	(vect_set_loop_controls_directly): ... this.  Also rename some
	variables with ctrl instead of mask.  Rename vect_set_loop_mask to
	vect_set_loop_control.
	(vect_set_loop_condition_masked): Rename rgroup_masks related things.
	Also rename some variables with ctrl instead of mask.
	* tree-vect-loop.c (release_vec_loop_masks): Renamed to ...
	(release_vec_loop_controls): ... this.  Rename rgroup_masks related
	things.
	(_loop_vec_info::~_loop_vec_info): Rename release_vec_loop_masks to
	release_vec_loop_controls.
	(can_produce_all_loop_masks_p): Rename rgroup_masks related things.
	(vect_get_max_nscalars_per_iter): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	(vect_record_loop_mask): Likewise.
	(vect_get_loop_mask): Likewise.
	* tree-vectorizer.h (struct rgroup_masks): Renamed to ...
	(struct rgroup_controls): ... this.  Also rename mask_type
	to type and rename masks to controls.
2020-06-11 03:35:30 -05:00
Kewen Lin
b3372425ec vect: Rename fully_masked_p to using_partial_vectors_p
Power supports vector memory access with length (in bytes) instructions.
Like existing fully masking for SVE, it is another approach to vectorize
the loop using partially-populated vectors.

As Richard Sandiford suggested, this patch is to update the existing
fully_masked_p field to using_partial_vectors_p.  Introduce one macro
LOOP_VINFO_USING_PARTIAL_VECTORS_P for partial vectorization checking
usage, update the LOOP_VINFO_FULLY_MASKED_P with
LOOP_VINFO_USING_PARTIAL_VECTORS_P && !masks.is_empty() and still use
it for mask-based partial vectors approach specific checks.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

	* tree-vect-loop-manip.c (vect_set_loop_condition): Rename
	LOOP_VINFO_FULLY_MASKED_P to LOOP_VINFO_USING_PARTIAL_VECTORS_P.
	(vect_gen_vector_loop_niters): Likewise.
	(vect_do_peeling): Likewise.
	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Rename
	fully_masked_p to using_partial_vectors_p.
	(vect_analyze_loop_costing): Rename LOOP_VINFO_FULLY_MASKED_P to
	LOOP_VINFO_USING_PARTIAL_VECTORS_P.
	(determine_peel_for_niter): Likewise.
	(vect_estimate_min_profitable_iters): Likewise.
	(vect_transform_loop): Likewise.
	* tree-vectorizer.h (LOOP_VINFO_FULLY_MASKED_P): Updated.
	(LOOP_VINFO_USING_PARTIAL_VECTORS_P): New macro.
2020-06-11 03:26:54 -05:00
Kewen Lin
042f408297 vect: Rename can_fully_mask_p to can_use_partial_vectors_p
Power supports vector memory access with length (in bytes) instructions.
Like existing fully masking for SVE, it is another approach to vectorize
the loop using partially-populated vectors.

As Richard Sandiford pointed out, we should extend the existing flag
can_fully_mask_p to be more generic, to indicate whether we have
any chances with partial vectors for this loop.  So this patch
is to rename this flag to can_use_partial_vectors_p to be more
meaningful, also rename the macro LOOP_VINFO_CAN_FULLY_MASK_P
to LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

	* tree-vect-loop.c (_loop_vec_info::_loop_vec_info): Rename
	can_fully_mask_p to can_use_partial_vectors_p.
	(vect_analyze_loop_2): Rename LOOP_VINFO_CAN_FULLY_MASK_P to
	LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P.  Rename saved_can_fully_mask_p
	to saved_can_use_partial_vectors_p.
	(vectorizable_reduction): Rename LOOP_VINFO_CAN_FULLY_MASK_P to
	LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P.
	(vectorizable_live_operation): Likewise.
	* tree-vect-stmts.c (permute_vec_elements): Likewise.
	(check_load_store_masking): Likewise.
	(vectorizable_operation): Likewise.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.
	(vectorizable_condition): Likewise.
	* tree-vectorizer.h (LOOP_VINFO_CAN_FULLY_MASK_P): Renamed to ...
	(LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P): ... this.
	(_loop_vec_info): Rename can_fully_mask_p to can_use_partial_vectors_p.
2020-06-11 03:26:42 -05:00
Martin Liska
8ff57396d6
prepare-commit-hook: Use gcc-config.diff-file.
contrib/ChangeLog:

	* prepare-commit-msg: Replace ENV variable with a git config
	value.
2020-06-11 10:09:47 +02:00
Jonathan Wakely
9aadfdd650
contrib: Avoid redundant 'git diff' in prepare-commit-msg hook
contrib/ChangeLog:

	* prepare-commit-msg: Use 'tee' to save the diff to a file
	instead of running 'git diff' twice.
2020-06-11 09:57:58 +02:00
Martin Liska
656e363bcc
Fix -Wformat-diag in options-save.c
The patch removes bunch of warnings:

options-save.c:12004:29: warning: unquoted identifier or keyword ‘global_options’ in format [-Wformat-diag]
12004 |     internal_error ("Error: global_options are modified in local context\n");

gcc/ChangeLog:

	* optc-save-gen.awk: Quote error string.
2020-06-11 09:12:25 +02:00
Alexandre Oliva
184c21bf1c slim up mem exprs to avoid line breaks in -fverbose-asm
An asm operand with a "VIEW_CONVERT_EXPR<struct {
  [...]
}>" will output the definition of the struct as asm code.  Oops.

Enable TDF_SLIM in print_mem_expr to avoid such line breaks.


for  gcc/ChangeLog

	* print-rtl.c (print_mem_expr): Enable TDF_SLIM in dump_flags.
2020-06-10 23:58:23 -03:00
Kito Cheng
dcf41a4e60 RISC-V: Unify the output asm pattern between gpr_save and gpr_restore pattern.
gcc/ChangeLog:

	* config/riscv/riscv-protos.h (riscv_output_gpr_save): Remove.
	* config/riscv/riscv-sr.c (riscv_sr_match_prologue): Update
	value.
	* config/riscv/riscv.c (riscv_output_gpr_save): Remove.
	* config/riscv/riscv.md (gpr_save): Update output asm pattern.
2020-06-10 19:41:06 -07:00
Kito Cheng
d0e0c1300f RISC-V: Describe correct USEs for gpr_save pattern [PR95252]
- Verified on rv32emc/rv32gc/rv64gc bare-metal target and rv32gc/rv64gc
   linux target with qemu.

gcc/ChangeLog:

	* config/riscv/predicates.md (gpr_save_operation): New.
	* config/riscv/riscv-protos.h (riscv_gen_gpr_save_insn): New.
	(riscv_gpr_save_operation_p): Ditto.
	* config/riscv/riscv-sr.c (riscv_remove_unneeded_save_restore_calls):
	Ignore USEs for gpr_save patter.
	* config/riscv/riscv.c (gpr_save_reg_order): New.
	(riscv_expand_prologue): Use riscv_gen_gpr_save_insn to gen gpr_save.
	(riscv_gen_gpr_save_insn): New.
	(riscv_gpr_save_operation_p): Ditto.
	* config/riscv/riscv.md (S3_REGNUM): New.
	(S4_REGNUM): Ditto.
	(S5_REGNUM): Ditto.
	(S6_REGNUM): Ditto.
	(S7_REGNUM): Ditto.
	(S8_REGNUM): Ditto.
	(S9_REGNUM): Ditto.
	(S10_REGNUM): Ditto.
	(S11_REGNUM): Ditto.
	(gpr_save): Model USEs correctly.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/pr95252.c: New.
2020-06-10 19:40:59 -07:00
GCC Administrator
ec6ffbb919 Daily bump. 2020-06-11 00:16:45 +00:00
Patrick Palka
a73051a0ea libstdc++: Fix some ranges algos optimizations [PR95578]
ranges::copy and a number of other ranges algorithms have unwrapping
optimizations for iterators of type __normal_iterator, move_iterator and
reverse_iterator.  But in the checks that guard these optimizations we
currently only test that the iterator of the iterator/sentinel pair has
the appropriate type before proceeding with the corresponding
optimization, and do not also test the sentinel type.

This breaks the testcase in this PR because this testcase constructs via
range adaptors a range whose begin() is a __normal_iterator and whose
end() is a custom sentinel type, and then performs ranges::copy on it.
From there we bogusly perform the __normal_iterator unwrapping
optimization on this iterator/sentinel pair, which immediately leads to
a constraint failure since the custom sentinel type does not model
sentinel_for<int*>.

This patch fixes this issue by refining each of the problematic checks
to also test that the iterator and sentinel types are the same before
applying the corresponding unwrapping optimization.  Along the way, some
code simplifications are made.

libstdc++-v3/ChangeLog:

	PR libstdc++/95578
	* include/bits/ranges_algo.h (__lexicographical_compare_fn):
	Also check that the iterator and sentinel have the same type before
	applying the unwrapping optimization for __normal_iterator.
	Split the check into two, one for the first iterator/sentinel
	pair and another for second iterator/sentinel pair.  Remove uses
	of __niter_base, and remove uses of std::move on a
	__normal_iterator.
	* include/bits/ranges_algobase.h (__equal_fn): Likewise.
	(__copy_or_move): Likewise.  Perform similar adjustments for
	the reverse_iterator and move_iterator optimizations.  Inline
	the checks into the if-constexprs, and use using-declarations to
	make them less visually noisy.  Remove uses of __niter_wrap.
	(__copy_or_move_backward): Likewise.
	* testsuite/25_algorithms/copy/95578.cc: New test.
	* testsuite/25_algorithms/copy_backward/95578.cc: New test.
	* testsuite/25_algorithms/equal/95578.cc: New test.
	* testsuite/25_algorithms/lexicographical_compare/95578.cc: New test.
	* testsuite/25_algorithms/move/95578.cc: New test.
	* testsuite/25_algorithms/move_backward/95578.cc: New test.
2020-06-10 17:37:53 -04:00
Alexandre Oliva
06ef9c119c [PR51447] restore the global reg var before returning from main
A runtime system might legitimately hold in rbx a value expected to be
preserved across the call to main, but its use as a global register
variable stops main from preserving it.


for  gcc/testsuite/ChangeLog

	PR rtl-optimization/51447
	* gcc.c-torture/execute/pr51447.c (main): Preserve call-saved
	register.
2020-06-10 17:56:36 -03:00
Iain Sandoe
a9eec9625e coroutines: Make call argument handling more robust [PR95440]
build_new_method_call is supposed to be able to handle a null
arguments list pointer (when the method has no parms).  There
were a couple of places where uses of the argument list pointer
were not defended against NULL.

gcc/cp/ChangeLog:

	PR c++/95440
	* call.c (add_candidates): Use vec_safe_length() for
	testing the arguments list.
	(build_new_method_call_1): Use vec_safe_is_empty() when
	checking for an empty args list.

gcc/testsuite/ChangeLog:

	PR c++/95440
	* g++.dg/coroutines/pr95440.C: New test.
2020-06-10 20:02:45 +01:00
Martin Sebor
a2c2cee92e PR middle-end/95353 - spurious -Wstringop-overflow writing to a trailing array plus offset
Also resolves:
PR middle-end/92939 - missing -Wstringop-overflow on negative index from the end of array

gcc/ChangeLog:

	PR middle-end/95353
	PR middle-end/92939
	* builtins.c (inform_access): New function.
	(check_access): Call it.  Add argument.
	(addr_decl_size): Remove.
	(get_range): New function.
	(compute_objsize): New overload.  Only use compute_builtin_object_size
	with raw memory function.
	(check_memop_access): Pass new argument to compute_objsize and
	check_access.
	(expand_builtin_memchr, expand_builtin_strcat): Same.
	(expand_builtin_strcpy, expand_builtin_stpcpy_1): Same.
	(expand_builtin_stpncpy, check_strncat_sizes): Same.
	(expand_builtin_strncat, expand_builtin_strncpy): Same.
	(expand_builtin_memcmp): Same.
	* builtins.h (check_nul_terminated_array): Declare extern.
	(check_access): Add argument.
	(struct access_ref, struct access_data): New structs.
	* gimple-ssa-warn-restrict.c (clamp_offset): New helper.
	(builtin_access::overlap): Call it.
	* tree-object-size.c (decl_init_size): Declare extern.
	(addr_object_size): Correct offset computation.
	* tree-object-size.h (decl_init_size): Declare.
	* tree-ssa-strlen.c (handle_integral_assign): Remove a call
	to maybe_warn_overflow when assigning to an SSA_NAME.

gcc/testsuite/ChangeLog:

	PR middle-end/95353
	PR middle-end/92939
	* c-c++-common/Wstringop-truncation.c: Remove an xfail.
	* gcc.dg/Warray-bounds-46.c: Remove a bogus warning.
	* gcc.dg/Wrestrict-9.c: Disable -Wstringop-overflow.
	* gcc.dg/Wstringop-overflow-12.c: Remove xfails.
	* gcc.dg/Wstringop-overflow-28.c: Same.
	* gcc.dg/builtin-stringop-chk-4.c: Same.
	* gcc.dg/builtin-stringop-chk-5.c: Same.
	* gcc.dg/builtin-stringop-chk-8.c: Same.
	* gcc.dg/strlenopt-74.c: Avoid buffer overflow.
	* gcc.dg/Wstringop-overflow-34.c: New test.
	* gcc.dg/Wstringop-overflow-35.c: New test.
	* gcc.dg/Wstringop-overflow-36.c: New test.
	* gcc.dg/Wstringop-overflow-37.c: New test.
	* gcc.dg/Wstringop-overflow-38.c: New test.
2020-06-10 12:02:12 -06:00
François Dumont
3a391adf7a libstdc++: Extend memcmp optimization in std::lexicographical_compare
Make the memcmp optimization work for std::deque iterators and safe
iterators.

Co-authored-by: Jonathan Wakely  <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

2020-06-08  François Dumont  <fdumont@gcc.gnu.org>
	    Jonathan Wakely  <jwakely@redhat.com>

	* include/bits/deque.tcc (__lex_cmp_dit): New.
	(__lexicographical_compare_aux1): Define overloads for deque
	iterators.
	* include/bits/stl_algobase.h (__lexicographical_compare::__3way):
	New static member function.
	(__lexicographical_compare<true>::__3way): Likewise.
	(__lexicographical_compare<true>::__lc): Use __3way.
	(__lexicographical_compare_aux): Rename to
	__lexicographical_compare_aux1 and declare overloads for deque
	iterators.
	(__lexicographical_compare_aux): Define new forwarding function
	that calls __lexicographical_compare_aux1 and declare new overloads
	for safe iterators.
	(lexicographical_compare): Do not use __niter_base on
	parameters.
	* include/debug/safe_iterator.tcc
	(__lexicographical_compare_aux): Define overloads for safe
	iterators.
	* testsuite/25_algorithms/lexicographical_compare/1.cc: Add
	checks with random access iterators.
	* testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc:
	New test.
2020-06-10 17:48:56 +01:00
Richard Biener
371cc68337 avoid stmt-info allocation for debug stmts
The following avoids allocating stmt info structs for debug stmts.

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

	* tree-vect-loop.c (vect_determine_vectorization_factor):
	Skip debug stmts.
	(_loop_vec_info::_loop_vec_info): Likewise.
	(vect_update_vf_for_slp): Likewise.
	(vect_analyze_loop_operations): Likewise.
	(update_epilogue_loop_vinfo): Likewise.
	* tree-vect-patterns.c (vect_determine_precisions): Likewise.
	(vect_pattern_recog): Likewise.
	* tree-vect-slp.c (vect_detect_hybrid_slp): Likewise.
	(_bb_vec_info::_bb_vec_info): Likewise.
	* tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized):
	Likewise.
2020-06-10 18:08:29 +02:00
Richard Biener
36e95a9e53 tree-optimization/95576 - fix compare-debug issue with SLP vectorization
The following avoids leading debug stmts in BB vectorizer regions.

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

	PR tree-optimization/95576
	* tree-vect-slp.c (vect_slp_bb): Skip leading debug stmts.

	* g++.dg/vect/pr95576.cc: New testcase.
2020-06-10 18:06:41 +02:00
z00219097
b5cebc9ab7 aarch64: Fix an ICE in register_tuple_type [PR95523]
When registering the tuple type in register_tuple_type, the
TYPE_ALIGN (tuple_type) will be changed by -fpack-struct=n. We need to
maintain natural alignment in handle_arm_sve_h.

2020-06-10  Haijian Zhang  <z.zhanghaijian@huawei.com>

gcc/
	PR target/95523
	* config/aarch64/aarch64-sve-builtins.h
	(sve_switcher::m_old_maximum_field_alignment): New member.
	* config/aarch64/aarch64-sve-builtins.cc
	(sve_switcher::sve_switcher): Save maximum_field_alignment in
	m_old_maximum_field_alignment and clear maximum_field_alignment.
	(sve_switcher::~sve_switcher): Restore maximum_field_alignment.

gcc/testsuite/
	PR target/95523
	* gcc.target/aarch64/sve/pr95523.c: New test.
2020-06-10 16:58:51 +01:00
Arnaud Charlet
73266be246 [Ada] AI12-0364 Add a modular atomic arithmetic package
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-aomoar.ads, libgnat/s-aomoar.adb: New files.
	* libgnat/s-atopar.ads: Move...
	* libgnat/s-aoinar.ads: Here.
	* libgnat/s-atopar.adb: Move...
	* libgnat/s-aoinar.adb: Here.
	* impunit.adb: Update list of runtime files.
	* Makefile.rtl (GNATRTL_NONTASKING_OBJS=): Adjust.
2020-06-10 10:30:57 -04:00
Martin Liska
50ff02b534
gcc-changelog: fix parse_git_name_status for renames.
Renamed files are listed in the following format:

M	gcc/ada/Makefile.rtl
M	gcc/ada/impunit.adb
R097	gcc/ada/libgnat/s-atopar.adb	gcc/ada/libgnat/s-aoinar.adb
R095	gcc/ada/libgnat/s-atopar.ads	gcc/ada/libgnat/s-aoinar.ads
A	gcc/ada/libgnat/s-aomoar.adb
A	gcc/ada/libgnat/s-aomoar.ads

So 'R' is followed by a percentage number.

contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Fix renamed files in
	parse_git_name_status.
	* gcc-changelog/test_email.py: Add test for it.
2020-06-10 16:07:10 +02:00
Marek Polacek
4fed5d5dd8 c++: Fix ICE with delayed parsing of noexcept-specifier [PR95562]
Here we ICE because a DEFERRED_PARSE expression leaked to tsubst_copy.
We create these expressions for deferred noexcept-specifiers in
cp_parser_save_noexcept; they are supposed to be re-parsed in
cp_parser_late_noexcept_specifier.  In this case we never got around
to re-parsing it because the noexcept-specifier was attached to a
pointer to a function, not to a function declaration.  But we should
not have delayed the parsing here in the first place; we already
avoid delaying the parsing for alias-decls, typedefs, and friend
function declarations.  (Clang++ also doesn't delay the parsing
for pointers to function.)

gcc/cp/ChangeLog:

	PR c++/95562
	* parser.c (cp_parser_direct_declarator): Clear
	CP_PARSER_FLAGS_DELAY_NOEXCEPT if the declarator kind is not
	cdk_id.

gcc/testsuite/ChangeLog:

	PR c++/95562
	* g++.dg/cpp0x/noexcept60.C: New test.
2020-06-10 09:36:02 -04:00
Arnaud Charlet
2db262f29a [Ada] AI12-0311 New checks for language-defined units
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* snames.ads-tmpl (Name_Characters_Assertion_Check,
	Name_Containers_Assertion_Check,
	Name_Interfaces_Assertion_Check, Name_IO_Assertion_Check,
	Name_Numerics_Assertion_Check, Name_Strings_Assertion_Check,
	Name_System_Assertion_Check): New constants.
	* types.ads (Characters_Assertion_Check,
	Containers_Assertion_Check, Interfaces_Assertion_Check,
	IO_Assertion_Check, Numerics_Assertion_Check,
	Strings_Assertion_Check, System_Assertion_Check): New constants.
	(All_Checks): Update accordingly.
2020-06-10 09:35:02 -04:00
Ghjuvan Lacambre
8439cae845 [Ada] Don't build equivalent record aggregate if type has predicates
2020-06-10  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* exp_ch3.adb (Build_Equivalent_Record_Aggregate): Return Empty
	if Etype of record component has predicates.
2020-06-10 09:35:02 -04:00
Arnaud Charlet
76e0721abb [Ada] Ada 202x AI12-0192 "requires late initialization"
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* exp_ch3.adb (Build_Init_Statements): Implement the notion of
	"require late initialization".
2020-06-10 09:35:02 -04:00
Eric Botcazou
5c0c89cb16 [Ada] Add missing Sloc on new explicit dereferences
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_util.adb (Copy_And_Maybe_Dereference): Temporarily copy
	the parent node of the original tree when dereferencing.
2020-06-10 09:35:01 -04:00
Ed Schonberg
f95fb9d019 [Ada] Additional warnings on overlapping actuals of composite types
2020-06-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_warn.adb (Warn_On_Overlapping_Actuals): Add a warning when
	two actuals in a call overlap, both are composite types that may
	be passed by reference, and only one of them is writable.
2020-06-10 09:35:01 -04:00
Eric Botcazou
67a44a4c10 [Ada] Implement AI12-0162 Memberships and Unchecked_Unions
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_In): Use an expression with actions to
	insert the PE raise statement for the Unchecked_Union case.
2020-06-10 09:35:01 -04:00
Eric Botcazou
e156631a27 [Ada] Remove obsolete code in Resolve_Call
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch4.adb (Analyze_Call): Use idiomatic condition.
	* sem_res.adb (Resolve_Call): Remove obsolete code.
2020-06-10 09:35:01 -04:00
Eric Botcazou
2378f3eb81 [Ada] Insert explicit dereferences when building actual subtype
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_util.adb (Copy_And_Maybe_Dereference): New function.
	(Build_Access_Record_Constraint): Use it to copy the prefix.
	(Build_Actual_Array_Constraint): Likewise.
	(Build_Actual_Record_Constraint): Likewise.
2020-06-10 09:35:00 -04:00
Bob Duff
b9daf13c93 [Ada] Disable unwanted warnings in Assertion_Policy(Ignore) mode
2020-06-10  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_prag.adb (Invariant): Remove the pragma removing code.  It
	doesn't work to remove the pragma, because various flags are set
	during Build_Invariant_Procedure_Declaration and
	Build_Invariant_Procedure_Body that need to be set to avoid the
	spurious warnings.
	* exp_util.adb (Make_Invariant_Call): Avoid calling the
	invariant-checking procedure if the body is empty. This is an
	optimization.
2020-06-10 09:35:00 -04:00
Vasiliy Fofanov
9c62140e82 [Ada] Fix gnatmetric switches description
2020-06-10  Vasiliy Fofanov  <fofanov@adacore.com>

gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Fix gnatmetric
	switches description.
2020-06-10 09:35:00 -04:00
Arnaud Charlet
536c271ca7 [Ada] Update headers
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* repinfo-input.ads, repinfo-input.adb, repinfo.adb,
	repinfo.ads: Update header.
2020-06-10 09:34:59 -04:00
Eric Botcazou
e67df677b4 [Ada] Improve code generated for dynamic discriminated aggregate
2020-06-10  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_aggr.adb (In_Place_Assign_OK): Do not necessarily return
	false for a type with discriminants.
	(Convert_To_Assignments): Use Parent_Node and Parent_Kind more
	consistently.  In the in-place assignment case, first apply a
	discriminant check if need be, and be prepared for a rewritten
	aggregate as a result.
2020-06-10 09:34:59 -04:00
Arnaud Charlet
3aeb5ebe95 [Ada] Remove more references to ASIS
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* atree.adb, contracts.adb, debug.adb, freeze.adb,
	repinfo-input.adb, repinfo.adb, sem_attr.adb, sem_ch10.adb,
	sem_ch13.adb, sem_ch3.adb, sem_ch5.adb, sem_ch6.adb,
	sem_ch8.adb, sem_ch9.adb, sem_disp.adb, sem_eval.adb,
	sem_prag.adb: Remove more references to ASIS.
2020-06-10 09:34:59 -04:00
Arnaud Charlet
a53b03b5a7 [Ada] Fix typo in exception message
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-secsta.adb (Round_Up): Fix typo in exception
	message.
2020-06-10 09:34:59 -04:00
Piotr Trojanek
9c4b4975bb [Ada] Fix minor typo in comment of membership choice parsing
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* par-ch4.adb (P_Membership_Test): Fix typo in a grammar rule.
2020-06-10 09:34:58 -04:00
Piotr Trojanek
8ecc34842c [Ada] Revert workaround for expansion of Enum_Rep in GNATprove mode
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove
	expansion of First and Last attributes.
2020-06-10 09:34:58 -04:00
Piotr Trojanek
c64ac479d3 [Ada] Fold Enum_Rep attribute in evaluation and not in expansion
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Remove folding
	for Enum_Rep attribute.
	* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Remove
	duplicated code for folding Enum_Rep attribute.
	* sem_attr.adb (Eval_Attribute): Relax condition for folding
	Enum_Rep attribute; previously dead code is now executed when
	the attribute prefix is an enumeration literal; refine type in
	processing of Enum_Val.
2020-06-10 09:34:58 -04:00
Javier Miranda
4322f3d99b [Ada] Classwide controlled obj not dispatching
2020-06-10  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_ch3.adb (Analyze_Declarations): Adjust the machinery that
	takes care of late body overriding of initialize, adjust,
	finalize.  Remove ASIS mode code.
2020-06-10 09:34:58 -04:00
Ed Schonberg
dc419b9f8d [Ada] Ada_2020 AI12-0220: Pre/Postconditions on Access_To_Subprogram types
2020-06-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* einfo.ads (Access_Subprogram_Wrapper): New attribute of
	Subprogram_Type entities. Denotes subprogram constructed for
	Access_To_Subprogram types that include pre- and postconditions.
	* einfo.adb: Subprogram bodies for Access_Subprogram_Wrapper.
	* exp_ch6.adb (Expand_Call): An indirect call through an
	Access_To_subprogram that includes contracts is rewritten as a
	call to the corresponding Access_ ubprogram_Wrapper. Handle
	derived types that inherit contract from parent.
	* sem_prag.adb (Build_Access_Subprogram_Wrapper): Build
	subprogram declaration for subprogram that incorporates the
	contracts of an Access_To_Subprogram type declaration. Build
	corresponding body and attach it to freeze actions for type.
	* sem_util.ads, sem_util.adb (Is_Access_Subprogram_Wrapper):
	Utility that uses signature of the subprogram to determine
	whether it is a generated wrapper for an Access_To_Subprogram
	type.
2020-06-10 09:34:57 -04:00
Ghjuvan Lacambre
057548bc5f [Ada] Fix assertion failure on functions with contracts
2020-06-10  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

	* par-ch6.adb (P_Subprogram): Make sure the specification
	belongs to a procedure.
2020-06-10 09:34:57 -04:00
Piotr Trojanek
3ea9566495 [Ada] Simplify detection of static membership choices
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_ch13.adb (All_Membership_Choices_Static): Assert an AST
	property documented in sinfo.ads and simplify an excessive
	condition.
2020-06-10 09:34:57 -04:00
Piotr Trojanek
414e7520e6 [Ada] Minor fix style and typos in comments
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference): Fix a copy-paste
	mistake in comment.
	* sem_res.adb (Flag_Effectively_Volatile_Objects): Fix a type in
	the SPARK RM rule number.
	* exp_ch4.adb, sem_util.adb: Fix style in single line comments.
2020-06-10 09:34:56 -04:00
Piotr Trojanek
bbfd4f21c0 [Ada] Remove unreferenced GNATprove utility routine Get_Low_Bound
2020-06-10  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_aux.ads, sem_aux.adb (Get_Low_Bound): Remove.
2020-06-10 09:34:56 -04:00
Arnaud Charlet
640ef7149e [Ada] Remove Determine_License
2020-06-10  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* scn.adb (Determine_License): Remove.
2020-06-10 09:34:56 -04:00
Justin Squirek
948590aa28 [Ada] Incorrect accessibility checks on functions calls
2020-06-10  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* exp_ch3.adb (Expand_N_Object_Declaration): Add condition to
	handle processing of objects initialized by a call to a function
	return an anonymous access type.
	* exp_ch6.adb, exp_ch6.ads
	(Has_Unconstrained_Access_Discriminants): Moved to sem_util.adb
	(Needs_Result_Accessibility_Level): Moved to sem_util.adb
	* sem_util.adb, sem_util.ads
	(Has_Unconstrained_Access_Discriminants): Moved from exp_ch6.adb
	(Needs_Result_Accessibility_Level): Moved from exp_ch6.adb
	* sem_res.adb (Valid_Conversion): Add condition for the special
	case where the operand of a conversion is the result of an
	anonymous access type
2020-06-10 09:34:56 -04:00