Commit Graph

193353 Commits

Author SHA1 Message Date
Richard Biener ba2068893c Make gimple_build main workers more flexible
The following makes the main gimple_build API take a
gimple_stmt_iterator, whether to insert before or after and
an iterator update argument to make it more convenient to use
in certain situations (see the tree-vect-generic.cc hunks for
an example).  It also makes the case we insert into the IL
somewhat distinct from inserting into a standalone sequence in
that it simplifies built expressions the same way as inserting
and calling fold_stmt (..., follow_all_ssa_edges) would.  When
inserting into a standalone sequence we restrict simplification
to defs within the currently building sequence.

The patch only amends the tree_code gimple_build API, I will
followup with converting the rest as well.  The patch got larger
than intended because the template forwarders now use gsi_last
which introduces a dependency on gimple-iterator.h requiring
mass #include re-org across the tree.  There are two frontend
specific files including gimple-fold.h just for some padding
clearing stuff - I've removed the include and instead moved
the declarations to fold-const.h (but not the implementations).
Otherwise I'd have to include half of the middle-end headers in
those files which I didn't much like.

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

gcc/cp/
	* constexpr.cc: Remove gimple-fold.h include.

gcc/c-family/
	* c-omp.cc: Remove gimple-fold.h include.

gcc/analyzer/
	* supergraph.cc: Re-order gimple-fold.h include.

gcc/
	* gimple-fold.cc (gimple_build): Adjust for new
	main API.
	* gimple-fold.h (gimple_build): New main APIs with
	iterator, insert direction and iterator update.
	(gimple_build): New forwarder template.
	(clear_padding_type_may_have_padding_p): Remove.
	(clear_type_padding_in_mask): Likewise.
	(arith_overflowed_p): Likewise.
	* fold-const.h (clear_padding_type_may_have_padding_p): Declare.
	(clear_type_padding_in_mask): Likewise.
	(arith_overflowed_p): Likewise.
	* tree-vect-generic.cc (gimplify_build3): Use main gimple_build API.
	(gimplify_build2): Likewise.
	(gimplify_build1): Likewise.
	* ubsan.cc (ubsan_expand_ptr_ifn): Likewise, avoid extra
	compare stmt.
	* gengtype.cc (open_base_files): Re-order includes.
	* builtins.cc: Re-order gimple-fold.h include.
	* calls.cc: Likewise.
	* cgraphbuild.cc: Likewise.
	* cgraphunit.cc: Likewise.
	* config/rs6000/rs6000-builtin.cc: Likewise.
	* config/rs6000/rs6000-call.cc: Likewise.
	* config/rs6000/rs6000.cc: Likewise.
	* config/s390/s390.cc: Likewise.
	* expr.cc: Likewise.
	* fold-const.cc: Likewise.
	* function-tests.cc: Likewise.
	* gimple-match-head.cc: Likewise.
	* gimple-range-fold.cc: Likewise.
	* gimple-ssa-evrp-analyze.cc: Likewise.
	* gimple-ssa-evrp.cc: Likewise.
	* gimple-ssa-sprintf.cc: Likewise.
	* gimple-ssa-warn-access.cc: Likewise.
	* gimplify.cc: Likewise.
	* graphite-isl-ast-to-gimple.cc: Likewise.
	* ipa-cp.cc: Likewise.
	* ipa-devirt.cc: Likewise.
	* ipa-prop.cc: Likewise.
	* omp-low.cc: Likewise.
	* pointer-query.cc: Likewise.
	* range-op.cc: Likewise.
	* tree-cfg.cc: Likewise.
	* tree-if-conv.cc: Likewise.
	* tree-inline.cc: Likewise.
	* tree-object-size.cc: Likewise.
	* tree-ssa-ccp.cc: Likewise.
	* tree-ssa-dom.cc: Likewise.
	* tree-ssa-forwprop.cc: Likewise.
	* tree-ssa-ifcombine.cc: Likewise.
	* tree-ssa-loop-ivcanon.cc: Likewise.
	* tree-ssa-math-opts.cc: Likewise.
	* tree-ssa-pre.cc: Likewise.
	* tree-ssa-propagate.cc: Likewise.
	* tree-ssa-reassoc.cc: Likewise.
	* tree-ssa-sccvn.cc: Likewise.
	* tree-ssa-strlen.cc: Likewise.
	* tree-ssa.cc: Likewise.
	* value-pointer-equiv.cc: Likewise.
	* vr-values.cc: Likewise.

gcc/testsuite/
	* gcc.dg/plugin/diagnostic_group_plugin.c: Reorder or remove
	gimple-fold.h include.
	* gcc.dg/plugin/diagnostic_plugin_show_trees.c:
	Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_inlining.c:
	Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_metadata.c:
	Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_paths.c:
	Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c:
	Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_string_literals.c: Likewise.
	* gcc.dg/plugin/diagnostic_plugin_test_tree_expression_range.c:
	Likewise.
	* gcc.dg/plugin/finish_unit_plugin.c: Likewise.
	* gcc.dg/plugin/ggcplug.c: Likewise.
	* gcc.dg/plugin/must_tail_call_plugin.c: Likewise.
	* gcc.dg/plugin/one_time_plugin.c: Likewise.
	* gcc.dg/plugin/selfassign.c: Likewise.
	* gcc.dg/plugin/start_unit_plugin.c: Likewise.
	* g++.dg/plugin/selfassign.c: Likewise.
2022-05-13 08:18:33 +02:00
Alexandre Oliva 90a8eab4a1 [PR105455] Set edge probabilities when hardening conditionals
When turning unconditional edges into conditional, as in
gimple-harden-conditionals.cc:insert_check_and_trap, the newly-created
edge's probability comes out uninitialized, while the previously
unconditional edge's probability is presumably
profile_probability::always.

Mixing initialized and uninitialized probabilities before expand
breaks predict.cc:force_edge_cold: the initialized probability may end
up copied to a REG_BR_PROB note in a conditional branch insn, but if
force_edge_cold is called on that edge, it will find another edge with
uninitialized probability and assume the note is absent.  Later on,
rtl_verify_edges complains that the note does not match the
probability modified by force_edge_cold in the edge.

This patch sets probabilities for edges affected by hardening of
conditionals, both the newly-created edges to trap blocks and the
previously-unconditional edges, so that the former are considered
never taken, while the latter are confirmed as always taken.


for  gcc/ChangeLog

	PR rtl-optimization/105455
	* gimple-harden-conditionals.cc (insert_check_and_trap): Set
	probabilities for newly-conditional edges.

for  gcc/testsuite/ChangeLog

	PR rtl-optimization/105455
	* gcc.dg/pr105455.c: New.
2022-05-13 03:00:29 -03:00
liuhongt 8ab4b48415 Strip of a vector load which is only used partially.
Optimize

  _4 = VEC_PERM_EXPR <_1, _1, { 4, 5, 6, 7, 4, 5, 6, 7 }>;
  _5 = BIT_FIELD_REF <_4, 128, 0>;

to

  _5 = BIT_FIELD_REF <_1, 128, 128>;

gcc/ChangeLog:

	PR tree-optimization/102583
	* tree-ssa-forwprop.cc (simplify_bitfield_ref): Extended to a
	contiguous stride in the VEC_PERM_EXPR.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr102583.c: New test.
	* gcc.target/i386/pr92645-2.c: Adjust testcase.
	* gcc.target/i386/pr92645-3.c: Ditto.
2022-05-13 09:02:48 +08:00
GCC Administrator 49ace834ab Daily bump. 2022-05-13 00:16:30 +00:00
Patrick Palka 3e948d645b c++: tighten TMPL_ARGS_LEVEL macro
This patch makes TMPL_ARGS_LEVEL verify the level argument is valid when
the one-dimensional vector case.  Doing so uncovered a couple of latent
issues: in try_class_unification, we weren't correctly copying targs
when it's two-dimensional, and in unify_pack_expansion it seems an
inequality test needs to be reversed.  This patch fixes both issues, and
in passing makes the former function free the temporary copy of targs.

gcc/cp/ChangeLog:

	* cp-tree.h (TMPL_ARGS_LEVEL): Assert LEVEL is 1 when
	TMPL_ARGS_HAVE_MULTIPLE_LEVELS is false.
	* pt.cc (try_class_unification): Correctly copy multidimensional
	targs.  Free the copy of targs.
	(unify_pack_expansion): Fix level comparison.
2022-05-12 16:52:06 -04:00
David Edelsohn 995060aa5e testsuite: PPC vector double requires VSX
pr101168.C uses __vector double, which requires VSX, not just Altivec.
This patch invokes the testcase with the -mvsx option.

	* g++.target/powerpc/pr101168.C: Require VSX.
2022-05-12 14:51:30 -04:00
Jonathan Wakely a0080f0285 libstdc++: Remove whitespace before preprocessor directives
These are harmless, but also unnecessary and inconsistent (and their
removal was requested by PR libstdc++/17632).

libstdc++-v3/ChangeLog:

	* config/locale/dragonfly/numeric_members.cc: Remove whitespace.
	* config/locale/gnu/numeric_members.cc: Likewise.
	* include/bits/locale_facets_nonio.h: Likewise.
	* libsupc++/typeinfo: Likewise.
2022-05-12 18:04:01 +01:00
Thomas Schwinge dcc266796a Refactor '-ldl' handling for libgomp proper and plugins
Instead of implicit global 'LIBS="-ldl $LIBS"' via 'AC_CHECK_LIB', make
'-ldl' explicit for libgomp proper, and clean up 'PLUGIN_GCN_LIBS',
'PLUGIN_NVPTX_LIBS' accordingly.

	libgomp/
	* Makefile.am (libgomp_la_LIBADD): Initialize.
	* plugin/configfrag.ac (DL_LIBS): New.
	(PLUGIN_GCN_LIBS): Remove.
	(PLUGIN_NVPTX_LIBS): Don't set in the 'PLUGIN_NVPTX_DYNAMIC' case.
	* plugin/Makefrag.am (libgomp_la_LIBADD)
	(libgomp_plugin_gcn_la_LIBADD): Consider '$(DL_LIBS)'.
	(libgomp_plugin_nvptx_la_LIBADD) <PLUGIN_NVPTX_DYNAMIC>: Likewise.
	* Makefile.in: Regenerate.
	* config.h.in: Likewise.
	* configure: Likewise.
	* testsuite/Makefile.in: Likewise.
2022-05-12 15:11:30 +02:00
Richard Biener dfda40f814 rtl-optimization/105577 - RTL DSE and non-call EH
When one of the first two stages of DSE removes a throwing stmt
we have to purge dead EH edges before the DF re-analyze fires off
a fast DCE since that cannot cope with the situation.

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

	PR rtl-optimization/105577
	* dse.cc (rest_of_handle_dse): Make sure to purge dead EH
	edges before running fast DCE via df_analyze.
2022-05-12 15:05:45 +02:00
Piotr Trojanek c4471a4a3c [Ada] Skip postponed validation checks with compilation errors
If there are compilation errors then gigi doesn't backannotate the AST
with sizes, alignment, etc. The postponed compilation validation checks
can then easily crash or give spurious errors. We now just skip them.

gcc/ada/

	* gnat1drv.adb (Gnat1drv): Skip postponed checks when there are
	errors.
2022-05-12 12:38:42 +00:00
Arnaud Charlet 605095af6f [Ada] Fix URL in doc
gcc/ada/

	* doc/gnat_ugn/the_gnat_compilation_model.rst: Fix URL.
	* gnat_ugn.texi: Regenerate.
2022-05-12 12:38:42 +00:00
Bob Duff 0b4606618c [Ada] Restore double quotes in debug printouts
A previous change in "Make debug printouts more robust" accidentally
removed double quotes around identifiers in debug printouts. This patch
restores those. So for example, we have:

       Prev_Entity = Node #10 N_Defining_Identifier "foo" (Entity_Id=795)

and not:

       Prev_Entity = Node #10 N_Defining_Identifier foo (Entity_Id=795)

This affects the output of -gnatdt, and certain calls normally done from
gdb.

gcc/ada/

	* namet.ads, namet.adb (Write_Name_For_Debug): Add Quote
	parameter to allow conditional addition of quotes. Note that
	some calls to Write_Name_For_Debug, for example for file names,
	shouldn't have quotes, as in some_package.adb:123:45.
	* treepr.adb (Print_Name): Add double quotes around the name
	using the above Quote parameters.
2022-05-12 12:38:42 +00:00
Piotr Trojanek e28064111c [Ada] Reuse collective subtype for comparison operators where possible
Replace membership alternatives with N_Op_Compare. Code cleanup;
semantics is unaffected.

gcc/ada/

	* sem_res.adb (Resolve_Actuals): Simplify with N_Op_Compare.
	* sem_util.adb (Replace_Null_Operand,
	Null_To_Null_Address_Convert_OK): Likewise.
2022-05-12 12:38:41 +00:00
Piotr Trojanek 0c1ec8ae18 [Ada] Remove unreferenced Is_Selector_Name routine
Function Is_Selector_Name was added in 1995 while experimenting with
default expressions in record declarations. This experiment was
abandoned after one day and this routine was never used since then.

gcc/ada/

	* sem_util.ads (Is_Selector_Name): Remove spec.
	* sem_util.adb (Is_Selector_Name): Remove body.
2022-05-12 12:38:41 +00:00
Arnaud Charlet 09c7e3175a [Ada] Add more dummy names in Sem_Warn.Has_Junk_Name
To sync the names used in CodePeer (and SPARK) when filtering out
warnings on e.g. unused variables.

gcc/ada/

	* sem_warn.adb (Has_Junk_Name): Add more dummy names.
2022-05-12 12:38:41 +00:00
Piotr Trojanek ec0f9f7d88 [Ada] Fix warning about generic subprograms withed but not referenced
For warnings about unreferenced entities and unused WITH clauses we
typically exclude references outside of the extended main source unit.
However, we include references to variables of formal private types to
warn in the instance if the corresponding type is not a fully
initialized type.

This special case was unnecessarily applied to references to other
entities of formal private types. In particular, we applied it to the
references to generic functions, where the full initialization of the
formal private type doesn't matter.

As an extreme example, this special case was unnecessarily applied to
"pragma Pure (Unchecked_Conversion)" in the runtime unit.

gcc/ada/

	* lib-xref.adb (Generate_Reference): Fix comment and implement
	it precisely.
2022-05-12 12:38:40 +00:00
Piotr Trojanek 3707c8feb1 [Ada] Fix warning about generic subprograms withed but not instantiated
The compiler should warn when a generic subprogram unit is withed but
not instantiated by the current main unit. This warning relies on flag
Is_Instantiated, which was wrongly set when the generic unit was also
withed and instantiated by some other unit.

This change merely reverts a fix done 20 years ago, which worked around
some spurious warning emitted with inlining enabled. Now the
Is_Instantiated flag is set similarly for generic subprograms and
generic packages.

gcc/ada/

	* atree.adb, atree.ads: Move WITH clause from spec to body; to
	prevent new warnings stopping the bootstrap.
	* fmap.adb, fname-sf.adb, libgnat/a-direct.adb,
	libgnat/s-bignum.adb: Remove unnecessary WITH clauses; to
	prevent new warnings stopping the bootstrap.
	* sem_ch12.adb (Analyze_Subprogram_Instantiation): Only set
	Is_Instantiated flag when the instance is in the extended main
	source unit.
2022-05-12 12:38:40 +00:00
Yannick Moy dff98f76fb [Ada] Remove useless pragma Warnings Off from runtime units
GNAT does not issue a warning anymore on a postcondition of True (used
here to prevent inining inside GNATprove for proof).

gcc/ada/

	* libgnat/s-valuei.ads: Remove pragma Warnings Off.
	* libgnat/s-valueu.ads: Same.
	* libgnat/s-valuti.ads: Same.
2022-05-12 12:38:40 +00:00
Yannick Moy cc508db0d3 [Ada] Do not issue a warning on a postcondition of True or False
Do not issue a warning about the postcondition of a function not
mentioning its result when this postcondition is statically True or
False, as this is a specification of non-termination (for value False)
or a hint to SPARK prover for not inlining an expression function (for
value True). In any case, the warning brings no value here.

gcc/ada/

	* sem_util.adb (Check_Result_And_Post_State): Exempt trivial
	post.
2022-05-12 12:38:39 +00:00
Arnaud Charlet ce19ac123a [Ada] Remove front-end SJLJ processing
We no longer use the so called front-end SJLJ exception mechanism, so
get rid of it.

gcc/ada/

	* ali.adb, ali.ads, bcheck.adb, exp_ch11.adb, fe.h,
	gnat1drv.adb, opt.adb, opt.ads, targparm.adb, targparm.ads,
	lib-writ.adb: Get rid of Frontend_Exceptions processing.
	* libgnat/system-aix.ads, libgnat/system-darwin-arm.ads,
	libgnat/system-darwin-ppc.ads, libgnat/system-darwin-x86.ads,
	libgnat/system-djgpp.ads, libgnat/system-dragonfly-x86_64.ads,
	libgnat/system-freebsd.ads, libgnat/system-hpux-ia64.ads,
	libgnat/system-hpux.ads, libgnat/system-linux-alpha.ads,
	libgnat/system-linux-arm.ads, libgnat/system-linux-hppa.ads,
	libgnat/system-linux-ia64.ads, libgnat/system-linux-m68k.ads,
	libgnat/system-linux-mips.ads, libgnat/system-linux-ppc.ads,
	libgnat/system-linux-riscv.ads, libgnat/system-linux-s390.ads,
	libgnat/system-linux-sh4.ads, libgnat/system-linux-sparc.ads,
	libgnat/system-linux-x86.ads, libgnat/system-lynxos178-ppc.ads,
	libgnat/system-lynxos178-x86.ads, libgnat/system-mingw.ads,
	libgnat/system-qnx-aarch64.ads, libgnat/system-rtems.ads,
	libgnat/system-solaris-sparc.ads,
	libgnat/system-solaris-x86.ads,
	libgnat/system-vxworks-arm-rtp-smp.ads,
	libgnat/system-vxworks-arm-rtp.ads,
	libgnat/system-vxworks-arm.ads,
	libgnat/system-vxworks-e500-kernel.ads,
	libgnat/system-vxworks-e500-rtp-smp.ads,
	libgnat/system-vxworks-e500-rtp.ads,
	libgnat/system-vxworks-ppc-kernel.ads,
	libgnat/system-vxworks-ppc-rtp-smp.ads,
	libgnat/system-vxworks-ppc-rtp.ads,
	libgnat/system-vxworks-x86-kernel.ads,
	libgnat/system-vxworks-x86-rtp-smp.ads,
	libgnat/system-vxworks-x86-rtp.ads,
	libgnat/system-vxworks7-aarch64-rtp-smp.ads,
	libgnat/system-vxworks7-aarch64.ads,
	libgnat/system-vxworks7-arm-rtp-smp.ads,
	libgnat/system-vxworks7-arm.ads,
	libgnat/system-vxworks7-e500-kernel.ads,
	libgnat/system-vxworks7-e500-rtp-smp.ads,
	libgnat/system-vxworks7-e500-rtp.ads,
	libgnat/system-vxworks7-ppc-kernel.ads,
	libgnat/system-vxworks7-ppc-rtp-smp.ads,
	libgnat/system-vxworks7-ppc-rtp.ads,
	libgnat/system-vxworks7-ppc64-kernel.ads,
	libgnat/system-vxworks7-ppc64-rtp-smp.ads,
	libgnat/system-vxworks7-x86-kernel.ads,
	libgnat/system-vxworks7-x86-rtp-smp.ads,
	libgnat/system-vxworks7-x86-rtp.ads,
	libgnat/system-vxworks7-x86_64-kernel.ads,
	libgnat/system-vxworks7-x86_64-rtp-smp.ads: Remove
	Frontend_Exceptions line.
	* gcc-interface/decl.cc, gcc-interface/trans.cc
	(gnat_to_gnu_entity, gnat_to_gnu_subprog_type, gigi,
	gnat_to_gnu): Remove Front_End_SJLJ processing and always assume
	Back_End_Exceptions.
2022-05-12 12:38:39 +00:00
Bob Duff 3b4ae9b98b [Ada] Make debug printouts more robust
This patch improves some debug printouts so that they avoid crashing on
invalid data.

In addition, the relevant code uses Global_Name_Buffer all over the
place. This patch cleans up some of those uses, in particular ones in
the same code as the robustness changes, and code called by that code.

gcc/ada/

	* namet.ads, namet.adb (Write_Name_For_Debug): New more-robust
	version of Write_Name.
	(Destroy_Global_Name_Buffer): New procedure to help detect bugs
	related to use of Global_Name_Buffer.  Misc cleanup and comment
	improvements. E.g. we don't need to document every detail of
	debugging printouts, especially since they can change.
	* uname.ads, uname.adb (Write_Unit_Name_For_Debug): New
	more-robust version of Write_Unit_Name.
	(Get_Unit_Name_String): Pass buffer in, instead of using the
	global variable. Misc cleanup. Remove the "special fudge", which
	is apparently not needed, and anyway the comment "the %s or %b
	has already been eliminated" seems wrong.
	(Write_Unit_Name): Call the new version of Get_Unit_Name_String.
	* errout.adb (Set_Msg_Insertion_Unit_Name): Call the new version
	of Get_Unit_Name_String. We pass the global variable here,
	because it's too much trouble to disentangle such uses in
	Errout.
	* sem_util.ads, sem_util.adb, sem_dist.adb
	(Get_Library_Unit_Name): New version of
	Get_Library_Unit_Name_String that avoids usage of the global
	variable.
	* casing.ads, casing.adb, exp_prag.adb, exp_util.adb
	(Set_All_Upper_Case): Remove. There is no need for a wrapper
	here -- code is clearer without it.
	* treepr.adb (Print_Name): Call Write_Name_For_Debug, which
	deals with No_Name (etc), rather than duplicating that here.
	Note that the call to Get_Name_String was superfluous.
	(Tree_Dump): Call Write_Unit_Name_For_Debug instead of
	Write_Unit_Name, which crashes if not Is_Valid_Name.
	* erroutc.ads: Improve comments.
	* erroutc.adb (Set_Msg_Name_Buffer): Call
	Destroy_Global_Name_Buffer to detect potential bugs where it
	incorrectly looks at the global variable.
	* sinput.adb (Write_Location): Call Write_Name_For_Debug instead
	of Write_Name, so it won't blow up on invalid data.
	* sinput.ads: Improve comments; remove some verbosity.
	* libgnat/s-imagef.adb: Fix typo in comment.
2022-05-12 12:38:38 +00:00
Yannick Moy 86c7b1617f [Ada] Add ghost code to facilitate proof with SPARK
Proof of generic units for Long_Long_Long_Unsigned instantiations is
harder for provers, as they have to deal with larger values. Add ghost
code to make the proof easier.

gcc/ada/

	* libgnat/s-imageu.adb (Set_Image_Unsigned): Add lemma.
	* libgnat/s-valueu.adb (Scan_Raw_Unsigned): Add assertion.
2022-05-12 12:38:38 +00:00
Yannick Moy bbb4320bae [Ada] Remove use of use-clauses in loaded runtime units
The spec of runtime units that may be loaded by the compiler should not
contain use-clauses, for visibility to be correctly handled.  Remove
use-clauses that were introduced for the ghost big integers unit as part
of the proof of runtime units.

gcc/ada/

	* libgnat/s-aridou.ads: Remove use-clause, add renames and
	subtypes.
	* libgnat/s-exponn.ads: Same.
	* libgnat/s-expont.ads: Same.
	* libgnat/s-widthu.ads: Same.
2022-05-12 12:38:38 +00:00
Etienne Servais 6655b152eb [Ada] Fix support for ISO-8859-15 and IBM CP 850 encoding
In ISO-8859-15, code for "lower y with diaeresis" is used for the upper
case.  In IBM CP 850, upper and lower o with stroke were missing.

gcc/ada/

	* csets.adb (Fold_Latin_9): Fix y with diaeresis.
	(Fold_IBM_PC_850): Fix o with stroke.
2022-05-12 12:38:37 +00:00
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