Commit Graph

192931 Commits

Author SHA1 Message Date
Nathan Sidwell
addedd48e8 [c++][NFC] Rename Attached to Keyed
With modules, certain decls are 'scoped' with another decl.  I chose
the name 'attached', but that has become something specific in the
modules context, so is no longer a good name.  The alternative name I
considered was 'keyed', but we already had the concept of a key
virtual function (from the ABI), which is why I went with 'attached'.
However, I think 'keyed' is the less worse name.  I think there's less
chance of confusion.

	gcc/cp/
	* cp-tree.h (DECL_MODULE_KEYED_DECLS_P): Renamed from
	DECL_MODULE_ATTACHMENTS_P.
	(struct lane_decl_base): Rename module_attached_p to
	module_keyed_decls_p.
	(maybe_key_decl): Renamed from maybe_attach_decl.
	* lambda.cc (record_lambda_scope): Adjust.
	* lex.cc (cxx_dup_lang_specific_decl): Adjust.
	* module.cc (keyed_map_t, keyed_table): Renamed from attached_map_t,
	attached_table.
	(enum merge_kind): Rename MK_attached to MK_keyed.
	(trees_out::lang_decl_bools): Adjust.
	(trees_in::lang_decl_bools): Adjust.
	(trees_in::decl_value): Adjust.
	(trees_out::get_merge_kind): Adjust.
	(trees_out::key_mergeable): Adjust.
	(trees_in::key_mergeable): Adjust.
	(maybe_key_decl): Rename from maybe_attach_decl.
	(direct_import): Adjust.
	(fini_modules): Adjust.
2022-05-09 05:48:36 -07:00
Clément Chigot
49e8f813bb MAINTAINERS: Update my email address.
Update my email address in the MAINTAINERS file.

ChangeLog:
2022-05-06  Clément Chigot  <chigot@adacore.com>

	* MAINTAINERS: Update my email address.
2022-05-09 14:21:54 +02:00
Martin Liška
73a8dce44b Simplify STATIC_ASSERT macro.
For C++, use always __static_assert and for C, use the negative array
index.

gcc/ChangeLog:

	* basic-block.h (STATIC_ASSERT): Use normal STATIC_ASSERT.
	* system.h (STATIC_ASSERT): Define as static_assert for C++
	and fallback to array index in C.
2022-05-09 14:09:01 +02:00
Martin Liska
1fffe45fb5 Remove non-ANSI C path in ansidecl.h.
include/ChangeLog:

	* ansidecl.h (PTR): Remove Not ANCI C part.
2022-05-09 13:50:09 +02:00
Richard Biener
faabc751d0 tree-optimization/105517 - avoid offset truncation during VN
When value-numbering an address expression like
&p_74(D)->a1x[4294967295].a1; we are accumulating the byte offset
in an 64bit integer.  When later exploiting the duality between
that and a POINTER_PLUS_EXPR we should avoid truncating that
offset to fit in the target specific sizetype.  While such
overflows are generally undefined behavior, exploiting this
may leads to spurious missing diagnostics.

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

	PR tree-optimization/105517
	* tree-ssa-sccvn.cc (vn_reference_lookup): Make sure the accumulated
	offset can be represented in the POINTER_PLUS_EXPR IL.
	(vn_reference_insert): Likewise.
	* poly-int.h (sext_hwi): Add poly version of sext_hwi.
2022-05-09 13:42:36 +02:00
Richard Biener
93416de0cb Remove GIMPLE restriction of ! using match.pd patterns
This removes #if GIMPLE guards around patterns using ! which is
now also provided in the GENERIC implementation.

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

	* match.pd: Remove #if GIMPLE guards around ! using patterns.
2022-05-09 13:42:36 +02:00
liuhongt
8b59556e1c Optimize vec_setv8{hi,hf}_0 + pmovzxbq to pmovzxbq.
gcc/ChangeLog:

	PR target/105072
	* config/i386/sse.md (*sse4_1_<code>v2qiv2di2<mask_name>_1):
	New define_insn.
	(*sse4_1_zero_extendv2qiv2di2_2): New pre_reload
	define_insn_and_split.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr105072.c: New test.
2022-05-09 18:59:14 +08:00
Yannick Moy
655ca5aaa9 [Ada] Suggest use of First_Valid/Last_Valid on type with static predicate
Attributes First_Valid/Last_Valid can be used on types with static
predicate, instead of First/Last/Range. Include that suggestion in
the corresponding error message.

gcc/ada/

	* sem_util.adb (Bad_Predicated_Subtype_Use): Add continuation
	message.
2022-05-09 09:27:39 +00:00
Piotr Trojanek
c329830825 [Ada] Raise Constraint_Error when converting negative values to Char_Code
GNATprove relies on the comment for Get_Enum_Lit_From_Pos, which
promises to raise Constraint_Error when its Pos parameter is not among
the representation values for enumeration literal. However, this promise
was only respected in builds with range checks enabled.

The root problem was that a similar comment for conversion from Uint to
Char_Code was likewise only respected in builds with range checks
enabled.

Now both routines respect promises in their comments. The behaviour of
GNAT itself is not affected. The fix is needed to filter garbage
counterexamples generated by provers for characters objects in SPARK.

gcc/ada/

	* uintp.adb (UI_To_CC): Guard against illegal inputs; reuse
	UI_To_Int.
2022-05-09 09:27:38 +00:00
Piotr Trojanek
5c8053df7b [Ada] Simplify conversions from Uint to Char_Code
Replace "Char_Code (UI_To_Int (...))" with "UI_To_CC (...).

Cleanup related to handling characters in GNATprove counterexamples;
semantics is unaffected.

gcc/ada/

	* par-prag.adb (Prag): Simplify conversion of character codes.
	* sem_case.adb (Choice_Image): Likewise.
	(Lit_Of): Likewise.
2022-05-09 09:27:38 +00:00
Justin Squirek
a252a471df [Ada] Fix invalid memory access on finalization of class-wide type
This patch corrects issues in the compiler whereby finalization of a
heap- allocated class-wide type may cause an invalid memory read at
runtime when the type in question contains a component whose type has a
large alignment.

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Tag>:
	Deal specifically wth class-wide equivalent types without a
	parent.
	* exp_util.adb (Build_Allocate_Deallocate_Proc): Extract
	allocator node for calculation of alignment actual and modify
	alignment for allocators of class-wide types with associated
	expressions.
	(Make_CW_Equivalent_Type): Handle interface types differently
	when generating the equivalent record.
	* sem_aux.adb (First_Tag_Component): Accept class-wide
	equivalent types too.
2022-05-09 09:27:38 +00:00
Etienne Servais
ebbe48015e [Ada] Fully qualify name in JSON representation info
The current termination condition of the recursion is wrong.  When in
JSON mode, names should be fully qualified. This requires to stop not at
the first encountered compilation unit but to recurse up to Standard.

gcc/ada/

	* repinfo.adb (List_Name): Rework termination condition.
2022-05-09 09:27:37 +00:00
Piotr Trojanek
a746131d37 [Ada] Remove extra space around binary operators
Style cleanups. Violation initially spotted while reading the code for
UI_Expon; other occurrences found with grep (and examined manually,
because sometimes the extra space is needed for a code layout).

gcc/ada/

	* bindgen.adb, errout.adb, exp_unst.adb, gnatchop.adb,
	libgnat/a-ngcefu.adb, libgnat/a-strunb.adb,
	libgnat/a-stwiun.adb, libgnat/a-stzunb.adb,
	libgnat/a-wtedit.adb, libgnat/g-debpoo.adb, osint.adb,
	sigtramp-vxworks.c, uintp.adb: Remove extra whitespace around +,
	-, *, / and **.
2022-05-09 09:27:37 +00:00
Piotr Trojanek
348931ea3e [Ada] Remove CodePeer annotations for pragma Loop_Variant
Pragma Loop_Variant is now expanded into a null statement in CodePeer
mode. Remove annotation related to false positives in runtime units.

gcc/ada/

	* libgnat/s-expmod.adb: Remove CodePeer annotation for pragma
	Loop_Variant.
2022-05-09 09:27:37 +00:00
Piotr Trojanek
785b1b5d43 [Ada] Prevent inlining-for-proof for calls inside ELSIF condition
In GNATprove we don't want inlining-for-proof to expand subprogram
bodies into actions attached to nodes. These actions are attached either
to expressions or to statements.

For expressions, we prevented inlining by Is_Potentially_Unevaluated.
For statements, we prevented inlining by In_While_Loop_Condition, but
forgot about actions attached to ELSIF condition.

There are no other expression or statements nodes where actions could be
attached, so this fix is exhaustive.

gcc/ada/

	* sem_util.ads (In_Statement_Condition_With_Actions): Renamed
	from In_While_Loop_Condition; move to fit the alphabetic order.
	* sem_util.adb (In_Statement_Condition_With_Actions): Detect
	Elsif condition; stop search on other statements; prevent search
	from going too far; move to fit the alphabetic order.
	* sem_res.adb (Resolve_Call): Adapt caller.
2022-05-09 09:27:36 +00:00
Piotr Trojanek
d7f5bfe407 [Ada] Remove redundant guards for empty list
Routine Has_Excluded_Declaration iterates over declarations with
First/Present/Next, which is safe when declarations are No_List.

Cleanup related to excessive inlining-for-proof by GNATprove.

gcc/ada/

	* inline.adb (Build_Body_To_Inline): Remove redundant guards.
	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Likewise.
2022-05-09 09:27:36 +00:00
Eric Botcazou
f920ab029d [Ada] Fix missing error on actual for In/Out parameter
The compiler was failing to give an error on the result of a call to the
Input attribute passed as actual for an In/Out parameter.

gcc/ada/

	* sem_util.adb (Is_OK_Variable_For_Out_Formal): Remove test on
	Comes_From_Source in the condition dealing with the expression
	of an N_Unchecked_Type_Conversion node.
2022-05-09 09:27:36 +00:00
Piotr Trojanek
00b21aa982 [Ada] Fix indentation of "Start of processing for ..." labels
The "Start of processing for ..." labels should be aligned with the
BEGIN that follows. Violations found with:

$ grep -Pzo "( *)   \-\-  Start of processing for \w+\n\n\1begin" *.adb

and corrected manually, because some of them had to be entirely removed.

Also, remove trailing semicolons found while guessing the grep pattern.

gcc/ada/

	* exp_aggr.adb, exp_ch3.adb, exp_util.adb, freeze.adb,
	gnatfind.adb, gnatlink.adb, gnatxref.adb, gprep.adb,
	libgnat/a-cfhama.adb, libgnat/g-alleve.adb, sem_ch12.adb,
	sem_ch13.adb, xr_tabls.adb: Fix style labels.
2022-05-09 09:27:35 +00:00
Justin Squirek
7ded77bbce [Ada] Improve error messages to include full package name
This patch improves error messages in the compiler so that missing
'with' error messages show the complete package name instead of a
limited number of selectors.

gcc/ada/

	* err_vars.ads: Add new error message names and nodes.
	* erroutc.adb (Set_Msg_Insertion_Name,
	Set_Msg_Insertion_Name_Literal): Likewise.
	* errout.adb (Set_Msg_Insertion_Node): Likewise.
	* errout.ads: Likewise.
	* exp_disp.adb (Check_Premature_Freezing): Modify setting of
	Error_Msg_Node_2 to occur directly before Error_Msg call where
	applicable.
	* sem_ch8.adb (Error_Missing_With_Of_Known_Unit): Added to
	handle the printing of full package names of known units.
	(Undefined, Find_Expanded_Name): Replace error printing with
	call to Error_Missing_With_Of_Known_Unit.
2022-05-09 09:27:35 +00:00
Yannick Moy
706940c2c8 [Ada] Set Error_Msg_Warn before use of << insertion
Calls to Error_Msg procedures with a message using the < or <<
insertions need to set appropriately Error_Msg_Warn. This was not done
in one call, which would lead to spurious errors when changing the
implementation of a runtime unit. This fixes it so that changes can be
applied.

gcc/ada/

	* exp_ch4.adb (Expand_Allocator_Expression): Set Error_Msg_Warn
	correctly.
2022-05-09 09:27:34 +00:00
Steve Baird
ea7967ebdf [Ada] Properly handle unprefixed references to components
In some cases, the compiler would incorrectly reject unprefixed uses of
component names in an aspect specification for the composite type.
Correct this error.

gcc/ada/

	* sem_ch13.adb (Replace_Type_Ref): In the case of an identifier
	that names a component of the type, simplify the test to decide
	whether to build a prefix for it (the prefix denotes the current
	instance of the enclosing type): if the identifier doesn't
	already have a prefix, then give it one. This isn't quite right
	in the corner case of a quantified expression or some other such
	expression that declares an object with the same name as a
	component, but it is still an improvement.
2022-05-09 09:27:34 +00:00
Ed Schonberg
09cca56d66 [Ada] Fix package installation for private array type of private element
The problem comes from the construction of Stream operations, which
happens at the point a tagged type is frozen. Streams need to see the
full view of types, so that for example the Read attribute for an array
can be expanded into a loop over the Read attribute for the component
type.  Now if during that expansion we have a private type we may need
to retrieve the full view of the type to find its structure. And the
corresponding tree must be compiled in the context of the package that
defines the type, which might not be the current package.  The problem
arises when both array and component types are private, then the
described mechanism is invoked twice.

gcc/ada/

	* exp_attr.adb (Compile_Stream_Body_In_Scope): Do not install
	package if array type and element type come from the same
	package, and the original array type is private.
2022-05-09 09:27:34 +00:00
Eric Botcazou
692a4bf88c [Ada] Fix internal error on declaration of derived discriminated record type
When the parent type has a variant part and the derived type is also
discriminated but statically selects a variant, the initialization
routine of the derived type may attempt to access components of other
variants that are no longer present.

gcc/ada/

	* exp_ch4.adb (Handle_Changed_Representation): Simplify and fix
	thinko in the loop building the constraints for discriminants.
	* exp_ch5.adb (Make_Component_List_Assign): Try also to extract
	discriminant values for a derived type.
2022-05-09 09:27:33 +00:00
Ed Schonberg
5081e9205a [Ada] Fix visibility inside declare_expression
The first implementation just created a scope for the analysis of the
declarations and the expression, so that visibility would just work as
it does for all other constructs. However this led to an annoying bug
when one of the declarations or the expression itself creates a
transient scope: there may be a confusion on scope exit between those
two scopes. As a result visibility is handled by explicit traversal of
the expression and replacement of occurrences of the local variables,
see Replace_Local_Ref in Resolve_Declare_Expression (sem_res.adb). The
current code does not take into account that there may be references to
a local object in a subsequent declaration (not just in the expression).

gcc/ada/

	* sem_res.adb (Resolve_Declare_Expression): Traverse the
	expression to replace references to local variables that occur
	within declarations of the declare_expression; fix typos in
	comments.
2022-05-09 09:27:33 +00:00
Ed Schonberg
f1231d9a0b [Ada] Fix check for looking for user defined literals
Recall that Has_Possible_Literal_Aspects only comes in if a given node
does not have any visible interpretation. If one operand is a literal we
assume that there may be a user-defined literal defined for some type to
be determined during the downward pass of resolution, but that depends
on the existence of some user-defined function or operator that can take
that literal as an actual. If analysis did not find such, the call is
illegal. I think that the following must be added to Operator_Check to
recover the proper error.

Note that this breaks current partial implementation of user-defined
literals.

gcc/ada/

	* sem_ch4.adb (Operator_Check): Fix condition.
2022-05-09 09:27:33 +00:00
Piotr Trojanek
28fffc452e [Ada] Refine description of SPARK with static Boolean expressions
A number of SPARK pragmas controlled by an optional Boolean expression
require those expressions to be static. This is now clarified in the
GNAT RM.

gcc/ada/

	* doc/gnat_rm/implementation_defined_pragmas.rst
	(Abstract_State, Async_Readers, Async_Writers,
	Constant_After_Elaboration, Effective_Reads, Effective_Writes,
	Extensions_Visible, Ghost, No_Caching, Volatile_Function): Only
	static Boolean expressions are allowed.
	* gnat_rm.texi: Regenerate.
2022-05-09 09:27:32 +00:00
Piotr Trojanek
93e7c91eb7 [Ada] Allow Big_Integer in loop and subprogram variants
In SPARK loop and subprogram variants we now allow expressions of any
discrete type and of Ada.Numerics.Big_Numbers.Big_Integers.Big_Integer
type.

gcc/ada/

	* exp_prag.adb (Expand_Pragma_Loop_Variant,
	Expand_Pragma_Subprogram_Variant): Adapt call via
	Process_Variant to Make_Variant_Comparison.
	* exp_util.adb (Make_Variant_Comparison): Compare Big_Integer
	expressions with a function call and not an operator.
	* exp_util.ads (Make_Variant_Comparison): Add type parameter,
	which is needed because the Curr_Val and Old_Val expressions
	might not be yet decorated.
	* rtsfind.ads: (RTU_Id): Add support for Big_Integers and
	Big_Integers_Ghost.
	(RE_Id): Add support for Big_Integer and its ghost variant.
	(RE_Unit_Table): Add mapping from Big_Integer to Big_Integers;
	same for the ghost variants.
	* rtsfind.adb (Get_Unit_Name): Add support for Big_Numbers.
	* sem_prag.adb (Analyze_Pragma): Allow Big_Integer in pragma
	Loop_Variant.
	(Analyze_Variant): Allow Big_Integer in pragma
	Subprogram_Variant.
2022-05-09 09:27:32 +00:00
Piotr Trojanek
2fe776e2d3 [Ada] Add utility to preanalyze assert expression without forcing its type
In SPARK loop and subprogram variants we now allow expressions of any
discrete type or of Ada.Numerics.Big_Numbers.Big_Integers.Big_Integer
type. This requires a variant of Preanalyze_Assert_Expression that
doesn't force the expression to be of a particular type, similar to the
existing variant of Analyze_And_Resolve.

gcc/ada/

	* sem_ch3.ads, sem_ch3.adb (Preanalyze_Assert_Expression): Add a
	variant that doesn't force preanalysis to yield a specific type.
2022-05-09 09:27:31 +00:00
Eric Botcazou
eb05097d55 [Ada] Revamp type resolution for comparison and equality operators
The main goal was to make it symmetrical, but this also moves error handling
entirely to the second phase of type resolution.

gcc/ada/

	* einfo.ads (Access Kinds): Reorder and beef up.
	* sem.adb (Analyze): Call Analyze_Comparison_Equality_Op for all
	comparison and equality operators.
	* sem_ch4.ads (Analyze_Comparison_Op): Delete.
	(Analyze_Equality_Op): Likewise.
	(Analyze_Comparison_Equality_Op): Declare.
	(Ambiguous_Operands): Likewise.
	* sem_ch4.adb (Ambiguous_Operands): Remove declaration.
	(Defined_In_Scope): Delete.
	(Find_Comparison_Types): Merge into...
	(Find_Equality_Types): Merge into...
	(Find_Comparison_Equality_Types): ...this.  Make fully symmetrical.
	(Analyze_Arithmetic_Op): Minor consistency tweaks.
	(Analyze_Comparison_Op): Merge into...
	(Analyze_Equality_Op): Merge into...
	(Analyze_Comparison_Equality_Op): ...this.  Make fully symmetrical.
	(Analyze_Logical_Op): Minor consistency tweaks.
	(Analyze_Membership_Op): Make fully symmetrical.
	(Analyze_One_Call): Minor comment tweak.
	(Analyze_Operator_Call): Call Find_Comparison_Equality_Types.
	(Analyze_User_Defined_Binary_Op): Make fully symmetrical.
	(Check_Arithmetic_Pair.Specific_Type): Delete.
	(Diagnose_Call): Add special handling for "+" operator.
	(Operator_Check): Call Analyze_Comparison_Equality_Op.
	* sem_ch8.adb (Has_Implicit_Operator): Add Is_Type guard for boolean
	operators, use Valid_Comparison_Arg and Valid_Equality_Arg for resp.
	comparison and equality operators.
	* sem_res.adb (Check_For_Visible_Operator): Call Is_Visible_Operator
	(Make_Call_Into_Operator): Use Preserve_Comes_From_Source.
	(Resolve_Actuals): Deal specifically with Any_Type actuals for user-
	defined comparison and equality operators.
	(Resolve_Call): Minor tweaks.
	(Resolve_Comparison_Op): Tidy up and give error for ambiguity.
	(Resolve_Equality_Op): Likewise, as well as other errors.
	(Rewrite_Renamed_Operator): Simplify.
	* sem_type.ads (Is_Invisible_Operator): Delete.
	(Is_Visible_Operator): Declare.
	(Has_Compatible_Type): Remove For_Comparison parameter.
	(Specific_Type): Declare.
	(Valid_Equality_Arg): Likewise.
	* sem_type.adb (Specific_Type): Remove declaration.
	(Add_One_Interp): Call Is_Visible_Operator for the visibility test.
	(Remove_Conversions): Rename into...
	(Remove_Conversions_And_Abstract_Operations): ...this.  Do not apply
	numeric-type treatment to Any_Type.  Expand the special handling for
	abstract interpretations to second operand.  Remove obsolete code.
	(Disambiguate): Adjust to above renaming.  Tweak to hidden case and
	call Remove_Conversions_And_Abstract_Operations for operators too.
	(Entity_Matches_Spec): Minor tweak.
	(Find_Unique_Type): Simplify and deal with user-defined literals.
	(Has_Compatible_Type): Remove For_Comparison parameter and adjust.
	Call the Is_User_Defined_Literal predicate and remove call to
	the Is_Invisible_Operator predicate.
	(Is_Invisible_Operator): Delete.
	(Is_Visible_Operator): New function.
	(Operator_Matches_Spec): Use Valid_Equality_Arg predicate.
	(Specific_Type): Tidy up, make fully symmetrical and deal with
	private views the same way as Covers.
	(Valid_Comparison_Arg): Return true for Any_Composite/Any_String.
	(Valid_Equality_Arg): New function.
	* sem_util.ads (Is_User_Defined_Literal): Declare.
	* sem_util.adb (Is_User_Defined_Literal): New function.
2022-05-09 09:27:31 +00:00
Bob Duff
320eb42df0 [Ada] Use "aspect" instead of "pragma" in warnings
For warnings related to the Unreferenced, Unmodified, and Unused
aspects, refer to the "aspect", not the "pragma". Note that the aspect
can be set by an aspect_specification or a pragma, so the term "aspect"
is correct even in the pragma case.  However, messages in sem_prag.adb
use Fix_Error, so they refer to "aspect" or "pragma". It's not clear
that we really ought to refer to "pragma", now that those are obsolete,
but de call Fix_Error for uniformity. We do not attempt to make
Fix_Error available outside sem_prag.adb -- too much trouble for
something that perhaps ought to be removed.

gcc/ada/

	* lib-xref.adb, sem_util.adb: Change wording of warning messages
	to use "aspect".
	* sem_prag.adb: Use Fix_Error to change wording of warnings.
	* doc/gnat_rm/implementation_defined_pragmas.rst: Minor: fix
	cut&paste error.
	* gnat_rm.texi: Regenerate.
2022-05-09 09:27:30 +00:00
Doug Rupp
82bd388bf0 [Ada] vx21.07: stack-checking on ppc
On VxWorks >= 7.2 and 653, signal processing code is expected to clear
the TCB exception count field when returning control back to user code.
This change arranges to do so.  It is believed that this is only an
issue in Kernel mode, and not RTP because there is no exception count
field in RTP mode and no failures have been observed.

gcc/ada/

	* init.c [vxworks] (CLEAR_EXCEPTION_COUNT): New macro.
	(__gnat_clear_exception_count): Remove.
	(__gnat_map_signal): Call CLEAR_EXCEPTION_COUNT().
2022-05-09 09:27:30 +00:00
Fedor Rybin
0e9e014cf7 [Ada] Remove gnattest section from gnat user guide
gcc/ada/

	* doc/gnat_ugn/gnat_utility_programs.rst: Remove gnattest
	section.
2022-05-09 09:27:30 +00:00
Piotr Trojanek
9a9d06f711 [Ada] Remove repeated analysis of attribute prefixes
At the beginning of Analyze_Attribute routine we analyze the attribute
prefix. There is no need to repeat this analysis in branches for
individual attributes.

Code cleanup related to various Analyze/Resolve routines.

gcc/ada/

	* sem_attr.adb (Analyze_Attribute): Remove calls to Analyze for
	attributes Identity, Priority, Ref, Restriction_Set, To_Address
	and for tasking-related attributes Callable, Terminated and
	Storage_Size.
2022-05-09 09:27:29 +00:00
Piotr Trojanek
a72fd98bf5 [Ada] Remove redundant call to Set_Etype for attribute Bit_Order
Node created by a call to New_Occurrence_Of (RTE (...), ...) has its
Etype set. There is no need to follow it with a call to Set_Etype.

Cleanup of various Analyze/Resolve routines.

gcc/ada/

	* sem_attr.adb (Analyze_Attribute): Don't call Set_Etype for
	Bit_Order attribute.
2022-05-09 09:27:29 +00:00
Piotr Trojanek
8e13160b10 [Ada] Remove doubly-negated tests for empty lists
Replace "not Is_Non_Empty_List (...)" with "Is_Empty_List (...)".

Code cleanup; semantics is unaffected.

gcc/ada/

	* exp_ch5.adb (Update_Choice_Index): Simplify condition.
	* sem_ch8.adb (Attribute_Renaming): Likewise.
2022-05-09 09:27:29 +00:00
Dmitriy Anisimkov
6b4c99cc92 [Ada] Remove unused parameter from __gnat_kill
Remove close parameter from __gnat_kill because it is not used in
implementation.

gcc/ada/

	* adaint.c (__gnat_kill): Remove close parameter.
	(__gnat_killprocesstree): Do not provide close parameter on call
	to __gnat_kill.
	* libgnat/g-expect.adb (Kill): Remove Close parameter.
	(Close): Do not provide Close parameter on call to Kill.
	(Send_Signal): Do not provide Close parameter on call to Kill.
	* libgnat/s-os_lib.adb (Kill): Do not provide close parameter on
	call to __gnat_kill.
2022-05-09 09:27:28 +00:00
Dmitriy Anisimkov
9a6f7575c1 [Ada] Stabilize exit code on close process
Call Kill before close input handler in Close routine.  Otherwise close
input handler can terminate process before Kill and exit code became
unpredictable.

gcc/ada/

	* libgnat/g-expect.adb (Close): Call Kill before Close_Input.
2022-05-09 09:27:28 +00:00
Alex Coplan
1e2334302d Enable match.pd dumping with -fdump-tree-original
I noticed that, while the C/C++ frontends invoke the GENERIC match.pd
simplifications to do early folding, the debug output from
generic-match.cc does not appear in the -fdump-tree-original output,
even with -fdump-tree-original-folding or -fdump-tree-original-all. This
patch fixes that.

For example, before the patch, for the following code:

int a[2];
void bar ();
void f()
{
    if ((unsigned long)(a + 1) == 0)
        bar ();
}

on AArch64 at -O0, -fdump-tree-original-all would give:

;; Function f (null)
;; enabled by -tree-original

{
  if (0)
    {
      bar ();
    }
}

After the patch, we get:

Applying pattern match.pd:3774, generic-match.cc:24535
Matching expression match.pd:146, generic-match.cc:23
Applying pattern match.pd:5638, generic-match.cc:13388

;; Function f (null)
;; enabled by -tree-original

{
  if (0)
    {
      bar ();
    }
}

The reason we don't get the match.pd output as it stands, is that the
original dump is treated specially in c-opts.cc: it gets its own state
which is independent from that used by other dump files in the compiler.
Like most of the compiler, the generated generic-match.cc has code of
the form:

  if (dump_file && (dump_flags & TDF_FOLDING))
    fprintf (dump_file, ...);

But, as it stands, -fdump-tree-original has its own FILE * and flags in
c-opts.cc (original_dump_{file,flags}) and never touches the global
dump_{file,flags} (managed by dumpfile.{h,cc}). This patch adjusts the
code in c-opts.cc to use the main dump infrastructure used by the rest
of the compiler, instead of treating the original dump specially.

We take the opportunity to make a small refactor: the code in
c-gimplify.cc:c_genericize can, with this change, use the global dump
infrastructure to get the original dump file and flags instead of using
the bespoke get_dump_info function implemented in c-opts.cc. With this
change, we remove the only use of get_dump_info, so this can be removed.

Note that we also fix a leak of the original dump file in
c_common_parse_file. I originally thought it might be possible to
achieve this with only one static call to dump_finish () (by simply
moving it earlier in the loop), but unfortunately the dump file is
required to be open while c_parse_final_cleanups runs, as we (e.g.)
perform some template instantiations here for C++, which need to appear
in the original dump file.

We adjust cgraph_node::get_create to avoid introducing noise in the
original dump file: without this, these "Introduced new external node"
lines start appearing in the original dump files, which breaks tests
that do a scan-tree-dump-times on the original dump looking for a
certain function name.

gcc/c-family/ChangeLog:

	* c-common.h (get_dump_info): Delete.
	* c-gimplify.cc (c_genericize): Get TDI_original dump file info
	from the global dump_manager instead of the (now obsolete)
	get_dump_info.
	* c-opts.cc (original_dump_file): Delete.
	(original_dump_flags): Delete.
	(c_common_parse_file): Switch to using global dump_manager to
	manage the original dump file; fix leak of dump file.
	(get_dump_info): Delete.

gcc/ChangeLog:

	* cgraph.cc (cgraph_node::get_create): Don't dump if the current
	symtab state is PARSING.
2022-05-09 09:43:08 +01:00
Martin Liska
22d9c8802a Come up with {,UN}LIKELY macros.
gcc/c/ChangeLog:

	* c-parser.cc (c_parser_conditional_expression): Use {,UN}LIKELY
	macros.
	(c_parser_binary_expression): Likewise.

gcc/cp/ChangeLog:

	* cp-gimplify.cc (cp_genericize_r): Use {,UN}LIKELY
	macros.
	* parser.cc (cp_finalize_omp_declare_simd): Likewise.
	(cp_finalize_oacc_routine): Likewise.

gcc/ChangeLog:

	* system.h (LIKELY): Define.
	(UNLIKELY): Likewise.
	* domwalk.cc (sort_bbs_postorder): Use {,UN}LIKELY
	macros.
	* dse.cc (set_position_unneeded): Likewise.
	(set_all_positions_unneeded): Likewise.
	(any_positions_needed_p): Likewise.
	(all_positions_needed_p): Likewise.
	* expmed.cc (flip_storage_order): Likewise.
	* genmatch.cc (dt_simplify::gen_1): Likewise.
	* ggc-common.cc (gt_pch_save): Likewise.
	* print-rtl.cc: Likewise.
	* rtl-iter.h (T>::array_type::~array_type): Likewise.
	(T>::next): Likewise.
	* rtl-ssa/internals.inl: Likewise.
	* rtl-ssa/member-fns.inl: Likewise.
	* rtlanal.cc (T>::add_subrtxes_to_queue): Likewise.
	(rtx_properties::try_to_add_dest): Likewise.
	* rtlanal.h (growing_rtx_properties::repeat): Likewise.
	(vec_rtx_properties_base::~vec_rtx_properties_base): Likewise.
	* simplify-rtx.cc (simplify_replace_fn_rtx): Likewise.
	* sort.cc (likely): Likewise.
	(mergesort): Likewise.
	* wide-int.h (wi::eq_p): Likewise.
	(wi::ltu_p): Likewise.
	(wi::cmpu): Likewise.
	(wi::bit_and): Likewise.
	(wi::bit_and_not): Likewise.
	(wi::bit_or): Likewise.
	(wi::bit_or_not): Likewise.
	(wi::bit_xor): Likewise.
	(wi::add): Likewise.
	(wi::sub): Likewise.
2022-05-09 10:39:55 +02:00
Kito Cheng
27239e13b1 RISC-V: Fix wrong expansion for arch-canonicalize
rv64gcv should exapnd into:

rv64imafdcv_zicsr_zifencei_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b

but we exapnd fd twice for now:

rv64imafdfdcv_zicsr_zifencei_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b

gcc/ChangeLog:

	* config/riscv/arch-canonicalize: Handle g correctly.
2022-05-09 11:46:42 +08:00
GCC Administrator
15f0099b21 Daily bump. 2022-05-09 00:16:19 +00:00
GCC Administrator
a1947c92f7 Daily bump. 2022-05-08 00:16:20 +00:00
Marek Polacek
0c723bb4be c, c++: attribute format on a ctor with a vbase [PR101833, PR47634]
Attribute format takes three arguments: archetype, string-index, and
first-to-check.  The last two specify the position in the function
parameter list.  r63030 clarified that "Since non-static C++ methods have
an implicit this argument, the arguments of such methods should be counted
from two, not one, when giving values for string-index and first-to-check."
Therefore one has to write

  struct D {
    D(const char *, ...) __attribute__((format(printf, 2, 3)));
  };

However -- and this is the problem in this PR -- ctors with virtual
bases also get two additional parameters: the in-charge parameter and
the VTT parameter (added in maybe_retrofit_in_chrg).  In fact we'll end up
with two clones of the ctor: an in-charge and a not-in-charge version (see
build_cdtor_clones).  That means that the argument position the user
specified in the attribute argument will refer to different arguments,
depending on which constructor we're currently dealing with.  This can
cause a range of problems: wrong errors, confusing warnings, or crashes.

This patch corrects that; for C we don't have to do anything, and in C++
we can use num_artificial_parms_for.  It would be wrong to rewrite the
attributes the user supplied, so I've changed POS to be passed by
reference so that we don't have to change all the call sites of
positional_argument and we still get the default_conversion adjustment.

Attribute format_arg is not affected, because it requires that the
function returns "const char *" which will never be the case for cdtors.

	PR c++/101833
	PR c++/47634

gcc/c-family/ChangeLog:

	* c-attribs.cc (positional_argument): Pass POS by reference.  Deal
	with FN being either a function declaration or function type.  Use
	maybe_adjust_arg_pos_for_attribute.
	* c-common.cc (check_function_arguments): Maybe pass FNDECL down to
	check_function_format.
	* c-common.h (maybe_adjust_arg_pos_for_attribute): Declare.
	(positional_argument): Adjust.
	* c-format.cc (get_constant): Rename to ...
	(validate_constant): ... this.  Take EXPR by reference.  Return bool
	instead of tree.
	(handle_format_arg_attribute): Don't overwrite FORMAT_NUM_EXPR by the
	return value of validate_constant.
	(decode_format_attr): Don't overwrite FORMAT_NUM_EXPR and
	FIRST_ARG_NUM_EXPR by the return value of validate_constant.
	(check_function_format): Adjust a parameter name.
	(handle_format_attribute): Maybe pass FNDECL down to decode_format_attr.

gcc/c/ChangeLog:

	* c-objc-common.cc (maybe_adjust_arg_pos_for_attribute): New.

gcc/cp/ChangeLog:

	* tree.cc (maybe_adjust_arg_pos_for_attribute): New.

gcc/ChangeLog:

	* tree-core.h (struct attribute_spec): Update comment for HANDLER.

gcc/testsuite/ChangeLog:

	* g++.dg/ext/attr-format-arg1.C: New test.
	* g++.dg/ext/attr-format1.C: New test.
	* g++.dg/ext/attr-format2.C: New test.
	* g++.dg/ext/attr-format3.C: New test.
2022-05-07 10:33:25 -04:00
GCC Administrator
ea3fbfda60 Daily bump. 2022-05-07 00:16:26 +00:00
Ian Lance Taylor
fa2d5fc049 compiler: remove Array_index_expression::is_lvalue_
As of CL 77510 it is never true.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/394695
2022-05-06 16:18:25 -07:00
Jonathan Wakely
42991a9116 libstdc++: Simplify std::normal_distribution equality operator
libstdc++-v3/ChangeLog:

	* include/bits/random.tcc (operator==): Only check
	normal_distribution::_M_saved_available once.
	* testsuite/26_numerics/random/normal_distribution/operators/equal.cc:
	Check equality after state changes.
	* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error
	lineno.
2022-05-06 23:54:09 +01:00
Jonathan Wakely
909ef4e272 libstdc++: Fix deserialization for std::normal_distribution [PR105502]
This fixes a regression in std::normal_distribution deserialization that
caused the object to be left unchanged if the __state_avail value read
from the stream was false.

libstdc++-v3/ChangeLog:

	PR libstdc++/105502
	* include/bits/random.tcc
	(operator>>(basic_istream<C,T>&, normal_distribution<R>&)):
	Update state when __state_avail is false.
	* testsuite/26_numerics/random/normal_distribution/operators/serialize.cc:
	Check that deserialized object equals serialized one.
2022-05-06 23:54:09 +01:00
Jason Merrill
69dd5ca348 c++: add color to function decl printing
In reading C++ diagnostics, it's often hard to find the name of the function
in the middle of the template header, return type, parameters, and template
arguments.  So let's colorize it, and maybe the template argument bindings
while we're at it.

I've somewhat arbitrarily chosen bold green for the function name, and
non-bold magenta for the template arguments.

A side-effect of this is that when this happens in a quote (i.e. %qD), the
rest of the quote after the function name is no longer bold.  I think that's
acceptable; returning to the bold would require maintaining a colorize stack
instead of the on/off controls we have now.

gcc/cp/ChangeLog:

	* error.cc (decl_to_string): Add show_color parameter.
	(subst_to_string): Likewise.
	(cp_printer): Pass it.
	(type_to_string): Set pp_show_color.
	(dump_function_name): Use "fnname" color.
	(dump_template_bindings): Use "targs" color.
	(struct colorize_guard): New.
	(reinit_cxx_pp): Clear pp_show_color.

gcc/ChangeLog:

	* diagnostic-color.cc: Add fnname and targs color entries.
	* doc/invoke.texi: Document them.

gcc/testsuite/ChangeLog:

	* g++.dg/diagnostic/function-color1.C: New test.
2022-05-06 16:34:51 -04:00
Jason Merrill
e4e053a63b vec: fix iterate comment
The comment for this overload, which copies the value out of the vector,
was mostly describing the other overload, which stores a pointer into the
vector.

gcc/ChangeLog:

	* vec.h (vec::iterate): Fix comment.
2022-05-06 16:33:58 -04:00
Jason Merrill
967cdbe662 c++: empty base constexpr adjustment [PR105245]
While looking at PR105245 in stage 4, I wanted to reorganize the code a bit,
but it seemed prudent to defer that to stage 1.

	PR c++/105245
	PR c++/100111

gcc/cp/ChangeLog:

	* constexpr.cc (cxx_eval_store_expression): Reorganize empty base
	handling.
2022-05-06 16:29:49 -04:00