Commit Graph

177554 Commits

Author SHA1 Message Date
Patrick Palka
28462a4496 c++: TI_DEFERRED_ACCESS_CHECKS and dependent decls
This adds an assert to enforce_access to verify that we don't defer
access checks of dependent decls -- we should instead be rechecking the
access of such a decl after tsubst'ing into the user of the decl.

gcc/cp/ChangeLog:

	* pt.c (perform_instantiation_time_access_checks): No need to
	tsubst into decl.
	* semantics.c (enforce_access): Verify that decl is not
	dependent.
2020-06-16 08:51:34 -04:00
Patrick Palka
668ef28fbb c++: Clean up previous change [PR41437]
The previous patch mostly avoided making any changes that had no
functional impact, such as adjusting now-outdated comments and
performing renamings.  Such changes have been consolidated to this
followup patch for easier review.

The main change here is that we now reuse struct deferred_access_check
as the element type of the vector TI_TYPEDEFS_NEEDING_ACCESS_CHECKING
(now renamed to TI_DEFERRED_ACCESS_CHECKS, since it may contain any kind
of access check).

gcc/cp/ChangeLog:

	PR c++/41437
	PR c++/47346
	* cp-tree.h (qualified_typedef_usage_s): Delete.
	(qualified_typedef_usage_t): Delete.
	(deferred_access_check): Move up in file.
	(tree_template_info::typedefs_needing_access_checking): Delete.
	(tree_template_info::deferred_access_checks): New field.
	(TI_TYPEDEFS_NEEDING_ACCESS_CHECKING): Rename to ...
	(TI_DEFERRED_ACCESS_CHECKS): ... this, and adjust accordingly.
	* pt.c (perform_typedefs_access_check): Rename to ...
	(perform_instantiation_time_access_checks): ... this, and adjust
	accordingly.  Remove unnecessary tree tests.
	(instantiate_class_template_1): Adjust accordingly.
	(instantiate_decl): Likewise.
	* semantics.c (enforce_access): Likewise.
2020-06-16 08:21:36 -04:00
Patrick Palka
92bed03609 c++: Improve access checking inside templates [PR41437]
This patch generalizes our existing functionality for deferring access
checking of typedefs when parsing a function or class template to now
defer all kinds of access checks until template instantiation time,
including member function and member object accesses.

Since all access checks eventually go through enforce_access, the main
component of this patch is new handling inside enforce_access to defer
the current access check if we're inside a template.  The bulk of the
rest of the patch consists of removing now-unneeded code pertaining to
suppressing access checks inside templates or pertaining to
typedef-specific access handling.  Renamings and other changes with no
functional impact have been split off into the followup patch.

gcc/cp/ChangeLog:

	PR c++/41437
	PR c++/47346
	* call.c (enforce_access): Move to semantics.c.
	* cp-tree.h (enforce_access): Delete.
	(get_types_needing_access_check): Delete.
	(add_typedef_to_current_template_for_access_check): Delete.
	* decl.c (make_typename_type): Adjust accordingly.  Use
	check_accessibility_of_qualified_id instead of directly using
	perform_or_defer_access_check.
	* parser.c (cp_parser_template_declaration_after_parameters):
	Don't push a dk_no_check access state when parsing a template.
	* pt.c (get_types_needing_access_check): Delete.
	(append_type_to_template_for_access_check_1): Delete.
	(perform_typedefs_access_check): Adjust.  If type_decl is a
	FIELD_DECL, also check its DECL_CONTEXT for dependence. Use
	tsubst_copy instead of tsubst to substitute into type_decl so
	that we substitute into the DECL_CONTEXT of a FIELD_DECL.
	(append_type_to_template_for_access_check): Delete.
	* search.c (accessible_p): Remove the processing_template_decl
	early exit.
	* semantics.c (enforce_access): Moved from call.c.  If we're
	parsing a template and the access check failed, add the check to
	TI_TYPEDEFS_NEEDING_ACCESS_CHECKING.
	(perform_or_defer_access_check): Adjust comment.
	(add_typedef_to_current_template_for_access_check): Delete.
	(check_accessibility_of_qualified_id):  Adjust accordingly.
	Exit early if the scope is dependent.

gcc/testsuite/ChangeLog:

	PR c++/41437
	PR c++/47346
	* g++.dg/cpp2a/concepts-using2.C: Adjust.
	* g++.dg/lto/20081219_1.C: Adjust.
	* g++.dg/lto/20091002-1_0.C: Adjust.
	* g++.dg/lto/pr65475c_0.C: Adjust.
	* g++.dg/opt/dump1.C: Adjust.
	* g++.dg/other/pr53574.C: Adjust.
	* g++.dg/template/access30.C: New test.
	* g++.dg/template/access31.C: New test.
	* g++.dg/wrappers/wrapper-around-type-pack-expansion.C: Adjust.

libstdc++-v3/ChangeLog:

	PR libstdc++/94003
	* testsuite/20_util/is_constructible/94003.cc: New test.
2020-06-16 08:21:33 -04:00
Richard Biener
a97e49a89d middle-end/95690 - avoid MEM_EXPRs for constants
The following avoids calling set_mem_attributes on the
DECL_INITIAL of a CONST_DECL which seems pointless since there
cannot be a sensible MEM_EXPR derived from that.  We're overwriting
both other possibly useful info, alias-set and alignment immediately
so the following patch simply removes the call instead of making
the function deal with even more (unexpected) trees that are not
memory accesses.

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

	PR middle-end/95690
	* varasm.c (build_constant_desc): Remove set_mem_attributes call.

	* gfortran.dg/pr95690.f90: New testcase.
2020-06-16 13:56:55 +02:00
Thomas Schwinge
2210ef7d3d Un-XFAIL 'gcc.dg/graphite/pr80906.c'
The recent commit b6ff3ddecf
"tree-optimization/94988 - enhance SM some more" fixed this.

	gcc/testsuite/
	PR tree-optimization/94988
	* gcc.dg/graphite/pr80906.c: Un-XFAIL.
2020-06-16 10:13:55 +02:00
Thomas Schwinge
b70eeb248e Further adjust 'dg-lto-options' in 'gcc.dg/lto/pr52634'
The recent commit f8a4141bae "Fix various dg
directives" corrected the imbalanced curly braces in 'dg-lto-options', which
changes the testing as follows:

    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O0 -flto -flto-partition=none -fuse-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -O2 -flto -fuse-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -O2 -flto -fuse-linker-plugin
    -PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -O2 -flto -fuse-linker-plugin
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -flto
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -flto
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -flto
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -r
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -r
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -r
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o assemble, -flto-partition=1to1
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_1.o assemble, -flto-partition=1to1
    +PASS: gcc.dg/lto/pr52634 c_lto_pr52634_0.o-c_lto_pr52634_1.o link, -flto-partition=1to1

I however assume the original idea however has not been to run variants
'-flto', '-r', '-flto-partition=1to1' individually, but rather to run one
variant '-flto -r -flto-partition=1to1'.

	gcc/testsuite/
	* gcc.dg/lto/pr52634_0.c: Further adjust 'dg-lto-options'.
2020-06-16 10:13:55 +02:00
Kito Cheng
beaf12b49a RISC-V: Fix ICE on riscv_gpr_save_operation_p [PR95683]
- riscv_gpr_save_operation_p might try to match parallel on other
   patterns like inline asm pattern, and then it might trigger ther
   assertion checking there, so we could trun it into a early exit check.

gcc/ChangeLog:

	PR target/95683
	* config/riscv/riscv.c (riscv_gpr_save_operation_p): Remove
	assertion and turn it into a early exit check.

gcc/testsuite/ChangeLog

	PR target/95683
	* gcc.target/riscv/pr95683.c: New.
2020-06-16 10:14:13 +08:00
GCC Administrator
6fb94d67f1 Daily bump. 2020-06-16 00:16:28 +00:00
Nicolas Bertolo
f8d6596c79 gcc/jit: Rename libgccjit.dll to libgccjit-0.dll.
2020-06-09  Nicolas Bértolo  <nicolasbertolo@gmail.com>

	* Make-lang.in: Always define version, minor and release
	numbers. Create the Windows shared library as
	libgccjit-$(LIBGCCJIT_VERSION_NUM).dll.
2020-06-16 00:10:31 +00:00
Tobias Klauser
882af4350b libgo: update x/sys/cpu to add all GOARCHes supported by gccgo
CL 237897 added additional GOARCHes supported by gccgo to x/sys/cpu.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/238038
2020-06-15 14:20:07 -07:00
Tobias Klauser
47ad09cb08 internal/syscall/unix: use getrandom_linux_generic.go on riscv
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/237899
2020-06-15 12:00:12 -07:00
Eric Botcazou
c7bac01ab4 Optimize assignment to volatile aggregate variable
gimplify_modify_expr_rhs has an optimization whereby the assignment to
an aggregate variable from a read-only object with a DECL_INITIAL is
optimized into the direct assignment of the DECL_INITIAL, provided that
no temporary is created in the process.

The optimization is blocked if the read-only object is volatile, which
is OK as per the semantics of volatile, but also if the target variable
is volatile, on the grounds that the modified assignment might end up
being done on a per field basis, which is also OK.  But this latter
restriction is enforced a priori and there are cases where the modified
assignment would be OK, for example if there is only one field or the
DECL_INITIAL is equivalent to the empty CONSTRUCTOR, i.e. all zeros.

So, in the latter case, the patch changes gimplify_modify_expr_rhs to ask
gimplify_init_constructor whether the assignment would be done as a block,
which is easy because gimplify_init_constructor knows that it must create
a temporary if the LHS is volatile and this would not be the case, so it's
just a matter of completing the NOTIFY_TEMP_CREATION mechanism.

gcc/ChangeLog
	* gimplify.c (gimplify_init_constructor) <AGGREGATE_TYPE>: Declare
	new ENSURE_SINGLE_ACCESS constant and move variables down.  If it is
	true and all elements are zero, then always clear.  Return GS_ERROR
	if a temporary would be created for it and NOTIFY_TEMP_CREATION set.
	(gimplify_modify_expr_rhs) <VAR_DECL>: If the target is volatile but
	the type is aggregate non-addressable, ask gimplify_init_constructor
	whether it can generate a single access to the target.

gcc/testsuite/ChangeLog
	* gnat.dg/aggr30.ads, gnat.dg/aggr30.adb: New test.
2020-06-15 19:58:31 +02:00
Eric Botcazou
fb149ebdfe Fix ICE in verify_sra_access_forest
This fixes an issue with reverse storage order in SRA, which is caught
by the built-in verifier in verify_sra_access_forest.  The problem is
that propagate_subaccesses_from_rhs changes the type of an access
from aggregate to scalar and, as discussed elsewhere, this must be
done with extra care in the presence of reverse storage order.

gcc/ChangeLog
	* tree-sra.c (propagate_subaccesses_from_rhs): When a non-scalar
	access on the LHS is replaced with a scalar access, propagate the
	TYPE_REVERSE_STORAGE_ORDER flag of the type of the original access.

gcc/testsuite/ChangeLog
	* gnat.dg/opt85.ads, gnat.dg/opt85.adb: New test.
2020-06-15 19:54:01 +02:00
Jonathan Wakely
b6ab9ecd55 libstdc++: Update value of __cpp_lib_constexpr_char_traits for C++20
Although not required by SD-6 or the C++20 draft, we define the macro
__cpp_lib_constexpr_char_traits to indicate support for P0432R1. This
updates the value in C++20 mode for the P1032R1 changes to char_traits.

	* include/bits/char_traits.h (__cpp_lib_constexpr_char_traits):
	Update value for C++20.
	* include/std/version (__cpp_lib_constexpr_char_traits): Likewise.
	* testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc:
	Update expected value.
	* testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc:
	Likewise.
2020-06-15 14:31:26 +01:00
Paul Keir
eb11134d0c libstdc++: Fix char_traits move with overlap
Upon constexpr evaluation, char_traits move uses copy_backward, but its
last argument should be to the range end rather than its beginning.

2020-06-12  Paul Keir  <paul.keir@uws.ac.uk>

	* include/bits/char_traits.h (char_traits::move): constexpr move with
	overlap was using copy_backward incorrectly.
	* testsuite/21_strings/char_traits/requirements/constexpr_functions_c++20.cc:
	New test.
2020-06-15 14:31:26 +01:00
Max Filippov
e46dad5d8f gcc: xtensa: make TARGET_HAVE_TLS definition static
Remove TARGET_THREADPTR reference from TARGET_HAVE_TLS to avoid
static data initialization dependency on xtensa core configuration.

2020-06-15  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
	* config/xtensa/xtensa.c (TARGET_HAVE_TLS): Remove
	TARGET_THREADPTR reference.
	(xtensa_tls_symbol_p, xtensa_tls_referenced_p): Use
	targetm.have_tls instead of TARGET_HAVE_TLS.
	(xtensa_option_override): Set targetm.have_tls to false in
	configurations without THREADPTR.
2020-06-15 03:36:16 -07:00
Max Filippov
8c8eb94914 gcc: xtensa: add -mabi option for call0/windowed ABI
2020-06-15  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
	* config/xtensa/elf.h (ASM_SPEC, LINK_SPEC): Pass ABI switch to
	assembler/linker.
	* config/xtensa/linux.h (ASM_SPEC, LINK_SPEC): Ditto.
	* config/xtensa/uclinux.h (ASM_SPEC, LINK_SPEC): Ditto.
	* config/xtensa/xtensa.c (xtensa_option_override): Initialize
	xtensa_windowed_abi if needed.
	* config/xtensa/xtensa.h (TARGET_WINDOWED_ABI_DEFAULT): New
	macro.
	(TARGET_WINDOWED_ABI): Redefine to xtensa_windowed_abi.
	* config/xtensa/xtensa.opt (xtensa_windowed_abi): New target
	option variable.
	(mabi=call0, mabi=windowed): New options.
	* doc/invoke.texi: Document new -mabi= Xtensa-specific options.

gcc/testsuite/
	* gcc.target/xtensa/mabi-call0.c: New test.
	* gcc.target/xtensa/mabi-windowed.c: New test.

libgcc/
	* configure: Regenerate.
	* configure.ac: Use AC_COMPILE_IFELSE instead of manual
	preprocessor invocation to check for __XTENSA_CALL0_ABI__.
2020-06-15 03:35:50 -07:00
Max Filippov
f50c32fa7a gcc: xtensa: make register elimination data static
Remove ABI reference from the ELIMINABLE_REGS to avoid static data
initialization dependency on xtensa core configuration.

2020-06-15  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
	* config/xtensa/xtensa.c (xtensa_can_eliminate): New function.
	(TARGET_CAN_ELIMINATE): New macro.
	* config/xtensa/xtensa.h
	(XTENSA_WINDOWED_HARD_FRAME_POINTER_REGNUM)
	(XTENSA_CALL0_HARD_FRAME_POINTER_REGNUM): New macros.
	(HARD_FRAME_POINTER_REGNUM): Define using
	XTENSA_*_HARD_FRAME_POINTER_REGNUM.
	(ELIMINABLE_REGS): Replace lines with HARD_FRAME_POINTER_REGNUM
	by lines with XTENSA_WINDOWED_HARD_FRAME_POINTER_REGNUM and
	XTENSA_CALL0_HARD_FRAME_POINTER_REGNUM.
2020-06-15 03:24:23 -07:00
Martin Jambor
ce5a3d6bde BRIG FE testsuite: Fix all dump-scans
since Alexandre's revamp of dump files handling in
r11-627-g1dedc12d186, BRIG FE has been receiving slightly different
-dumpbase (e.g. smoke_test.brig instead of smoke_test.hsail.brig when
compiling file smoke_test.hsail.brig) and the testsuite then could not
find the generated dump files it wanted to scan.  I have not really
looked into why that changed, the easiest fix seems to me to remove
the hsail part already when generating the binary brig file from the
textual HSAIL representation.

gcc/testsuite/ChangeLog:

2020-06-09  Martin Jambor  <mjambor@suse.cz>

	* lib/brig.exp (brig_target_compile): Strip hsail extension when
	gnerating the name of the binary brig file.
2020-06-15 11:45:24 +02:00
Fei Yang
8df82de27b vect: Use LOOP_VINFO_DATAREFS and LOOP_VINFO_DDRS consistently
Minor code refactorings in tree-vect-data-refs.c and tree-vect-loop.c.
Use LOOP_VINFO_DATAREFS and LOOP_VINFO_DDRS when possible and rename
several parameters to make code more consistent.

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

gcc/
	* tree-vect-data-refs.c (vect_verify_datarefs_alignment): Rename
	parameter to loop_vinfo and update uses.  Use LOOP_VINFO_DATAREFS
	when possible.
	(vect_analyze_data_refs_alignment): Likewise, and use LOOP_VINFO_DDRS
	when possible.
	* tree-vect-loop.c (vect_dissolve_slp_only_groups): Use
	LOOP_VINFO_DATAREFS when possible.
	(update_epilogue_loop_vinfo): Likewise.
2020-06-15 11:10:58 +02:00
Eric Botcazou
4331490bc0 [Ada] Rewrite Sem_Eval.Predicates_Match predicate
2020-06-15  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_eval.ads (Predicates_Match): Fix description.
	* sem_eval.adb (Predicates_Match): Rewrite.
2020-06-15 04:04:43 -04:00
Ed Falis
e808ee00fb [Ada] Makefile.rtl: minor file renamings
2020-06-15  Ed Falis  <falis@adacore.com>

gcc/ada/

	* Makefile.rtl: Change name of hie/g-io__vxworks-ppc-cert.adb.
2020-06-15 04:04:42 -04:00
Arnaud Charlet
c7df4e55c9 [Ada] Improve error message on premature usage of subtypes
2020-06-15  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_ch8.adb (Premature_Usage): Add support for subtype
	references and replace set of if-then-else by a case statement.
2020-06-15 04:04:41 -04:00
Piotr Trojanek
65e0889266 [Ada] Do expect task discriminants in Global and Depends contracts
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_prag.adb (Analyze_Depends_In_Decl_Part,
	Analyze_Global_In_Decl_Part): Bring back task discriminants for
	analysis of the Global/Depends contracts; add comments.
2020-06-15 04:04:40 -04:00
Eric Botcazou
c5a913d3fd [Ada] Implement AI12-0343 Return Statement Checks
2020-06-15  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* einfo.ads (Return_Applies_To): Document special usage for E_Block.
	* einfo.adb (Write_Field8_Name): Write it for E_Block too.
	* exp_ch4.adb (Expand_N_Type_Conversion): Remove implementation of
	the check prescribed by AI05-0073.
	* exp_ch6.adb (Apply_CW_Accessibility_Check): New procedure to apply
	the check prescribed by AI95-344 extracted from...
	(Expand_N_Extended_Return_Statement): Apply the check prescribed by
	AI95-344 to the expression, if present.  Suppress only access checks
	when analyzing the rewritten result.
	(Expand_Simple_Function_Return): ...here.  Rename local variable.
	Call Apply_CW_Accessibility_Check to apply the check prescribed by
	AI95-344, but do not do it for the simple return statement generated
	by the expansion of an extended return statement.  Apply the check
	prescribed by AI05-0073 to all functions returning anonymous access
	type designating a specific tagged type, but not if the expression
	was null or tag checks are suppressed for the type, and use Not In
	operator rather than comparing the tags explicitly.
	* sem.adb (Analyze): Handle all Suppress values.
	* sem_ch6.adb (Analyze_Function_Return): Do not explicitly apply
	predicate checks in the case of an extended return statement.
	Do not apply an implicit conversion to the anonymous access result
	type in the case of the simple return statement generated by the
	expansion of an extended return statement.
	(New_Overloaded_Entity): Small comment tweak.
	* treepr.adb (Print_Node): Fix typo in flag string.
2020-06-15 04:04:39 -04:00
Bob Duff
acc20d256c [Ada] T'Image calls T'Put_Image
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_put_image.ads, exp_put_image.adb
	(Image_Should_Call_Put_Image): New function to determine whether
	the call to Put_Image should be generated.
	(Build_Image_Call): New procedure to generate the call to
	Put_Image.
	* exp_imgv.adb (Expand_Image_Attribute): Use underlying types to
	bypass privacy (only in Ada 2020). If
	Image_Should_Call_Put_Image is True (which happens only in Ada
	2020), then call Build_Image_Call.
	* rtsfind.ads, rtsfind.adb: Add the necessary declarations in
	Ada.Strings.Text_Output.Buffers.
	* sem_attr.adb (Check_Image_Type): Enable the Ada 2020 case.
	* libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Use the less
	restrictive type that allows newline characters.
2020-06-15 04:04:38 -04:00
Gary Dismukes
2b20de3abd [Ada] Minor editorial changes in comments
2020-06-15  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* exp_ch9.ads (Build_Master_Declaration): Add commas.
	* exp_ch9.adb (Build_Master_Entity): Spelling fix ("build" =>
	"built").
	(Build_Task_Activation_Call): Fix word order.
2020-06-15 04:04:38 -04:00
Arnaud Charlet
b85120adba [Ada] Allow uninitialized values on Big_Positive/Natural
2020-06-15  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/a-nbnbin.ads (Big_Positive, Big_Natural): Fix
	predicate.
2020-06-15 04:04:37 -04:00
Piotr Trojanek
63e96d4421 [Ada] Fix analysis of Relaxed_Initialization for bodies-as-specs
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Fix
	dealing with scopes on subprogram bodies that act as specs.
	* sem_util.adb (Has_Relaxed_Initialization): Fix trivial
	mistake.
2020-06-15 04:04:36 -04:00
Javier Miranda
a7837c085a [Ada] Crash in tagged type constructor with task components
2020-06-15  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* restrict.ads (Set_Global_No_Tasking, Global_No_Tasking): New
	subprograms.
	* restrict.adb (Set_Global_No_Tasking, Global_No_Tasking): New
	subprograms.
	* sem_ch3.adb (Access_Definition): Do not skip building masters
	since they may be required for BIP calls.
	(Analyze_Subtype_Declaration): Propagate attribute
	Is_Limited_Record in class-wide subtypes and subtypes with
	cloned subtype attribute; propagate attribute
	Is_Limited_Interface.
	* sem_ch6.adb (Check_Anonymous_Return): Do not skip building
	masters since they may be required for BIP calls. Use
	Build_Master_Declaration to declare the _master variable.
	(Create_Extra_Formals): Add decoration of Has_Master_Entity when
	the _master formal is added.
	* exp_ch3.adb (Init_Formals): Adding formal to decorate it with
	attribute Has_Master_Entity when the _master formal is added.
	(Build_Master): Do not skip building masters since they may be
	required for BIP calls.
	(Expand_N_Object_Declaration): Ensure activation chain and
	master entity for objects initialized with BIP function calls.
	* sem_prag.adb (Process_Restrictions_Or_Restriction_Warnings):
	Adding support to detect and save restriction No_Tasking when
	set in the run-time package System or in a global configuration
	pragmas file.
	* sem_util.adb (Current_Entity_In_Scope): Overload this
	subprogram to allow searching for an entity by its Name.
	* sem_util.ads (Current_Entity_In_Scope): Update comment.
	* exp_ch4.adb (Expand_N_Allocator): Do not skip building masters
	since they may be required for BIP calls.
	* exp_ch6.ads (Might_Have_Tasks): New subprogram.
	* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Add
	support for BIP calls returning objects that may have tasks.
	(Make_Build_In_Place_Call_In_Allocator): Build the activation
	chain if the result might have tasks.
	(Make_Build_In_Place_Iface_Call_In_Allocator): Build the class
	wide master for the result type.
	(Might_Have_Tasks): New subprogram.
	(Needs_BIP_Task_Actuals): Returns False when restriction
	No_Tasking is globally set.
	* exp_ch9.ads (Build_Master_Declaration): New subprogram.
	* exp_ch9.adb (Build_Activation_Chain_Entity): No action
	performed when restriction No_Tasking is globally set.
	(Build_Class_Wide_Master): No action performed when restriction
	No_Tasking is globally set; use Build_Master_Declaration to
	declare the _master variable.
	(Build_Master_Declaration): New subprogram.
	(Build_Master_Entity): No action performed when restriction
	No_Tasking is globally set; added support to handle transient
	scopes and _finalizer routines.
	(Build_Master_Renaming): No action performed when restriction
	No_Tasking is globally set.
	(Build_Task_Activation_Call): Skip generating the call when
	the chain is an ignored ghost entity.
	(Find_Master_Scope): Generalize the code that detects transient
	scopes with master entity.
	* einfo.ads (Has_Nested_Subprogram): Minor comment reformatting.
2020-06-15 04:04:35 -04:00
Arnaud Charlet
98376aab03 [Ada] Missing errors on aspect checking
2020-06-15  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* sem_attr.adb (Eval_Attribute): Protect against previous
	errors.
	* sem_ch13.adb (Analyze_Aspect_Default_Value): Remove redundant
	error checking, handling in Analyze_Aspect_Specifications.
	(Analyze_Aspect_Specifications): Refine error messages on
	Default_[Component_]Value.
	(Check_Aspect_Too_Late): New procedure.
	(Rep_Item_Too_Late.Is_Derived_Type_With_Constraint): Remove,
	dead code.
	* aspects.ads (Is_Representation_Aspect): Default_Value is a
	representation aspect.
2020-06-15 04:04:34 -04:00
Arnaud Charlet
3830018cc6 [Ada] AI12-0260 Functions Is_Basic and To_Basic in Wide_Characters.Handling
2020-06-15  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/a-wichha.ads, libgnat/a-wichha.adb,
	libgnat/a-wichun.ads, libgnat/a-wichun.adb (Is_Basic, To_Basic):
	New.
	* libgnat/s-utf_32.ads, libgnat/s-utf_32.adb (Is_UTF_32_Basic,
	To_UTF_32_Basic, Decomposition_Search): New subprograms.
	(Unicode_Decomposition): New table.
2020-06-15 04:04:33 -04:00
Gary Dismukes
c873714ff0 [Ada] Passing actual parameter values to out formals when Default_Value is set
2020-06-15  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* exp_ch6.adb (Add_Call_By_Copy_Code): In the case of a view
	conversion passed to a scalar out-mode parameter where the
	formal has Default_Value set, declare the copy temp with the
	base type of the formal's subtype and initialize the copy temp
	with the actual's value.
2020-06-15 04:04:32 -04:00
Justin Squirek
773e99ac3e [Ada] Bad access checks on if/case expression as actual
2020-06-15  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_Case_Expression): Set default value for
	Target to silence potential warnings.
	(Expand_N_If_Expression): Add calculation to check when the if
	expression is used directly in the context of an actual of an
	anonymous access type and add a special path to force expansion
	of the if expression in this case.
	* exp_ch6.adb (Expand_Branch): Generate an assignment to the
	level temporary for a given branch.
	(Expand_Call_Helper): Add expansion to allow for creating a
	temporary to store associated accessiblity levels on each branch
	of the conditional expression.  Also perform expansion of
	function calls into expressions with actions, and fixup
	references to N with Call_Node.
	(Insert_Level_Assign): Move through nested conditional
	expressions to each branch.
	* sem_util.ads, sem_util.adb (Is_Anonymous_Access_Actual): Added
	to detect when to force expansion of if expressions.
2020-06-15 04:04:31 -04:00
Piotr Trojanek
fdcbc0764d [Ada] Do not expect task discriminants in Global and Depends contracts
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_prag.adb (Analyze_Depends_In_Decl_Part,
	Analyze_Global_In_Decl_Part): Do not install task discriminants
	for analysis of the Global/Depends contracts.
2020-06-15 04:04:30 -04:00
Piotr Trojanek
0acc5ebd5c [Ada] Do not expect Global or Depends on single protected objects
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* contracts.adb (Analyze_Object_Contract): Do not expect
	Global/Depends on single protected units.
2020-06-15 04:04:29 -04:00
Justin Squirek
f142237e2f [Ada] Incorrect accessibility checks on functions calls
2020-06-15  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_res.adb (Valid_Conversion): Add missing condition to
	trigger proper static accessiblity failiures when the target
	type is an anonymous access.
2020-06-15 04:04:29 -04:00
Piotr Trojanek
50188982c8 [Ada] Replace repeated Ekind with Ekind_In
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_ch6.adb (Expand_Call_Helper): Replace repeated Ekind with
	Ekind_In.
2020-06-15 04:04:28 -04:00
Piotr Trojanek
7a1d54fa61 [Ada] Remove excessive parens
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_ch6.adb, sem_util.adb: Remove excessive parents,
	especially since they don't make the code any easier to read.
2020-06-15 04:04:27 -04:00
Piotr Trojanek
e577151d02 [Ada] Support aspect Relaxed_Initialization and attribute Initialized
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* aspects.ads (Aspect_Id): Add Aspect_Relaxed_Initialization.
	(Implementation_Defined_Aspect): Add new aspect.
	(Aspect_Argument): Add new aspect with Optional_Expression
	argument.
	(Is_Representation_Aspect): Add new aspect as a
	non-representation one.
	(Aspect_Names): Add name for the new aspect.
	(Aspect_Delay): Add new aspect as a non-delayed one.
	* sem_ch3.adb: Minor reformatting.
	* einfo.ads, einfo.adb (Is_Relaxed_Initialization_State): New
	query; reuses existing code for querying abstract state options.
	* exp_attr.adb (Expand_N_Attribute_Reference): For now ignore
	attribute 'Initialized.
	* sem_attr.adb (Analyze_Attribute_Old_Result): Allow attribute
	'Result to be used in the aspect Relaxed_Initialization
	expression.
	(Analyze_Attribute): Analyze attribute 'Initialized; based on
	existing code for attribute 'Valid_Scalars.
	(Eval_Attribute): Do not expect attribute 'Initialized, just
	like attribute 'Valid_Scalars is not expected.
	* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): New
	routine.
	(Analyze_Aspect_Specifications): Analyze new aspect in a
	dedicated routine.
	(Check_Aspect_At_Freeze_Point): Do not expect new aspect.
	* sem_prag.adb (Analyze_Abstract_State): Support option
	Relaxed_Initialization on abstract states.
	* sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): New
	query for the GNATprove backend.
	* snames.ads-tmpl (Snames): Add Name_Ids for the new aspect and
	attribute; add an Attribute_Id for the new attribute.
2020-06-15 04:04:26 -04:00
Bob Duff
6a920eb510 [Ada] Put_Image: Enable for access-to-subprogram types
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_put_image.adb, libgnat/s-putima.adb, libgnat/s-putima.ads,
	rtsfind.ads: Enable Put_Image if Is_Access_Subprogram_Type (Typ).
	Remove comment saying it's disabled in that case.  Rename
	Put_Image_Access_Prot to be Put_Image_Access_Prot_Subp to
	clarify that we're talking about access-to-subprogram, not
	access-to-protected-object.
2020-06-15 04:04:25 -04:00
Bob Duff
6349cf36d8 [Ada] Clean up error handling of 'Image
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_attr.adb (Check_Image_Type): New procedure for checking
	the type, depending on language version. Disable the Ada 2020
	support until the corresponding expander work is done.
	(Analyze_Image_Attribute): Call Check_Image_Type.  Rearrange the
	code to be simplier and more logical.  When P_Type is modified,
	modify P_Base_Type accordingly.
	* sem_util.adb (Is_Object_Image): Do not return False if the
	prefix is a type. X'Image should be considered an image of an
	object iff X is an object (albeit illegal pre-2020 if
	nonscalar).
2020-06-15 04:04:24 -04:00
Bob Duff
bfdb362c00 [Ada] Put_Image: Enable for access-to-subprogram types
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* libgnat/s-putima.ads, libgnat/s-putima.adb
	(Put_Image_Access_Subp, Put_Image_Access_Prot): New procedures
	for printing access-to-subprogram objects.  Remove an explicit
	" ", because Put_Image includes the annoying leading blank.
	* rtsfind.ads: Add new procedures in s-putima.
	* exp_put_image.adb: Call new procedures as appropriate.
2020-06-15 04:04:23 -04:00
Bob Duff
3dd1cc4a05 [Ada] Put_Image: Implement for private types with full real type
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_imgv.adb (Expand_Image_Attribute): Allow private types.
	Put_Image generates Image for numeric types, and private types
	whose full type is numeric. This requires the Conversion_OK flag
	for integer and floating-point types. For fixed point, we need
	the extra conversion.
	* exp_put_image.adb (Build_Elementary_Put_Image_Call): Remove
	special handling of real types.
	(Enable_Put_Image): Enable for reals.
2020-06-15 04:04:22 -04:00
Bob Duff
eb72521915 [Ada] Put_Image improvements for strings
2020-06-15  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_attr.adb (Put_Image): Use underlying type for strings.
	Remove unchecked union processing.
	* exp_put_image.adb (Tagged_Put_Image_Enabled): Use -gnatd_z to
	enable default Put_Image for tagged types.  This allows testing
	that feature.
	(Build_String_Put_Image_Call): Set Conversion_OK flag.
	(Make_Component_List_Attributes): Remove unchecked union
	processing.
	(Enable_Put_Image): Disable for unchecked unions.  Enable for
	nonscalar types (which were mistakenly disabled in earlier
	changes).
	* debug.adb: Document -gnatd_z switch.
	* libgnat/s-putima.adb (Put_Image_String, Put_Image_Wide_String,
	Put_Image_Wide_Wide_String): Double double-quote characters.
	Forget about special handling of control characters for now --
	that's rare enough to not be a priority, and it's not clear what
	the right thing to do is anyway.
	* namet.adb: Minor: Improve debugger-friendliness.
	* sinfo.ads: Minor: Add "???" comment.
2020-06-15 04:04:21 -04:00
Piotr Trojanek
6c04efdd9c [Ada] Remove unreferenced and dubious Is_Renaming_Declaration
2020-06-15  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* sem_util.ads, sem_util.adb (Is_Renaming_Declaration): Remove.
2020-06-15 04:04:21 -04:00
Ed Schonberg
9aa63bdded [Ada] Link failure with call to expression function in precondition
2020-06-15  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* freeze.adb (Freeze_Expression): When traversing the tree
	looking for the proper insertion point for the freeze node of an
	entity that is declared in an outer scope, set the candidate
	subprogram body node properly.  Previous code has an off-by-one
	error.
2020-06-15 04:04:20 -04:00
Eric Botcazou
36cf595c0b [Ada] Implement AI12-0077 Has_Same_Storage on objects of size zero
2020-06-15  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference) <Has_Same_Storage>:
	Do not do superfluous work.  Add the condition (X'Size /= 0) on
	both paths and turn binary AND into short-circuit AND THEN.
2020-06-15 04:04:19 -04:00
Steve Baird
1fab710d06 [Ada] Update 'Loop_Entry checking to match changes in 'Old rules.
2020-06-15  Steve Baird  <baird@adacore.com>

gcc/ada/

	* sem_attr.adb (Analyze_Attribute): In the Loop_Entry case,
	replace a call to Statically_Denotes_Object with a call to
	Statically_Names_Object and clean up the preceding comment.
2020-06-15 04:04:18 -04:00
Eric Botcazou
ba62193179 [Ada] Use uniform type resolution for membership tests
2020-06-15  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_res.adb (Resolve_Set_Membership): Remove local variable.
	In the non-overloaded case, call Intersect_Types on the left
	operand and the first alternative to get the resolution type.
	But test the subtype of the left operand to give the warning.
2020-06-15 04:04:17 -04:00