193053 Commits

Author SHA1 Message Date
Jason Merrill
4dc86f716f c++: fix arm-eabi bootstrap [PR105567]
Since my r13-112, in the template we were changing 'return' to 'return this'
on cdtor_returns_this targets, and then getting confused by that when
instantiating.  So only make that change at instantiation time.

	PR bootstrap/105567

gcc/cp/ChangeLog:

	* typeck.cc (check_return_expr): Don't mess with ctor return value
	while parsing a template.

gcc/testsuite/ChangeLog:

	* g++.dg/template/ctor10.C: New test.
2022-05-11 13:50:39 -04:00
Harald Anlauf
0acdbe29f6 Fortran: fix error recovery on invalid array section
gcc/fortran/ChangeLog:

	PR fortran/105230
	* expr.cc (find_array_section): Correct logic to avoid NULL
	pointer dereference on invalid array section.

gcc/testsuite/ChangeLog:

	PR fortran/105230
	* gfortran.dg/pr105230.f90: New test.

Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
2022-05-11 19:13:17 +02:00
Segher Boessenkool
5b2a24ebfc rs6000: Remove <Fv>
The <Fv> mode iterator always expands to "wa".

2022-05-11  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.md: Use wa instead of <Fv>.
2022-05-11 14:59:09 +00:00
Segher Boessenkool
0aca4aa8c9 rs6000: Remove <Ff>
The <Ff> mode iterator can just use "d" always.

2022-05-11  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.md: Use d instead of <Ff>.
2022-05-11 14:59:08 +00:00
Segher Boessenkool
401abb8f64 rs6000: Delete RS6000_CONSTRAINT_f
Constraint "f" is always exactly the same as constraint "d", so we do
not need RS6000_CONSTRAINT_f.

2022-05-11  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/constraints.md (register_constraint "f"): Use
	RS6000_CONSTRAINT_d.
	* config/rs6000/rs6000.cc (rs6000_debug_reg_global): Do not handle
	RS6000_CONSTRAINT_f.
	(rs6000_init_hard_regno_mode_ok): Ditto.  Reorder and simplify a bit.
	* config/rs6000/rs6000.h (r6000_reg_class_enum): Delete
	RS6000_CONSTRAINT_d.
2022-05-11 14:59:08 +00:00
Richard Biener
684c97dd08 Use variadic template functions for the gimple_build forwarders
The following consolidates the forwarders to gimple_build with
UNKNOWN_LOCATION by using two variadic template functions.  This
makes the code visually less disturbing and is in preparation
of adding more forwarders with different stmt insertion schemes.

2022-05-11  Richard Biener  <rguenther@suse.de>

	* gimple-fold.h (gimple_build): Use variadic template
	functions for the gimple_build API forwarders without
	location_t argument.
2022-05-11 15:44:31 +02:00
Siddhesh Poyarekar
546c6210eb middle-end/70090: Register __bdos for sanitizers if necessary
The asan initializer registers __builtin_object_size for languages that
don't have it, e.g. Fortran.  Register __builtin_dynamic_object_size too
(we need both because __builtin_dynamic_object_size computation may
involve generating __builtin_object_size as a fallback) so that
gfortran.dg/ubsan/bind-c-intent-out-2.f90 does not crash anymore.

gcc/ChangeLog:

	PR middle-end/70090
	* asan.cc (initialize_sanitizer_builtins): Register
	__builtin_dynamic_object_size if necessary.

Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2022-05-11 19:13:09 +05:30
Nathan Sidwell
a92ed39c41 [c++] Add module attachment
This adds module attachment as a distinct flag to 'in module purview'.
A declaration may have neither or both (as before), but can also have
just the 'in [named-module] purview', which was previously not
representable.

This new state allows some cleanup of redeclarations (particularly the
builtins), which was a little warty.  Some other internal APIs get
similarly clarified.

	gcc/cp/
	* cp-tree.h (DECL_MODULE_ATTACH_P): New.
	(struct lang_decl_base): Add module_attach_p flag.
	* decl.cc (duplicate_decls): Rework module redeclaration
	checking.
	* module.cc (trees_out::lang_decl_bools): Write attach flag.
	(trees_in::lang_decl_bools): ... and read it back.
	(trees_out::decl_value): Rework module attachment handling.
	(trees_in::decl_value): Rename local var to reflect meaning.
	(trees_in::key_mergeable): Likewise.
	(get_originating_module): Use DECL_MODULE_ATTACH_P.  No need
	to special-case mangling.
	(module_may_redeclare): Reimplement.
	(set_originating_module): Deal with attachment.
	* name-lookup.cc (maybe_record_mergeable_decl): Deal with
	attachment.
	(mergeable_namespace_slots): Likewise.
	(do_nonmember_using_decl): Likewise.
	* name-lookup.h (mergeable_namespace_slots): Adjust parm
	meaning.
	* ptree.cc (cxx_print_decl): Adjust purview & attach printing.
2022-05-11 06:38:19 -07:00
Richard Biener
37a8220fa9 rtl-optimization/105559 - avoid quadratic behavior in delete_insn_and_edges
When the insn to delete is a debug insn there's no point in figuring
out whether it might be the last real insn and thus we have to purge
dead edges.

2022-05-11  Richard Biener  <rguenther@suse.de>

	PR rtl-optimization/105559
	* cfgrtl.cc (delete_insn_and_edges): Only perform search to BB_END
	for non-debug insns.
2022-05-11 14:34:30 +02:00
Richard Biener
7f04b0d786 Implement some of fold_binary_op_with_conditional_arg in match.pd
The following allows (c != 0 ? 0 : 100) != 0 to be simplified as
c != 0 as fold_binary_op_with_conditional_arg would have done
via forwprop and GENERIC folding.  Likewise it allows to combine
(a != 0) != 0 directly via match.pd instead of only via
forwprop and again fold_binary_op_with_conditional_arg.

The patterns do not fully implement all cases of
fold_binary_op_with_conditional_arg, some aspects like
"any of the operands simplify" cannot currently be expressed.

2022-05-11  Richard Biener  <rguenther@suse.de>

	* generic-match-head.cc: Include tree-eh.h.
	* match.pd ((cond ...) cmp X): New simplification inspired
	by fold_binary_op_with_conditional_arg.
	(eq/ne (cmp ...) true/false): Likewise.

	* gcc.dg/tree-ssa/pr61839_1.c: Adjust.
	* gcc.dg/tree-ssa/vrp24.c: Likewise.
2022-05-11 14:34:30 +02:00
Thomas Schwinge
876ac21b7e libgomp: Remove unused '--with-hsa-runtime', '--with-hsa-runtime-include', '--with-hsa-runtime-lib'
With recent commit 2e309a4eff80e55b53d32d26926a2a94eabfea21 "libgomp testsuite:
Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library",
and commit d6adba307508c75f1ccb2121eb1a43c9ab1d4056 "libgomp GCN plugin:
 Clean up unused references to system-provided HSA Runtime library", the last
uses of '--with-hsa-runtime' etc. are gone.

	gcc/
	* doc/install.texi: Don't document '--with-hsa-runtime',
	'--with-hsa-runtime-include', '--with-hsa-runtime-lib'.
	libgomp/
	* plugin/configfrag.ac: Remove '--with-hsa-runtime',
	'--with-hsa-runtime-include', '--with-hsa-runtime-lib' processing.
	* Makefile.in: Regenerate.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.
2022-05-11 14:27:42 +02:00
Thomas Schwinge
91a6dcd149 libgomp GCN plugin: Clean up always-empty 'PLUGIN_GCN_CPPFLAGS', 'PLUGIN_GCN_LDFLAGS'
After recent commit d6adba307508c75f1ccb2121eb1a43c9ab1d4056
"libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime
library", these aren't set anymore.

	libgomp/
	* plugin/Makefrag.am (libgomp_plugin_gcn_la_CPPFLAGS): Don't
	consider 'PLUGIN_GCN_CPPFLAGS'.
	(libgomp_plugin_gcn_la_LDFLAGS): Don't consider
	'PLUGIN_GCN_LDFLAGS'.
	* plugin/configfrag.ac (PLUGIN_GCN_CPPFLAGS, PLUGIN_GCN_LDFLAGS):
	Remove.
	* Makefile.in: Regenerate.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.
2022-05-11 14:25:58 +02:00
Thomas Schwinge
d6adba3075 libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime library
This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or
'--with-hsa-runtime-include=[...]', '--with-hsa-runtime-lib=[...]' -- which
nobody really is doing, as far as I can tell.

Originally changed for the libgomp HSA plugin in
commit b8d89b03db5f212919e4571671ebb4f5f8b1e19d (r242749)
"Remove build dependence on HSA run-time", and later propagated into the GCN
plugin, these are no longer built against system-provided HSA Runtime library.
Instead, unconditionally built against the GCC-shipped 'include/hsa*.h' header
files, and at run time does 'dlopen("libhsa-runtime64.so.1")'.  It thus doesn't
make sense to consider references to system-provided HSA Runtime library during
libgomp GCN plugin build.

	libgomp/
	* plugin/configfrag.ac (HSA_RUNTIME_CPPFLAGS)
	(HSA_RUNTIME_LDFLAGS): Remove.
	* configure: Regenerate.
2022-05-11 14:24:55 +02:00
Thomas Schwinge
2e309a4eff libgomp testsuite: Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library
This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or
'--with-hsa-runtime-lib=[...]' -- which nobody really is doing, as far as I can
tell.

'libgomp/testsuite/lib/libgomp.exp:libgomp_init' states:

    # For build-tree testing, also consider the library paths used for builing.
    # For installed testing, we assume all that to be provided in the sysroot.
    if { $blddir != "" } {
        [...]
        global hsa_runtime_lib
        if { $hsa_runtime_lib != "" } {
            append always_ld_library_path ":$hsa_runtime_lib"
        }
    }

However, the libgomp GCN plugin is unconditionally built against the
GCC-shipped 'include/hsa*.h' header files, and at run time does
'dlopen("libhsa-runtime64.so.1")', so there is no system-provided HSA Runtime
library "used for builing".  It thus doesn't make sense to amend
'LD_LIBRARY_PATH' for system-provided HSA Runtime library.

	libgomp/
	* testsuite/lib/libgomp.exp (libgomp_init): Don't
	'append always_ld_library_path ":$hsa_runtime_lib"'.
	* testsuite/libgomp-test-support.exp.in (hsa_runtime_lib): Don't set.
2022-05-11 14:24:21 +02:00
Martin Liska
8fa689767a docs: document --with-zstd
PR other/105527

gcc/ChangeLog:

	* doc/install.texi: Document the configure option --with-zstd.
2022-05-11 14:02:18 +02:00
Martin Liska
ef14bba0a6 i386: simplify cpu_feature handling
The patch removes unneeded loops for cpu_features2 and CONVERT_EXPR
that can be simplified with NOP_EXPR.

gcc/ChangeLog:

	* common/config/i386/cpuinfo.h (has_cpu_feature): Directly
	compute index in cpu_features2.
	(set_cpu_feature): Likewise.
	* config/i386/i386-builtins.cc (fold_builtin_cpu): Also remove
	loop for cpu_features2 and use NOP_EXPRs.
2022-05-11 11:03:18 +02:00
Yannick Moy
b0fd3e3120 [Ada] Proof of 'Image support for unsigned integers
Prove System.Image_U, making the connection with the space available in
the string as computed with System.Width_U and the functions that
support the other direction of 'Value in System.Value_U.

The units that support 'Image cannot be marked Pure anymore, as they now
depend on non-pure units.

gcc/ada/

	* libgnat/s-imaged.ads: Remove Pure.
	* libgnat/s-imagef.ads: Remove Pure.
	* libgnat/s-imager.ads: Remove Pure.
	* libgnat/s-imageu.adb: Add ghost code.
	* libgnat/s-imageu.ads: Add contracts.
	* libgnat/s-imde128.ads: Remove Pure.
	* libgnat/s-imde32.ads: Remove Pure.
	* libgnat/s-imde64.ads: Remove Pure.
	* libgnat/s-imfi128.ads: Remove Pure.
	* libgnat/s-imfi32.ads: Remove Pure.
	* libgnat/s-imfi64.ads: Remove Pure.
	* libgnat/s-imgflt.ads: Remove Pure.
	* libgnat/s-imglfl.ads: Remove Pure.
	* libgnat/s-imgllf.ads: Remove Pure.
	* libgnat/s-imglllu.ads: Instantiate with ghost subprograms.
	* libgnat/s-imgllu.ads: Instantiate with ghost subprograms.
	* libgnat/s-imgrea.ads: Remove Pure.
	* libgnat/s-imguns.ads: Instantiate with ghost subprograms.
	* libgnat/s-imguti.ads: Remove Pure.
	* libgnat/s-valueu.adb (Prove_Iter_Scan_Based_Number_Ghost,
	Prove_Scan_Only_Decimal_Ghost): New lemmas.
	* libgnat/s-valueu.ads (Uns_Option): Do not make type ghost to
	be able to use it as formal in instantiations.
	(Only_Decimal_Ghost): New ghost query.
	(Prove_Iter_Scan_Based_Number_Ghost,
	Prove_Scan_Only_Decimal_Ghost): New lemmas.
	* libgnat/s-widlllu.ads: Adapt to changes in Width_U.
	* libgnat/s-widllu.ads: Adapt to changes in Width_U.
	* libgnat/s-widthu.adb: Change generic function in generic
	package in order to complete the postcondition. Tighten the
	upper bound on the result by 1.
	* libgnat/s-widthu.ads: Same.
	* libgnat/s-widuns.ads: Adapt to changes in Width_U.
	* gcc-interface/Make-lang.in: Add dependencies on a-nubinu,
	a-numeri.ads and a-widuns.ads.
2022-05-11 08:53:22 +00:00
Piotr Trojanek
48a2e84929 [Ada] Sort Detect_Blocking alphabetically among names and pragmas
In GNAT User's Guide section about configuration pragmas the
Detect_Blocking has been recently moved to an alphabetic order.  This
patch moves the its Name_Id and Pragma_Is in the source code to match
this order.

gcc/ada/

	* snames.ads-tmpl (Detect_Blocking): Move after
	Default_Storage_Pool.
2022-05-11 08:53:22 +00:00
Piotr Trojanek
046c166f3c [Ada] Fix Compile_Time_(Error|Warning) as non-configuration pragmas
Uses of Compile_Time_Error and Compile_Time_Warning as configuration
pragmas were detected with a custom check in semantic analysis. Now they
are detected with an existing general check in parser.

gcc/ada/

	* sem_prag.adb (Analyze_Pragma): Remove custom check for
	Compile_Time_Error and Compile_Time_Warning pragmas.
	* snames.ads-tmpl (Compile_Time_Error, Compile_Time_Warning):
	Move beyond Last_Configuration_Pragma_Name.
2022-05-11 08:53:21 +00:00
Marc Poulhiès
fe664d3650 [Ada] Correctly reject record aggregate using brackets
Ada 2022 bracket syntax is only allowed for arrays and containers, not
records. This change correctly rejects record aggregates using brackets
along with few cases of brackets being used instead of parentheses.

gcc/ada/

	* libgnat/a-direct.adb (Start_Search_Internal): Use parentheses
	for record aggregate.
	* libgnat/a-stbubo.adb (Get_UTF_8): Likewise.
	* libgnat/a-stbuun.adb (Get_UTF_8): Likewise.
	* libgnat/a-stzbou.ads (Null_Bounded_Wide_Wide_String):
	Likewise.
	* libgnat/a-swmwco.ads (Lower_Case_Mapping, Basic_Mapping):
	Likewise.
	* libgnat/a-szmzco.ads (Lower_Case_Mapping, Basic_Mapping):
	Likewise.
	* libgnat/s-statxd.adb (Fields): Likewise.
	* libgnat/s-stausa.adb (Initialize): Likewise.
	* sem_aggr.adb (Resolve_Record_Aggregate): Reject aggregates
	using brackets.
2022-05-11 08:53:21 +00:00
Piotr Trojanek
e79b45ef0a [Ada] Fix unbalanced paren in documentation marker for GNAT Studio
Unbalanced parens can be found when editing in emacs using the
"check-parens" command. Offending occurrences must be examined manually,
because few of them are intentional.

Minor cleanup of typos in documentation.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst,
	doc/gnat_rm/implementation_of_specific_ada_features.rst,
	doc/gnat_rm/representation_clauses_and_pragmas.rst,
	doc/gnat_rm/the_gnat_library.rst,
	doc/gnat_rm/the_implementation_of_standard_i_o.rst,
	doc/gnat_ugn/building_executable_programs_with_gnat.rst,
	doc/gnat_ugn/gnat_and_program_execution.rst,
	doc/gnat_ugn/platform_specific_information.rst: Fix unbalanced
	parentheses and brackets.
	* sem_prag.adb (pragma Obsolescent): Likewise.
	* gnat_rm.texi, gnat_ugn.texi: Regenerate.
2022-05-11 08:53:21 +00:00
Marc Poulhiès
4cfd39b0ff [Ada] New No_Local_Tagged_Types restriction
Add new configuration restriction No_Local_Tagged_Types. This new
restriction ensures at compile time that all tagged types are only
declared at the library level.

gcc/ada/

	* libgnat/s-rident.ads (Restriction_Id): Add
	No_Local_Tagged_Types, update comment for adding new GNAT
	specific restriction.
	* restrict.ads (Implementation_Restriction): Add
	No_Local_Tagged_Types.
	* sem_ch3.adb (Analyze_Full_Type_Declaration): Add check for
	tagged type at library level.
	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
	Add No_Local_Tagged_Types description.
	* gnat_rm.texi: Regenerate.
2022-05-11 08:53:21 +00:00
Eric Botcazou
c63b798f88 [Ada] Fix spurious ambiguity for if_expression containing operator
It comes from a discrepancy in the analysis of binary operators, between
the predefined ones for which we register an interpretation with the base
type and the user-defined ones for which we register an interpretation
with the subtype directly.

This is harmless in almost all cases because the two interpretations do not
differ by this type property only, but is problematic when the operation is
the dependent expression of a conditional expression, because it causes two
interpretations of the conditional expression to be registered, which this
time differ by this type property only, thus making them impossible to be
disambiguated later.

gcc/ada/

	* sem_ch4.adb (Analyze_User_Defined_Binary_Op): Use the base type
	in the interpretation of the operator.
2022-05-11 08:53:21 +00:00
Piotr Trojanek
bd97da66c8 [Ada] Fix style of body header boxes
gcc/ada/

	* sem_case.adb (Free_Value_Sets): Fix style in body header box.
	* sem_ch12.adb (Build_Subprogram_Wrappers): Likewise.
	* sem_util.adb (Statically_Denotes_Entity): Likewise.
2022-05-11 08:53:20 +00:00
Etienne Servais
e6f7d5ff4f [Ada] Do not create useless itype in Constrain_Access
In the case of a constrained access definition for a record component we
are calling create_itype twice the former not being updated.  This leads
to a malformed node that crashes -gnatG when predicates are activated.
Instead of creating a default Itype for Desig_Subtype, create it with
the correct scope in each case.

gcc/ada/

	* sem_ch3.adb (Constrain_Access): Call Desig_Subtype in each if
	branch to avoid calling it twice.
2022-05-11 08:53:20 +00:00
Piotr Trojanek
dc9ecb41c8 [Ada] Detect infinite loops with operators in exit conditions
To warn about infinite loops we detect variables referenced in loop exit
conditions. We handle references within boolean operators, i.e.
comparison and negation, which are likely to appear at the top level of
the condition (e.g. "X > 0"). However, we can easily handle all
operators, because they are likely to appear inside the condition (e.g.
"abs (X) > 0.0").

Cleanup related to a new restriction No_Uninitialized_Local_Scalars.

gcc/ada/

	* sem_warn.adb (Find_Var): Detect all operators; replace
	"condition" to "expression" in comments, because when this
	routine is called recursively it no longer examines the
	condition.
	(Is_Suspicious_Function_Name): Reduce scope of a local variable
	to avoid shadowing with a parameter of a nested
	Substring_Present function.
2022-05-11 08:53:20 +00:00
Yannick Moy
4c533da21d [Ada] Adapt proof of System.Arith_Double after update of Z3
Update to version 4.8.14 of prover Z3 requires minor adjustments of the
ghost code to add necessary intermediate assertions that drive the
automatic proof.

gcc/ada/

	* libgnat/s-aridou.adb (Double_Divide, Scaled_Divide): Add
	intermediate assertions.
2022-05-11 08:53:20 +00:00
Piotr Trojanek
a58f70c30c [Ada] Update categorization of implementation restrictions
Some of the restrictions were initially implemented as specific to GNAT,
but now they are part of Ada; likewise, some of recently added
restrictions were considered to be part of Ada, but are not yet in the
standard. This patch updates their categorization based on Ada 202x
Draft 32.

Only a No_Implementation_Restrictions restriction, which is specific to
GNAT, is affected.

Cleanup related to a new restriction No_Uninitialized_Local_Scalars.

gcc/ada/

	* libgnat/s-rident.ads (Implementation_Restriction): Remove
	No_Dynamic_Attachment, No_Implementation_Attributes,
	No_Implementation_Pragmas, No_Local_Protected_Objects,
	No_Protected_Type_Allocators, No_Relative_Delay,
	No_Requeue_Statements, No_Select_Statements,
	No_Task_Termination, Pure_Barriers and Simple_Barriers; add
	No_Dynamic_Sized_Objects,
	No_Implicit_Protected_Object_Allocations,
	No_Implicit_Task_Allocations, No_Task_At_Interrupt_Priority and
	Static_Dispatch_Tables; sort alphabetically.
	* restrict.ads (Restriction_Id): Change Pure_Barriers and
	No_Task_Termination from GNAT to Ada restrictions.
2022-05-11 08:53:20 +00:00
Piotr Trojanek
bd67dcbef4 [Ada] Fix "S p e c" and "B o d y" file headers
Fix Spec/Body headers in .adb/.ads files, respectively; all violations
detected with grep and manually filtered because of .tmpl files.

gcc/ada/

	* exp_atag.adb, lib-util.ads, libgnat/g-decstr.adb,
	libgnat/g-exptty.adb, libgnat/g-socpol.adb,
	libgnat/s-strhas.adb: Fix headers.
2022-05-11 08:53:20 +00:00
Joao Azevedo
d5628bbee2 [Ada] Add SUSE 32bit dependency
On SUSE 15, glibc-locale-base-32bit is needed to run 32bit versions
of Libadalang tools.

gcc/ada/

	* doc/gnat_ugn/platform_specific_information.rst: Add
	glibc-locale-base-32bit as a dependency in SUSE distributions.
	* gnat_ugn.texi: Regenerate.
2022-05-11 08:53:20 +00:00
Piotr Trojanek
4371d18278 [Ada] Fix formatting glitches in GNAT User's Guide
Only enhancement of formatting.

gcc/ada/

	* doc/gnat_ugn/gnat_and_program_execution.rst,
	doc/gnat_ugn/gnat_utility_programs.rst,
	doc/gnat_ugn/inline_assembler.rst: Fix typos and formatting
	glitches.
	* gnat_ugn.texi: Regenerate.
2022-05-11 08:53:19 +00:00
Piotr Trojanek
a473646ec8 [Ada] Use pygments for Ada code examples of elaboration control
Only enhancement of formatting.

gcc/ada/

	* doc/gnat_ugn/elaboration_order_handling_in_gnat.rst: Change
	blocks from plain code to Ada.
2022-05-11 08:53:19 +00:00
Gary Dismukes
42c0119157 [Ada] Excess finalization on assignment with target name symbol
In cases where the Ada 2022 feature of target name symbols (@) is used
and the evaluation of the name is side-effect free, the compiler creates
a temporary object to hold the value of the target object for use as
the value of "@" symbols in the right-hand side expression. In the case
where the target's type is controlled, or has controlled subcomponents,
this can result in extra finalization calls (for the temporary object).
The correction is to bypass the use of a temp and fall back on the more
general approach of creating and calling a procedure with an in-out
parameter for performing the assignment.

gcc/ada/

	* exp_ch5.adb (Expand_Assign_With_Target_Names): Bypass the temp
	object approach in the case where the type of the LHS is
	controlled or has controlled subcomponents (Needs_Finalization
	is True), and use the procedure approach instead.
2022-05-11 08:53:19 +00:00
Bob Duff
6281d36342 [Ada] fix crash on Secondary_Stack_Size with discriminant
This patch fixes a crash caused by specifying the Secondary_Stack_Size
aspect of a task type as the value of a discriminant of the task type,
and then declaring a record component whose type is the task type,
constrained to a discriminant of the record.

gcc/ada/

	* sem_ch3.adb (Get_Discr_Value): Copy the result. Otherwise, the
	"tree" can be malformed (a DAG, not a tree) because
	Get_Discr_Value could be returning some subtree already attached
	to the tree.
2022-05-11 08:53:19 +00:00
Piotr Trojanek
470fff3d8e [Ada] Reset Reachable field when mutating label into loop entity
An entity flag Reachable now only applies to E_Label entities and needs
to be explicitly reset when mutating labels into loop entities. Only
needed to prevent cascaded errors when compiling a malicious ACATS test
with -gnatq (try semantics, even if parse errors).

Cleanup related to detection of uninitialized scalars with GOTO
statements.

gcc/ada/

	* sem_ch5.adb (Analyze_Statements): Only clear Reachable flag on
	proper label entities.
2022-05-11 08:53:19 +00:00
Piotr Trojanek
fd932b612c [Ada] Fix layout of tables in PDF version of GNAT RM
Tables with small left columns and large right columns had colliding
text in the PDF version of GNAT RM.

Spotted while adding description of pragma Ada_2022.

gcc/ada/

	* doc/gnat_rm/implementation_defined_characteristics.rst: Add
	tabularcolums directive, as explained in documentation of Sphinx
	and tabular LaTeX package.
2022-05-11 08:53:19 +00:00
Piotr Trojanek
9b7f7fa724 [Ada] Fix layout in description of aspects and pragmas
Remove extra whitespace in examples of pragmas and aspects.

Spotted while adding description of pragma Ada_2022.

gcc/ada/

	* doc/gnat_rm/implementation_defined_aspects.rst,
	doc/gnat_rm/implementation_defined_pragmas.rst: Remove extra
	whitespace.
	* gnat_rm.texi: Regenerate.
2022-05-11 08:53:18 +00:00
Piotr Trojanek
089b43b11d [Ada] Fix markup in description of implementation-defined characteristics
Fix formatting of description lists, i.e. continuation lines are now
indented like their preceding lines.

Spotted while adding description of pragma Ada_2022.

gcc/ada/

	* doc/gnat_rm/implementation_defined_characteristics.rst: Remove
	extra indent in continuation lines; indent both descriptions of
	Max_Picture_Length.
	* gnat_rm.texi: Regenerate.
2022-05-11 08:53:18 +00:00
Piotr Trojanek
351278f9aa [Ada] Fix markup in description of pragma Eliminate
Fix formatting of a nested bullet lists. Spotted while adding
description of pragma Ada_2022.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst (Pragma
	Eliminate): Fix markup.
	* gnat_rm.texi: Regenerate.
2022-05-11 08:53:18 +00:00
Johannes Kliemann
02b8770a44 [Ada] Suppress warning in g-sthcso for non-unix platforms
gcc/ada/

	* libgnat/g-sthcso.adb: Suppress warning about unneeded use type
	clause.
2022-05-11 08:53:18 +00:00
Piotr Trojanek
c8482b1e77 [Ada] Add guard for making only legal labels unreachable
An entity flag Reachable now only applies to E_Label entities. We had an
appropriate guard for setting this flag, but not for clearing.

Cleanup related to detection of uninitialized scalars with GOTO
statements.

gcc/ada/

	* sem_ch5.adb (Analyze_Statements): Only clear Reachable flag on
	proper label entities.
2022-05-11 08:53:18 +00:00
Piotr Trojanek
c51ad37e2d [Ada] Document pragma Ada_2022
Pragma Ada_2022 is similar to existing pragma Ada_2012 and similarly
deserves to be documented.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst (Pragma
	Ada_2022): Copy description from pragma Ada 2012 and adapt.
	* doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration
	Pragmas): List pragma Ada 2022.
	* gnat_rm.texi, gnat_ugn.texi: Regenerate.
2022-05-11 08:53:18 +00:00
Steve Baird
88e9690610 [Ada] Properly reject unsupported address specifications
In the case of an object declaration with an indefinite nominal subtype
(roughly speaking, that's an object that takes its bounds,
discriminants, and/or tag from its explicit initial value), GNAT does
not support address specifications unless the size of the object is
known at compile time.  In some cases, such unsupported address
specifications were not properly rejected. This could lead to either an
internal error during compilation or (in the class-wide case) to a
warning accompanied by raising Program_Error at run time.

gcc/ada/

	* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Replace
	the existing check for an address specification for an object of
	a class-wide type with a more general check which rejects either
	the class-wide case or the case where the FE would (if the
	address specification were accepted) build a malformed
	tree (specifically, an object renaming declaration with a
	specified address). In the case where the check fails, reject
	the construct at compile time instead of generating an
	unconditional raise of Program_Error.
	* doc/gnat_rm/representation_clauses_and_pragmas.rst: Update
	documentation to reflect these changes.
	* gnat_rm.texi: Regenerate.
2022-05-11 08:53:17 +00:00
Piotr Trojanek
c48a779f64 [Ada] Move Reachable flag to E_Label entities
An entity flag Reachable is described as "defined in labels". It is only
read and written for entities of kind E_Label (the code has necessary
guards for that). There no need for this flag to be specified for all
entities in the generated AST.

Cleanup related to detection of uninitialized scalars with GOTO
statements.

gcc/ada/

	* gen_il-gen-gen_entities.adb (Reachable): Move from
	Root_Entity_Type to E_Label.
2022-05-11 08:53:17 +00:00
Alexandre Oliva
2749e4ab8f [Ada] Set_Is_Known_Valid only if Safe_To_Capture_Value
Library-level variables with initializers could have Is_Known_Valid
set when analyzing their definition, and the flag would only be
cleared when analyzing a statement that assigned to them. Procedures
and functions analyzed before the flag got cleared could skip validity
checking for the corresponding variable. This patch fixes this
problem: we no longer set Is_Known_Valid when analyzing initializers
of library-level variables,and use the same Safe_To_Capture_Value
predicate that prevents assignments from recording known-valid states.

This causes any variable with an initialization value, that would have
had its initializer value used as its known constant value if the use
is analyzed before any assignment to the variable, to no longer be
regarded as holding a constant value. Some might turn out to have a
constant value, after all, but we don't know that yet: we can only
tell after analyzing every subprogram that could possibly assign to
it. At the points where Safe_To_Capture_Value calls are introduced,
Never_Set_In_Source does not yet hold its final value.

gcc/ada/

	* exp_ch3.adb (Expand_N_Object_Declaration): Guard
	Set_Is_Known_Valid with Safe_To_Capture_Value.
2022-05-11 08:53:17 +00:00
Bob Duff
d7ca4dfe8d [Ada] Avoid crash for -gnatR -gnatc
If the -gnatR -gnatc are both given, then the compiler crashes.  This
patch fixes that, and avoids printing the uncomputed sizes and
alignments that were causing the crash. (Previous versions of the
compiler printed incorrect values in such cases.)

gcc/ada/

	* repinfo.adb (List_Object_Info): Do not try to print values
	that have not been computed (and so are No_Uint).
	(Rep_Not_Constant): Reverse sense and change name to
	Compile_Time_Known_Rep. This makes the code at call sites a
	little more readable. Simplify code to a single return
	statement.
2022-05-11 08:53:17 +00:00
Richard Biener
e7d9fdf5e0 bootstrap/105551 - restore nvptx build
The following makes sure to disable var-tracking if only
dwarf2-line debuginfo is present.

2022-05-11  Richard Biener  <rguenther@suse.de>

	PR bootstrap/105551
	* opts.cc (finish_options): Also disable var-tracking if
	!DWARF2_DEBUGGING_INFO.
2022-05-11 10:50:11 +02:00
liuhongt
1e69bc8102 Optimize movzwl + vmovd/vmovq to vmovw.
Similarly optimize movl + vmovq to vmovd.

gcc/ChangeLog:

	PR target/104915
	* config/i386/sse.md (*vec_set<mode>_0_zero_extendhi): New
	pre_reload define_insn_and_split.
	(*vec_setv2di_0_zero_extendhi_1): Ditto.
	(*vec_set<mode>_0_zero_extendsi): Ditto.
	(*vec_setv2di_0_zero_extendsi_1): Ditto.
	(ssewvecmode): New mode attr.
	(ssewvecmodelower): Ditto.
	(ssepackmodelower): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr104915-vmovd.c: New test.
	* gcc.target/i386/pr104915-vmovw.c: New test.
2022-05-11 15:35:06 +08:00
Kewen Lin
55aa130ef1 rs6000: Fix constraint v with rs6000_constraints[RS6000_CONSTRAINT_v]
Currently we hardcode ALTIVEC_REGS for register constraint v and
RS6000_CONSTRAINT_v looks confusing, this is to fix it with
rs6000_constraints[RS6000_CONSTRAINT_v] to align with some other
existing register constraints with RS6000_CONSTRAINT_*.

gcc/ChangeLog:

	* config/rs6000/constraints.md (register constraint v): Use
	rs6000_constraints[RS6000_CONSTRAINT_v] instead of ALTIVEC_REGS.
2022-05-11 02:21:37 -05:00
Martin Liska
9e1e962eac opts: do not allow Separate+Joined ending with =
Do not allow strange option format:
-msmall-data-limit= 11.

For -output-pch we need to use Separate syntax as lang spec
rules automatically append a space.

	PR target/105355

gcc/ChangeLog:

	* config/riscv/riscv.opt: Remove Separate from
	-msmall-data-limit=.
	* optc-gen.awk: Report error for the described situation.
	* gcc.cc: Use Separate syntax.
	* opts.cc (gen_command_line_string): Change option name.

gcc/c-family/ChangeLog:

	* c-opts.cc (c_common_handle_option): Change option name.
	* c.opt: Remove Joined and use Separate option.

gcc/cp/ChangeLog:

	* lang-specs.h: Use Separate syntax.

gcc/objc/ChangeLog:

	* lang-specs.h: Use Separate syntax.

gcc/objcp/ChangeLog:

	* lang-specs.h: Use Separate syntax.
2022-05-11 08:55:19 +02:00