Commit Graph

193079 Commits

Author SHA1 Message Date
Piotr Trojanek
f7fc84d6ff [Ada] Remove redundant guard against Any_String
A sequence of checks for a valid Boolean argument fails when applied to
Any_String because its component is not of a Boolean type. The explicit
guard was unnecessary; it was only needed when a First_Index applied to
Any_String would crash, but this was fixed soon after this guard was
added.

Cleanup related to recent fixes for resolution of Boolean operators.

gcc/ada/

	* sem_type.adb (Valid_Boolean_Arg): Remove redundant guard.
2022-05-12 12:38:37 +00:00
Piotr Trojanek
c97014ce88 [Ada] Accept raise expressions as operands of boolean operators
This patch restores the previous behaviour of a recently rewritten
routine Sem_Ch4.Find_Boolean_Types for boolean operators where one of
the operands is a raise-expression, e.g.:

  (raise Program_Error or else (X /= Y))

This change is required for the Entity field of the "or else" operator
to be set. For GNAT it doesn't matter, but GNATprove requires this field
to be set.

The affected call sequence starts at Find_Boolean_Types, goes via
Check_Right_Argument and Check_Boolean_Pair to Valid_Boolean_Arg, which
ultimately guards a call to Add_One_Interp.

gcc/ada/

	* sem_type.adb (Valid_Boolean_Arg): Operands of Raise_Type are
	valid boolean arguments.
2022-05-12 12:38:37 +00:00
Eric Botcazou
9da379f1c2 [Ada] Plug loophole in Possible_Type_For_Conditional_Expression
We need to check that the designated subprograms of access-to-subprogram
types are subtype conformant before registering a common interpretation.

gcc/ada/

	* sem_ch4.adb (Possible_Type_For_Conditional_Expression): Add
	test for subtype conformance in the cases of
	access-to-subprogram types.
2022-05-12 12:38:36 +00:00
Yannick Moy
bcbf83ec10 [Ada] Adapt CodePeer analysis of GNAT to changes in dependencies
New dependencies in s-imagei are causing issues for CodePeer analysis
of GNAT source and libs. Updating the setup.

gcc/ada/

	* libgnat/s-imagef.adb: Justify false message from CodePeer.
2022-05-12 12:38:36 +00:00
Eric Botcazou
49a31a140d [Ada] Revamp analysis of conditional expressions
The current implementation is skewed toward the first dependent
expression and does not look into the interpretations of the others if
the first one is not overloaded, which can create spurious ambiguities.
And more precise error messages are now given if the types of the
dependent expressions are not compatible.

gcc/ada/

	* sem_ch4.adb (Analyze_Case_Expression): Rewrite.
	(Analyze_If_Expression): Likewise.
	(Possible_Type_For_Conditional_Expression): New function.
	* sem_type.adb (Specific_Type): Retur the base type in more
	cases.
2022-05-12 12:38:36 +00:00
Yannick Moy
91d6876941 [Ada] Proof of 'Image support for signed integers
Prove System.Image_I, similarly to the proof done for System.Image_U.
The contracts make the connection between the result of Image_Integer,
the available space computed with System.Width_U and the result of
'Value as computed by Value_Integer.

I/O units that now depend on non-pure units are also marked not Pure
anymore.

gcc/ada/

	* libgnat/s-imagef.adb: Adapt to new signature of Image_I, by
	providing ghost imported subprograms. For now, no contract is
	used on these subprograms, as System.Image_F is not proved.
	* libgnat/s-imagef.ads: Add modular type Uns as formal
	parameter, to use in defining Int_Params for instantiating
	Image_I.
	* libgnat/s-imagei.adb: Add contracts and ghost code.
	* libgnat/s-imagei.ads: Replace Int formal parameter by package
	Int_Params, which bundles type Int and Uns with ghost
	subprograms.  Add contracts.
	* libgnat/s-imfi128.ads: Adapt to new formal of Image_F.
	* libgnat/s-imfi32.ads: Adapt to new formal of Image_F.
	* libgnat/s-imfi64.ads: Adapt to new formal of Image_F.
	* libgnat/s-imgint.ads: Adapt to new formals of Image_I.
	* libgnat/s-imglli.ads: Adapt to new formals of Image_I.
	* libgnat/s-imgllli.ads: Adapt to new formals of Image_I.
	* libgnat/s-valint.ads: Adapt to new formals of Value_I.
	* libgnat/s-vallli.ads: Adapt to new formals of Value_I.
	* libgnat/s-valllli.ads: Adapt to new formals of Value_I.
	* libgnat/s-valuei.adb (Prove_Scan_Only_Decimal_Ghost): New
	ghost lemma.
	* libgnat/s-valuei.ads: New formal parameters to prove the new
	lemma.
	* libgnat/s-valuti.ads (Int_Params): Define a generic package to
	be used as a trait-like formal parameter in Image_I and other
	generics that need to instantiate Image_I.
	* libgnat/s-widthu.ads (Big_10): Qualify the 10 literal.
2022-05-12 12:38:36 +00:00
Eric Botcazou
a4f6f9f176 [Ada] Rewrite Sem_Ch4.Find_Boolean_Types
Using a straight implementation like the one in Find_Arithmetic_Types.

gcc/ada/

	* sem_ch4.adb (Find_Arithmetic_Types): Use local variables.
	(Find_Boolean_Types): Rewrite modeled on Find_Arithmetic_Types.
2022-05-12 12:38:35 +00:00
Alexandre Oliva
d4fc83c642 [Ada] Introduce hardbool Machine_Attribute for Ada
Implement and document hardened booleans, from nonstandard boolean types
with representation clauses to the extra validity checking performed on
boolean types annotated with the "hardbool" Machine_Attribute pragma.

gcc/ada/

	* doc/gnat_rm/security_hardening_features.rst (Hardened
	Booleans): New.
	* exp_util.adb (Adjust_Condition): Perform validity checking on
	hardbool-annotated types even with -gnatVT.
	* gnat_rm.texi: Regenerate.
	* gcc-interface/utils.cc (gnat_internal_attribute_table): Ignore
	hardbool.
2022-05-12 12:38:35 +00:00
Piotr Trojanek
bb1c939d9b [Ada] Fix scope of block in expanded protected entry body
We expand protected entry body into procedure with a nested block. The
scope of this block is naturally the enclosing procedure. However, the
scope field was wrongly set to the entity of the enclosing procedure
body (i.e. E_Subprogram_Body); now it is set to the entity of the
enclosing procedure spec (i.e. E_Procedure).

In general, the scope field should always points to spec, even for
entities that are syntactically nested within a program unit body. The
scope set to E_Subprogram_Body entity was only accepted because in gigi
we had a protection for that, but this protection is now removed.

This patch fixes a regression in a ravenscar testsuite test (c_rf02_06),
where GNAT was crashing when compiling in configurable runtime mode with
restriction No_Exception_Propagation.

gcc/ada/

	* exp_ch9.adb (Build_Protected_Entry): Set scope of the nested
	block to spec and not the body of the procedure created for a
	protected entry.
2022-05-12 12:38:35 +00:00
Etienne Servais
7a60ba4c83 [Ada] Fix typo in comment
gcc/ada/

	* sem_ch3.adb (Find_Type_Of_Object): Remove duplicate "i" in
	comment.
2022-05-12 12:38:34 +00:00
Marc Poulhiès
7a4892d227 [Ada] Fix style checking rule for square brackets in Ada 2022 and above
The square bracket syntax introduced in Ada 2022 was incorrectly handled
by the style checker and incorrect spacing was enforced. The issue was
in part caused by the wide character syntax (support removed starting
from Ada 2022) that treats the square bracket as a valid identifier
character.

gcc/ada/

	* csets.adb (Initialize): Only treat square bracket as valid
	identifier character for Ada versions prior to Ada 2022.
	* style.ads (Check_Left_Paren): Rename...
	(Check_Left_Paren_Square_Bracket): ...to this.
	* styleg.adb (Check_Left_Bracket): Rename...
	(Check_Left_Paren_Square_Bracket): ...to this.
	* styleg.ads (Check_Left_Paren): Rename...
	(Check_Left_Paren_Square_Bracket): ...to this.
	* scng.adb (Scan): Add check for spacing around left square
	bracket and use new name for Check_Left_Paren_Square_Bracket.
	* libgnat/a-szmzco.ads (Control_Ranges, Graphic_Ranges)
	(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
	(Character_Ranges): Fix style (remove extra space).
	* libgnat/a-swmwco.ads (Control_Ranges, Graphic_Ranges)
	(Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges)
	(Character_Ranges): Likewise.
	* opt.adb (Set_Config_Switches): Remove [ from Identifier_Char
	set.
2022-05-12 12:38:34 +00:00
Eric Botcazou
b9cff88ca7 [Ada] Fix remaining asymmetry in Specific_Type
gcc/ada/

	* sem_type.adb (Specific_Type): Add swapped cases for interfaces.
2022-05-12 12:38:34 +00:00
Piotr Trojanek
e845160a08 [Ada] Fix typos in syntax for implementation-defined pragmas
Documentation cleanup. Spotted while looking at description of
configuration pragmas.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst:
	(Export_Object, Import_Object, Short_Descriptors): Fix pragma
	syntax specification.
	* gnat_rm.texi: Regenerate.
2022-05-12 12:38:33 +00:00
Piotr Trojanek
d889e404c8 [Ada] Reuse generic string hash for invocation signatures
Use a generic string hash routine for hashing of invocation signatures.
The System.String_Hash unit was added to GNAT in 2009 and shouldn't
cause any bootstrap problems these days. To be safe, we don't use the
GNAT.String_Hash renaming, which was added later.

Cleanup related to a new restriction No_Uninitialized_Local_Scalars,
which will also rely on GNAT hash tables. Semantics is unaffected.

gcc/ada/

	* ali.adb (Hash): Reuse GNAT.String_Hash.Hash and don't pollute
	the Name_Id table.
2022-05-12 12:38:33 +00:00
Piotr Trojanek
e3e51e753a [Ada] Document Aggregate_Individually_Assign as a configuration pragma
Pragma Aggregate_Individually_Assign was apparently forgotten to be
listed in the GNAT User's Guide as a configuration pragma.

gcc/ada/

	* doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration
	Pragmas): Add Aggregate_Individually_Assign; otherwise the list
	is complete except for some obsoleted pragmas, which most likely
	are intentionally omitted.
	* gnat_ugn.texi: Regenerate.
2022-05-12 12:38:32 +00:00
Thomas Schwinge
cd644ce8be libgomp nvptx plugin: Split 'PLUGIN_NVPTX_DYNAMIC' into 'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and 'PLUGIN_NVPTX_LINK_LIBCUDA'
Including the GCC-shipped 'include/cuda/cuda.h' vs. system <cuda.h> and
'dlopen'ing the CUDA Driver library vs. linking it are separate concerns.

	libgomp/
	* plugin/Makefrag.am: Handle 'PLUGIN_NVPTX_DYNAMIC'.
	* plugin/configfrag.ac (PLUGIN_NVPTX_DYNAMIC): Change
	'AC_DEFINE_UNQUOTED' into 'AM_CONDITIONAL'.
	* plugin/plugin-nvptx.c: Split 'PLUGIN_NVPTX_DYNAMIC' into
	'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and
	'PLUGIN_NVPTX_LINK_LIBCUDA'.
	* Makefile.in: Regenerate.
	* config.h.in: Likewise.
	* configure: Likewise.
2022-05-12 14:14:13 +02:00
Thomas Schwinge
edbd2b1caa libgomp plugins: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED' for 'PLUGIN_GCN', 'PLUGIN_NVPTX'
Nothing ever used these.

	libgomp/
	* plugin/configfrag.ac: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED'
	for 'PLUGIN_GCN', 'PLUGIN_NVPTX'.
	* Makefile.in: Regenerate.
	* config.h.in: Likewise.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.
2022-05-12 13:28:23 +02:00
Richard Biener
94b8a37fa1 tree-optimization/105562 - avoid uninit diagnostic with better FRE
We can avoid some uninit diagnostics by making FRE disambiguate
against CLOBBERs since any aliasing there would invoke undefined
behavior for a read we are looking up.

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

	PR tree-optimization/105562
	* tree-ssa-sccvn.cc (vn_reference_lookup_3): Disambiguate
	against all CLOBBER defs if there's not an obvious must-alias
	and we are not doing redundant store elimination.
	(vn_walk_cb_data::redundant_store_removal_p): New field.
	(vn_reference_lookup_pieces): Initialize it.
	(vn_reference_lookup): Add argument to specify if we are
	doing redundant store removal.
	(eliminate_dom_walker::eliminate_stmt): Specify we do.
	* tree-ssa-sccvn.h (vn_reference_lookup): Adjust.

	* g++.dg/warn/uninit-pr105562.C: New testcase.
2022-05-12 13:27:12 +02:00
Nathan Sidwell
78c8b0b980 c++: Support module language-decl semantics
In modules purview, one can attach a declaration to the global module
(i.e. not the named module in whence the declaration appears), using a
language declaration:

  export module Foo;
  extern "C++" void *operator new (std::size_t);

This implements those semantics.

	gcc/cp/
	* parser.cc (cp_parser_linkage_specification): Implement
	global module attachment semantics.
	gcc/testsuite/
	* g++.dg/modules/lang-3_a.C: New.
	* g++.dg/modules/lang-3_b.C: New.
	* g++.dg/modules/lang-3_c.C: New.
2022-05-12 03:44:59 -07:00
Haochen Jiang
3c9364f29e i386: Add combine splitter to transform pxor/pcmpeqb/pmovmskb/cmp 0xffff to ptest.
gcc/ChangeLog:

	PR target/104371
	* config/i386/sse.md (vi1avx2const): New define_mode_attr.
	(pxor/pcmpeqb/pmovmskb/cmp 0xffff to ptest splitter):
	New define_split pattern.

gcc/testsuite/ChangeLog:

	PR target/104371
	* gcc.target/i386/pr104371-1.c: New test.
	* gcc.target/i386/pr104371-2.c: Ditto.
2022-05-12 17:30:43 +08:00
Jakub Jelinek
7f78783dbe openmp: Add omp_all_memory support (C/C++ only so far)
The ugly part is that OpenMP 5.1 made omp_all_memory a reserved identifier
which isn't allowed to be used anywhere but in the depend clause, this is
against how everything else has been handled in OpenMP so far (where
some identifiers could have special meaning in some OpenMP clauses or
pragmas but not elsewhere).
The patch handles it by making it a conditional keyword (for -fopenmp
only) and emitting a better diagnostics when it is used in a primary
expression.  Having a nicer diagnostics when e.g. trying to do
int omp_all_memory;
or
int *omp_all_memory[10];
etc. would mean changing too many spots and hooking into name lookups
to reject declaring any such symbols would be too ugly and I'm afraid
there are way too many spots where one can introduce a name
(variables, functions, namespaces, struct, enum, enumerators, template
arguments, ...).

Otherwise, the handling is quite simple, normal depend clauses lower
into addresses of variables being handed over to the library, for
omp_all_memory I'm using NULL pointers.  omp_all_memory can only be
used with inout or out depend kinds and means that a task is dependent
on all previously created sibling tasks that have any dependency (of
any depend kind) and that any later created sibling tasks will be
dependent on it if they have any dependency.

2022-05-12  Jakub Jelinek  <jakub@redhat.com>

gcc/
	* gimplify.cc (gimplify_omp_depend): Don't build_fold_addr_expr
	if null_pointer_node.
	(gimplify_scan_omp_clauses): Likewise.
	* tree-pretty-print.cc (dump_omp_clause): Print null_pointer_node
	as omp_all_memory.
gcc/c-family/
	* c-common.h (enum rid): Add RID_OMP_ALL_MEMORY.
	* c-omp.cc (c_finish_omp_depobj): Don't build_fold_addr_expr
	if null_pointer_node.
gcc/c/
	* c-parser.cc (c_parse_init): Register omp_all_memory as keyword
	if flag_openmp.
	(c_parser_postfix_expression): Diagnose uses of omp_all_memory
	in postfix expressions.
	(c_parser_omp_variable_list): Handle omp_all_memory in depend
	clause.
	* c-typeck.cc (c_finish_omp_clauses): Handle omp_all_memory
	keyword in depend clause as null_pointer_node, diagnose invalid
	uses.
gcc/cp/
	* lex.cc (init_reswords): Register omp_all_memory as keyword
	if flag_openmp.
	* parser.cc (cp_parser_primary_expression): Diagnose uses of
	omp_all_memory in postfix expressions.
	(cp_parser_omp_var_list_no_open): Handle omp_all_memory in depend
	clause.
	* semantics.cc (finish_omp_clauses): Handle omp_all_memory
	keyword in depend clause as null_pointer_node, diagnose invalid
	uses.
	* pt.cc (tsubst_omp_clause_decl): Pass through omp_all_memory.
gcc/testsuite/
	* c-c++-common/gomp/all-memory-1.c: New test.
	* c-c++-common/gomp/all-memory-2.c: New test.
	* c-c++-common/gomp/all-memory-3.c: New test.
	* g++.dg/gomp/all-memory-1.C: New test.
	* g++.dg/gomp/all-memory-2.C: New test.
libgomp/
	* libgomp.h (struct gomp_task): Add depend_all_memory member.
	* task.c (gomp_init_task): Initialize depend_all_memory.
	(gomp_task_handle_depend): Handle omp_all_memory.
	(gomp_task_run_post_handle_depend_hash): Clear
	parent->depend_all_memory if equal to current task.
	(gomp_task_maybe_wait_for_dependencies): Handle omp_all_memory.
	* testsuite/libgomp.c-c++-common/depend-1.c: New test.
	* testsuite/libgomp.c-c++-common/depend-2.c: New test.
	* testsuite/libgomp.c-c++-common/depend-3.c: New test.
2022-05-12 08:31:20 +02:00
jiawei
8585185cc4
testsuite: Update Wconversion testcase check type.
Some compiler target like arm-linux\riscv\power\s390x\xtensa-gcc handle
char as unsigned char, then there are no warnings occur and got FAIL cases.
Just change the type char into explicit signed char to keep the feature
consistency.

gcc/testsuite/ChangeLog:

	* c-c++-common/Wconversion-1.c: Update type.
2022-05-11 21:31:01 -07:00
GCC Administrator
d0d513b5ea Daily bump. 2022-05-12 00:16:36 +00:00
David Malcolm
99988b0e8b analyzer: fix memory leaks
These leaks all relate to logging within -fdump-analyzer[-stderr]
or are one-time leaks; seen with valgrind.

gcc/analyzer/ChangeLog:
	* checker-path.cc (state_change_event::get_desc): Call maybe_free
	on label_text temporaries.
	* diagnostic-manager.cc
	(diagnostic_manager::prune_for_sm_diagnostic): Likewise.
	* engine.cc (exploded_graph::~exploded_graph): Fix leak of
	m_per_point_data and m_per_call_string_data values.  Simplify
	cleanup of m_per_function_stats and m_per_point_data values.
	(feasibility_state::maybe_update_for_edge): Fix leak of result of
	superedge::get_description.
	* region-model-manager.cc
	(region_model_manager::~region_model_manager): Move cleanup of
	m_setjmp_values to match the ordering of the fields within
	region_model_manager.  Fix leak of values within
	m_repeated_values_map, m_bits_within_values_map,
	m_asm_output_values_map, and m_const_fn_result_values_map.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-05-11 17:24:42 -04:00
Patrick Palka
25addf8352 tree: introduce range adaptor for TREE_VEC
This patch implements a simple tree wrapper, named tree_vec_range, which
lets us idiomatically loop over all the elements of a TREE_VEC using a
C++11 range-based for loop:

  // v is a TREE_VEC
  for (tree e : tree_vec_range (v))
    ...

This is similar to the existing tree-based range adaptors ovl_range and
lkp_range added to the C++ FE in r12-340-g3307b9a07a3c51.

This patch also converts some existing loops over TREE_VEC within the
C++ FE to use tree_vec_range / range-for.

gcc/cp/ChangeLog:

	* constraint.cc (tsubst_parameter_mapping): Convert loop over
	TREE_VEC into a range-based for loop using tree_vec_range.
	* pt.cc (iterative_hash_template_arg): Likewise.
	(template_parms_level_to_args): Likewise.
	(deducible_template_args): Likewise.
	(check_undeduced_parms): Likewise.
	(dependent_type_p_r): Likewise.
	(value_dependent_expression_p) <case NONTYPE_ARGUMENT_PACK>:
	Likewise.
	(dependent_template_arg_p): Likewise.
	* tree.cc (cp_walk_subtrees) <case NONTYPE_ARGUMENT_PACK>:
	Likewise.

gcc/ChangeLog:

	* tree.h (TREE_VEC_BEGIN): Define.
	(TREE_VEC_END): Correct 'length' member access.
	(class tree_vec_range): Define.
2022-05-11 16:14:59 -04:00
Jason Merrill
88459c3965 c++: lambda template in requires [PR105541]
Since the patch for PR103408, the template parameters for the lambda in this
test have level 1 instead of 2, and we were treating null template args as 1
level of arguments, so tsubst_template_parms decided it had nothing to do.
Fixed by distinguishing between <> and no args at all, which is what we have
in our "substitution" in a requires-expression.

	PR c++/105541

gcc/cp/ChangeLog:

	* cp-tree.h (TMPL_ARGS_DEPTH): 0 for null args.
	* parser.cc (cp_parser_enclosed_template_argument_list):
	Use 0-length TREE_VEC for <>.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/lambda-requires1.C: New test.
2022-05-11 15:30:17 -04:00
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 2e309a4eff "libgomp testsuite:
Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library",
and commit d6adba3075 "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 d6adba3075
"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 b8d89b03db (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