platform/upstream/gcc.git
3 years ago[Ada] Improved checking for invalid index values when accessing array elements
Steve Baird [Thu, 12 Aug 2021 23:55:36 +0000 (16:55 -0700)]
[Ada] Improved checking for invalid index values when accessing array elements

gcc/ada/

* checks.ads: Define a type Dimension_Set. Add an out-mode
parameter of this new type to Generate_Index_Checks so that
callers can know for which dimensions a check was generated. Add
an in-mode parameter of this new type to
Apply_Subscript_Validity_Checks so that callers can indicate
that no check is needed for certain dimensions.
* checks.adb (Generate_Index_Checks): Implement new
Checks_Generated parameter.
(Apply_Subscript_Validity_Checks): Implement new No_Check_Needed
parameter.
* exp_ch4.adb (Expand_N_Indexed_Component): Call
Apply_Subscript_Validity_Checks in more cases than before. This
includes declaring two new local functions,
(Is_Renamed_Variable_Name,
Type_Requires_Subscript_Validity_Checks_For_Reads): To help in
deciding whether to call Apply_Subscript_Validity_Checks.
Adjust to parameter profile changes in Generate_Index_Checks and
Apply_Subscript_Validity_Checks.

3 years ago[Ada] Document rounding mode assumed for dynamic floating-point computations
Eric Botcazou [Fri, 13 Aug 2021 16:32:53 +0000 (18:32 +0200)]
[Ada] Document rounding mode assumed for dynamic floating-point computations

gcc/ada/

* doc/gnat_rm/implementation_defined_characteristics.rst: Document
the rounding mode assumed for dynamic computations as per 3.5.7(16).
* gnat_rm.texi: Regenerate.

3 years ago[Ada] More work on efficiency improvements
Bob Duff [Thu, 12 Aug 2021 20:49:16 +0000 (16:49 -0400)]
[Ada] More work on efficiency improvements

gcc/ada/

* table.ads (Table_Type): Remove "aliased"; no longer needed by
Atree.  Besides it contradicted the comment a few lines above,
"--  Note: We do not make the table components aliased...".
* types.ads: Move type Slot to Atree.
* atree.ads: Move type Slot fromt Types to here.  Move type
Node_Header from Seinfo to here.
* atree.adb: Avoid the need for aliased components of the Slots
table.  Instead of 'Access, use a getter and setter.  Misc
cleanups.
(Print_Statistics): Print statistics about node and entity kind
frequencies. Give 3 digit fractions instead of percentages.
* (Get_Original_Node_Count, Set_Original_Node_Count): Statistics
for calls to Original_Node and Set_Original_Node.
(Original_Node, Set_Original_Node): Gather statistics by calling
the above.
(Print_Field_Statistics): Print Original_Node statistics.
(Update_Kind_Statistics): Remove, and put all statistics
gathering under "if Atree_Statistics_Enabled", which is a flag
generated in Seinfo by Gen_IL.
* gen_il-gen.adb (Compute_Field_Offsets): Choose offsets of
Nkind, Ekind, and Homonym first. This causes a slight efficiency
improvement.  Misc cleanups.  Do not generate Node_Header; it is
now hand-written in Atree.  When choosing the order in which to
assign offsets, weight by the frequency of the node type, so the
more common nodes get their field offsets assigned earlier.  Add
more special cases.
(Compute_Type_Sizes): Remove this and related things.
There was a comment: "At some point we can instrument Atree to
print out accurate size statistics, and remove this code." We
have Atree statistics, so we now remove this code.
(Put_Seinfo): Generate Atree_Statistics_Enabled, which is equal
to Statistics_Enabled. This allows Atree to say "if
Atree_Statistics_Enabled then <gather statistics>" for
efficiency. When Atree_Statistics_Enabled is False, the "if ..."
will be optimized away.
* gen_il-internals.ads (Type_Frequency): New table of kind
frequencies.
* gen_il-internals.adb: Minor comment improvement.
* gen_il-fields.ads: Remove unused subtypes.  Suppress style
checks in the Type_Frequency table.  If we regenerate this
table (see -gnatd.A) we don't want to have to fiddle with
casing.
* impunit.adb: Minor.
* sinfo-utils.adb: Minor.
* debug.adb: Minor comment improvement.

3 years ago[Ada] Add missing guard before call to Interface_Present_In_Ancestor
Eric Botcazou [Thu, 12 Aug 2021 16:12:40 +0000 (18:12 +0200)]
[Ada] Add missing guard before call to Interface_Present_In_Ancestor

gcc/ada/

* sem_type.adb (Specific_Type): Check that the type is tagged
before calling Interface_Present_In_Ancestor on it.

3 years ago[Ada] Add new debug switch -gnatd.8
Eric Botcazou [Thu, 12 Aug 2021 19:45:33 +0000 (21:45 +0200)]
[Ada] Add new debug switch -gnatd.8

gcc/ada/

* debug.adb (d.8): Document usage.
* fe.h (Debug_Flag_Dot_8): Declare.

3 years ago[Ada] Spurious warning about hiding in generic instantiation
Gary Dismukes [Wed, 11 Aug 2021 22:41:28 +0000 (18:41 -0400)]
[Ada] Spurious warning about hiding in generic instantiation

gcc/ada/

* sem_util.adb (Enter_Name): Suppress hiding warning when in an
instance.

3 years ago[Ada] Crash on improper use of GNAT attribute Type_Key
Ed Schonberg [Thu, 12 Aug 2021 14:39:21 +0000 (10:39 -0400)]
[Ada] Crash on improper use of GNAT attribute Type_Key

gcc/ada/

* sem_attr.adb (Analyze_Attribute, case Type_Key): Attribute can
be applied to a formal type.
* sem_ch5.adb (Analyze_Case_Statement): If Extensions_Allowed is
not enabled, verify that the type of the expression is discrete.

3 years ago[Ada] Crash on renaming within declare expression
Justin Squirek [Thu, 12 Aug 2021 12:54:15 +0000 (08:54 -0400)]
[Ada] Crash on renaming within declare expression

gcc/ada/

* exp_dbug.adb (Debug_Renaming_Declaration): Add check for
Entity present for Ren to prevent looking at unanalyzed nodes

3 years ago[Ada] Fix CodePeer warnings
Ghjuvan Lacambre [Thu, 12 Aug 2021 13:05:23 +0000 (15:05 +0200)]
[Ada] Fix CodePeer warnings

gcc/ada/

* atree.adb (Print_Statistics): Help CodePeer see Total as
greater than zero.
* gen_il-gen.adb (One_Comp): Annotate Field_Table as Modified.

3 years ago[Ada] Add Evaluable_Kind and Global_Name_Kind
Richard Kenner [Thu, 12 Aug 2021 01:28:35 +0000 (21:28 -0400)]
[Ada] Add Evaluable_Kind and Global_Name_Kind

gcc/ada/

* gen_il-gen-gen_entities.adb (Evaluable_Kind,
Global_Name_Kind): Add.
* gen_il-types.ads (Evaluable_Kind, Global_Name_Kind): Likewise.

3 years ago[Ada] Stub CUDA_Device aspect
Ghjuvan Lacambre [Tue, 9 Feb 2021 08:31:45 +0000 (09:31 +0100)]
[Ada] Stub CUDA_Device aspect

gcc/ada/

* aspects.ads: Add CUDA_Device aspect.
* gnat_cuda.ads (Add_CUDA_Device_Entity): New subprogram.
* gnat_cuda.adb:
(Add_CUDA_Device_Entity): New subprogram.
(CUDA_Device_Entities_Table): New hashmap for CUDA_Device
entities.
(Get_CUDA_Device_Entities): New internal subprogram.
(Set_CUDA_Device_Entities): New internal subprogram.
* par-prag.adb (Prag): Handle pragma id Pragma_CUDA_Device.
* sem_prag.ads (Aspect_Specifying_Pragma): Mark CUDA_Device as
being both aspect and pragma.
* sem_prag.adb (Analyze_Pragma): Add CUDA_Device entities to
list of CUDA_Entities belonging to package N.
(Sig_Flags): Signal CUDA_Device entities as referenced.
* snames.ads-tmpl: Create CUDA_Device names and pragmas.

3 years ago[Ada] Assert_Failure on derived type with inherited Default_Initial_Condition
Gary Dismukes [Wed, 11 Aug 2021 20:49:40 +0000 (16:49 -0400)]
[Ada] Assert_Failure on derived type with inherited Default_Initial_Condition

gcc/ada/

* exp_util.adb (Build_DIC_Procedure_Body): Remove inappropriate
Assert pragma.  Remove unneeded and dead code related to derived
private types.

3 years ago[Ada] Add more node unions
Richard Kenner [Wed, 11 Aug 2021 17:12:55 +0000 (13:12 -0400)]
[Ada] Add more node unions

gcc/ada/

* gen_il-gen-gen_nodes.adb (N_Alternative, N_Is_Case_Choice):
Add.
(N_Is_Exception_Choice, N_Is_Range): Likewise.
* gen_il-types.ads: Add above names.
* gen_il-gen.adb (Put_Union_Membership): Write both declarations
and definitions of union functions.

3 years ago[Ada] Implementation of AI12-0212: iterator specs in array aggregates (II)
Ed Schonberg [Wed, 11 Aug 2021 16:52:29 +0000 (12:52 -0400)]
[Ada] Implementation of AI12-0212: iterator specs in array aggregates (II)

gcc/ada/

* exp_aggr.adb (Expand_Array_Aggregate,
Two_Pass_Aggregate_Expansion): Increment index for element
insertion within the loop, only if upper bound has not been
reached.

3 years ago[Ada] Ada2022: AI12-0195 overriding class-wide pre/postconditions
Javier Miranda [Mon, 2 Aug 2021 13:16:47 +0000 (09:16 -0400)]
[Ada] Ada2022: AI12-0195 overriding class-wide pre/postconditions

gcc/ada/

* contracts.ads (Make_Class_Precondition_Subps): New subprogram.
(Merge_Class_Conditions): New subprogram.
(Process_Class_Conditions_At_Freeze_Point): New subprogram.

* contracts.adb (Check_Class_Condition): New subprogram.
(Set_Class_Condition): New subprogram.
(Analyze_Contracts): Remove code analyzing class-wide-clone
subprogram since it is no longer built.
(Process_Spec_Postconditions): Avoid processing twice seen
subprograms.
(Process_Preconditions): Simplify its functionality to
non-class-wide preconditions.
(Process_Preconditions_For): No action needed for wrappers and
helpers.
(Make_Class_Precondition_Subps): New subprogram.
(Process_Class_Conditions_At_Freeze_Point): New subprogram.
(Merge_Class_Conditions): New subprogram.
* exp_ch6.ads (Install_Class_Preconditions_Check): New
subprogram.
* exp_ch6.adb (Expand_Call_Helper): Install class-wide
preconditions check on dispatching primitives that have or
inherit class-wide preconditions.
(Freeze_Subprogram): Remove code for null procedures with
preconditions.
(Install_Class_Preconditions_Check): New subprogram.
* exp_util.ads (Build_Class_Wide_Expression): Lower the
complexity of this subprogram; out-mode formal Needs_Wrapper
since this functionality is now provided by a new subprogram.
(Get_Mapped_Entity): New subprogram.
(Map_Formals): New subprogram.
* exp_util.adb (Build_Class_Wide_Expression): Lower the
complexity of this subprogram. Its previous functionality is now
provided by subprograms Needs_Wrapper and Check_Class_Condition.
(Add_Parent_DICs): Map the overridden primitive to the
overriding one.
(Get_Mapped_Entity): New subprogram.
(Map_Formals): New subprogram.
(Update_Primitives_Mapping): Adding assertion.
* freeze.ads (Check_Inherited_Conditions): Subprogram made
public with added formal to support late overriding.
* freeze.adb (Check_Inherited_Conditions): New implementation;
builds the dispatch table wrapper required for class-wide
pre/postconditions; added support for late overriding.
(Needs_Wrapper): New subprogram.
* sem.ads (Inside_Class_Condition_Preanalysis): New global
variable.
* sem_disp.ads (Covered_Interface_Primitives): New subprogram.
* sem_disp.adb (Covered_Interface_Primitives): New subprogram.
(Check_Dispatching_Context): Skip checking context of
dispatching calls during preanalysis of class-wide conditions
since at that stage the expression is not installed yet on its
definite context.
(Check_Dispatching_Call): Skip checking 6.1.1(18.2/5) by
AI12-0412 on helpers and wrappers internally built for
supporting class-wide conditions; for late-overriding
subprograms call Check_Inherited_Conditions to build the
dispatch-table wrapper (if required).
(Propagate_Tag): Adding call to
Install_Class_Preconditions_Check.
* sem_util.ads (Build_Class_Wide_Clone_Body): Removed.
(Build_Class_Wide_Clone_Call): Removed.
(Build_Class_Wide_Clone_Decl): Removed.
(Class_Condition): New subprogram.
(Nearest_Class_Condition_Subprogram): New subprogram.
* sem_util.adb (Build_Class_Wide_Clone_Body): Removed.
(Build_Class_Wide_Clone_Call): Removed.
(Build_Class_Wide_Clone_Decl): Removed.
(Class_Condition): New subprogram.
(Nearest_Class_Condition_Subprogram): New subprogram.
(Eligible_For_Conditional_Evaluation): No need to evaluate
class-wide conditions during preanalysis since the expression is
not installed on its definite context.
* einfo.ads (Class_Wide_Clone): Removed.
(Class_Postconditions): New attribute.
(Class_Preconditions): New attribute.
(Class_Preconditions_Subprogram): New attribute.
(Dynamic_Call_Helper): New attribute.
(Ignored_Class_Postconditions): New attribute.
(Ignored_Class_Preconditions): New attribute.
(Indirect_Call_Wrapper): New attribute.
(Is_Dispatch_Table_Wrapper): New attribute.
(Static_Call_Helper): New attribute.
* exp_attr.adb (Expand_N_Attribute_Reference): When the prefix
is of an access-to-subprogram type that has class-wide
preconditions and an indirect-call wrapper of such subprogram is
available, replace the prefix by the wrapper.
* exp_ch3.adb (Build_Class_Condition_Subprograms): New
subprogram.
(Register_Dispatch_Table_Wrappers): New subprogram.
* exp_disp.adb (Build_Class_Wide_Check): Removed; class-wide
precondition checks now rely on internally built helpers.
* sem_ch13.adb (Analyze_Aspect_Specifications): Set initial
value of attributes Class_Preconditions, Class_Postconditions,
Ignored_Class_Preconditions and Ignored_Class_Postconditions.
These values are later updated with the full pre/postcondition
by Merge_Class_Conditions.
(Freeze_Entity_Checks): Call
Process_Class_Conditions_At_Freeze_Point.
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Remove code
building the body of the class-wide clone subprogram since it is
no longer required.
(Install_Entity): Adding assertion.
* sem_prag.adb (Analyze_Pre_Post_Condition_In_Decl_Part): Remove
code building and analyzing the class-wide clone subprogram; no
longer required.
(Build_Pragma_Check_Equivalent): Adjust call to
Build_Class_Wide_Expression since the formal named Needs_Wrapper
has been removed.
* sem_attr.adb (Analyze_Attribute_Old_Result): Skip processing
these attributes during preanalysis of class-wide conditions
since at that stage the expression is not installed yet on its
definite context.
* sem_res.adb (Resolve_Actuals): Skip applying RM 3.9.2(9/1) and
SPARK RM 6.1.7(3) on actuals of internal helpers and wrappers
built to support class-wide preconditions.
* sem_ch5.adb (Process_Bounds): Do not generate a constant
declaration for the bounds when we are preanalyzing a class-wide
condition.
(Analyze_Loop_Parameter_Specification): Handle preanalysis of
quantified expression placed in the outermost expression of a
class-wide condition.
* ghost.adb (Check_Ghost_Context): No check required during
preanalysis of class-wide conditions.
* gen_il-fields.ads (Opt_Field_Enum): Adding
Class_Postconditions, Class_Preconditions,
Class_Preconditions_Subprogram, Dynamic_Call_Helper,
Ignored_Class_Postconditions, Ignored_Class_Preconditions,
Indirect_Call_Wrapper, Is_Dispatch_Table_Wrapper,
Static_Call_Helper.
* gen_il-gen-gen_entities.adb (Is_Dispatch_Table_Wrapper):
Adding semantic flag Is_Dispatch_Table_Wrapper; removing
semantic field Class_Wide_Clone; adding semantic fields for
Class_Postconditions, Class_Preconditions,
Class_Preconditions_Subprogram, Dynamic_Call_Helper,
Ignored_Class_Postconditions, Indirect_Call_Wrapper,
Ignored_Class_Preconditions, and Static_Call_Helper.

3 years ago[Ada] Fix deleting CodePeer files for non-ordinary units
Piotr Trojanek [Wed, 11 Aug 2021 15:57:55 +0000 (17:57 +0200)]
[Ada] Fix deleting CodePeer files for non-ordinary units

gcc/ada/

* comperr.adb (Delete_SCIL_Files): Handle generic subprogram
declarations and renaming just like generic package declarations
and renamings, respectively; handle
N_Subprogram_Renaming_Declaration.

3 years ago[Ada] Improve error message for .ali file version mismatch
Steve Baird [Tue, 10 Aug 2021 17:33:42 +0000 (10:33 -0700)]
[Ada] Improve error message for .ali file version mismatch

gcc/ada/

* bcheck.adb (Check_Versions): Add support for the case where
the .ali file contains both a primary and a secondary version
number, as in "GNAT Lib v22.20210809".

3 years ago[Ada] Fix bug in inherited user-defined-literal aspects for tagged types
Steve Baird [Mon, 2 Aug 2021 23:18:08 +0000 (16:18 -0700)]
[Ada] Fix bug in inherited user-defined-literal aspects for tagged types

gcc/ada/

* sem_res.adb (Resolve): Two separate fixes. In the case where
Find_Aspect for a literal aspect returns the aspect for a
different (ancestor) type, call Corresponding_Primitive_Op to
get the right callee. In the case where a downward tagged type
conversion appears to be needed, generate a null extension
aggregate instead, as per Ada RM 3.4(27).
* sem_util.ads, sem_util.adb: Add new Corresponding_Primitive_Op
function. It maps a primitive op of a tagged type and a
descendant type of that tagged type to the corresponding
primitive op of the descendant type. The body of this function
was written by Javier Miranda.

3 years ago[Ada] Info. gathering in preparation for more efficiency improvements
Bob Duff [Mon, 9 Aug 2021 23:06:18 +0000 (19:06 -0400)]
[Ada] Info. gathering in preparation for more efficiency improvements

gcc/ada/

* atree.adb: Gather and print statistics about frequency of
getter and setter calls.
* atree.ads (Print_Statistics): New procedure for printing
statistics.
* debug.adb: Document -gnatd.A switch.
* gen_il-gen.adb: Generate code for statistics gathering.
Choose the offset of Homonym early.  Misc cleanup.  Put more
comments in the generated code.
* gen_il-internals.ads (Unknown_Offset): New value to indicate
that the offset has not yet been chosen.
* gnat1drv.adb: Call Print_Statistics.
* libgnat/s-imglli.ads: Minor comment fix.
* output.ads (Write_Int_64): New procedure to write a 64-bit
value.  Needed for new statistics, and could come in handy
elsewhere.
* output.adb (Write_Int_64): Likewise.
* sinfo.ads: Remove obsolete comment. The xtreeprs program no
longer exists.
* types.ads: New 64-bit types needed for new statistics.

3 years ago[Ada] Support gmem.out longer than 2G on 32 bit platforms
Dmitriy Anisimkov [Fri, 6 Aug 2021 11:54:28 +0000 (17:54 +0600)]
[Ada] Support gmem.out longer than 2G on 32 bit platforms

gcc/ada/

* libgnat/memtrack.adb (Putc): New routine wrapped around fputc
with error check.
(Write): New routine wrapped around fwrite with error check.
Remove bound functions fopen, fwrite, fputs, fclose, OS_Exit.
Use the similar routines from System.CRTL and System.OS_Lib.

3 years ago[Ada] Spurious range checks on aggregate with non-static bounds
Ed Schonberg [Sun, 8 Aug 2021 14:34:38 +0000 (10:34 -0400)]
[Ada] Spurious range checks on aggregate with non-static bounds

gcc/ada/

* exp_aggr.adb (Must_Slide): If the aggregate only contains an
others_clause no sliding id involved. Otherwise sliding is
required if any bound of the aggregate or the context subtype is
non-static.

3 years ago[Ada] Add N_Is_Decl
Richard Kenner [Sat, 7 Aug 2021 13:21:32 +0000 (09:21 -0400)]
[Ada] Add N_Is_Decl

gcc/ada/

* gen_il-gen-gen_nodes.adb (N_Is_Decl): Add.
* gen_il-types.ads (N_Is_Decl): Likewise.

3 years ago[Ada] Add N_Entity_Name
Richard Kenner [Thu, 5 Aug 2021 21:05:40 +0000 (17:05 -0400)]
[Ada] Add N_Entity_Name

gcc/ada/

* gen_il-gen-gen_nodes.adb (N_Entity_Name): Add.
* gen_il-types.ads (N_Entity_Name): Likewise.

3 years ago[Ada] Improve error message for .ali file version mismatch
Steve Baird [Thu, 5 Aug 2021 18:18:19 +0000 (11:18 -0700)]
[Ada] Improve error message for .ali file version mismatch

gcc/ada/

* bcheck.adb (Check_Versions): In the case of an ali file
version mismatch, if distinct integer values can be extracted
from the two version strings then include those values in the
generated error message.

3 years ago[Ada] No ABE check needed for an expression function call.
Steve Baird [Thu, 5 Aug 2021 03:23:31 +0000 (20:23 -0700)]
[Ada] No ABE check needed for an expression function call.

gcc/ada/

* sem_elab.adb (Is_Safe_Call): Return True in the case of a
(possibly rewritten) call to an expression function.

3 years ago[Ada] Fix CodePeer warnings
Ghjuvan Lacambre [Wed, 4 Aug 2021 15:46:04 +0000 (17:46 +0200)]
[Ada] Fix CodePeer warnings

gcc/ada/

* sem_aggr.adb (Resolve_Iterated_Component_Association):
Initialize Id_Typ to Any_Type by default.

3 years ago[Ada] Document that gnatmem requires fixed-position executables
Eric Botcazou [Wed, 4 Aug 2021 13:07:17 +0000 (15:07 +0200)]
[Ada] Document that gnatmem requires fixed-position executables

gcc/ada/

* doc/gnat_ugn/gnat_and_program_execution.rst (gnatmem): Document
that it works only with fixed-position executables.

3 years ago[Ada] Switch to SR0660
Doug Rupp [Mon, 26 Jul 2021 20:07:30 +0000 (13:07 -0700)]
[Ada] Switch to SR0660

gcc/ada/

* libgnat/s-parame__vxworks.ads (time_t_bits): Change to
Long_Long_Integer'Size.

3 years agoDaily bump.
GCC Administrator [Fri, 1 Oct 2021 00:16:27 +0000 (00:16 +0000)]
Daily bump.

3 years agotestsuite: Fix cf-descriptor-5.f90
David Edelsohn [Thu, 30 Sep 2021 20:43:58 +0000 (16:43 -0400)]
testsuite: Fix cf-descriptor-5.f90

gcc/testsuite/ChangeLog

* gfortran.dg/c-interop/cf-descriptor-5-c.c: Include alloca.h.

3 years agoarm: Enable Cortex-R52+ CPU
Przemyslaw Wirkus [Thu, 30 Sep 2021 20:32:48 +0000 (21:32 +0100)]
arm: Enable Cortex-R52+ CPU

Patch is adding Cortex-R52+ as 'cortex-r52plus' command line
flag for -mcpu option.

gcc/ChangeLog:

* config/arm/arm-cpus.in: Add Cortex-R52+ CPU.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/arm-tune.md: Regenerate.
* doc/invoke.texi: Update docs.

3 years agoc++: __is_trivially_xible and multi-arg aggr paren init [PR102535]
Patrick Palka [Thu, 30 Sep 2021 21:34:23 +0000 (17:34 -0400)]
c++: __is_trivially_xible and multi-arg aggr paren init [PR102535]

is_xible_helper assumes only 0- and 1-argument ctors can be trivial, but
C++20 aggregate paren init means multi-arg ctors can now be trivial too.
This patch relaxes the relevant early exit check accordingly.

PR c++/102535

gcc/cp/ChangeLog:

* method.c (is_xible_helper): Don't exit early for multi-arg
ctors in C++20.

gcc/testsuite/ChangeLog:

* g++.dg/ext/is_trivially_constructible7.C: New test.

3 years agoc++: argument order in a variadic type trait intrinsic
Patrick Palka [Thu, 30 Sep 2021 21:29:18 +0000 (17:29 -0400)]
c++: argument order in a variadic type trait intrinsic

When parsing a variadic type trait intrinsic, we build up the list of
trailing arguments in reverse, but we neglect to reverse the list to
the true order afterwards.  This causes us to confuse the meaning of
e.g. __is_xible(x, y, z) vs __is_xible(x, z, y).

Note that this bug doesn't affect the library traits because they pass a
pack expansion as the single trailing argument to __is_xible, which gets
expanded in the correct order by tsubst_tree_list.

gcc/cp/ChangeLog:

* parser.c (cp_parser_trait_expr): Call nreverse on the reversed
list of trailing arguments.

gcc/testsuite/ChangeLog:

* g++.dg/ext/is_constructible6.C: New test.

3 years agoc++: defaulted comparisons and vptr fields [PR95567]
Patrick Palka [Thu, 30 Sep 2021 21:29:05 +0000 (17:29 -0400)]
c++: defaulted comparisons and vptr fields [PR95567]

We need to explicitly skip over vptr fields when synthesizing a
defaulted comparison operator, because next_initializable_field
doesn't do so for us.

PR c++/95567

gcc/cp/ChangeLog:

* method.c (build_comparison_op): Skip DECL_VIRTUAL_P fields.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/spaceship-virtual1.C: New test.

3 years agocompiler: avoid calling Expression::type before lowering
Ian Lance Taylor [Thu, 30 Sep 2021 04:48:48 +0000 (21:48 -0700)]
compiler: avoid calling Expression::type before lowering

This is a minor cleanup to ensure that the various Expression::do_type
methods don't have to worry about the possibility that the Expression
has not been lowered.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/353140

3 years agoFortran: resolve expressions during SIZE simplification
Harald Anlauf [Thu, 30 Sep 2021 18:29:31 +0000 (20:29 +0200)]
Fortran: resolve expressions during SIZE simplification

gcc/fortran/ChangeLog:

PR fortran/102458
* simplify.c (simplify_size): Resolve expressions used in array
specifications so that SIZE can be simplified.

gcc/testsuite/ChangeLog:

PR fortran/102458
* gfortran.dg/pr102458b.f90: New test.

3 years agoFortran: fix reference to Fortran standard in comment
Harald Anlauf [Thu, 30 Sep 2021 18:28:39 +0000 (20:28 +0200)]
Fortran: fix reference to Fortran standard in comment

gcc/fortran/
* expr.c: The correct reference to Fortran standard is: F2018:10.1.12.

3 years agoi386: Eliminate sign extension after logic operation [PR89954]
Uros Bizjak [Thu, 30 Sep 2021 17:33:49 +0000 (19:33 +0200)]
i386: Eliminate sign extension after logic operation [PR89954]

Convert (sign_extend:WIDE (any_logic:NARROW (memory, immediate)))
to (any_logic:WIDE (sign_extend (memory)), (sign_extend (immediate))).
This eliminates sign extension after logic operation.

2021-09-30  Uroš Bizjak  <ubizjak@gmail.com>

gcc/
PR target/89954
* config/i386/i386.md
(sign_extend:WIDE (any_logic:NARROW (memory, immediate)) splitters):
New splitters.

gcc/testsuite/
PR target/89954
* gcc.target/i386/pr89954.c: New test.

3 years agoFortran: Fix same_type_as
Tobias Burnus [Thu, 30 Sep 2021 17:08:25 +0000 (19:08 +0200)]
Fortran: Fix same_type_as

A test for CLASS(*) + assumed rank was missing; adding a test to
unlimited_polymorphic_1.f03 showed an ICE as backend_decl wasn't
set. While gfc_get_symbol_decl would fix it, the code also assumed
that the class(*) was a variable and could not be a subobject of
a derived type.

PR fortran/71703
PR fortran/84007

gcc/fortran/ChangeLog:

* trans-intrinsic.c (gfc_conv_same_type_as): Fix handling
of UNLIMITED_POLY.
* trans.h (gfc_vtpr_hash_get): Renamed prototype to ...
(gfc_vptr_hash_get): ... this to match function name.

gcc/testsuite/ChangeLog:

* gfortran.dg/c-interop/c535b-1.f90: Remove wrong comment.
* gfortran.dg/unlimited_polymorphic_1.f03: Extend.
* gfortran.dg/unlimited_polymorphic_32.f90: New test.

3 years agolibphobos: Select the appropriate exception handler in getClassInfo
Iain Buclaw [Sat, 25 Sep 2021 21:18:53 +0000 (23:18 +0200)]
libphobos: Select the appropriate exception handler in getClassInfo

This is analogous to __gdc_personality, which ignores in-flight
exceptions that we haven't collided with yet.

libphobos/ChangeLog:

* libdruntime/gcc/deh.d (ExceptionHeader.getClassInfo): Move to...
(getClassInfo): ...here as free function.  Add lsda parameter.
(scanLSDA): Pass lsda to actionTableLookup.
(actionTableLookup): Add lsda parameter, pass to getClassInfo.
(__gdc_personality): Remove currentCfa variable.

3 years agolibphobos: Print stacktrace before terminating program due to uncaught exception.
Iain Buclaw [Sat, 25 Sep 2021 21:03:41 +0000 (23:03 +0200)]
libphobos: Print stacktrace before terminating program due to uncaught exception.

By default, D run-time has a top level exception handler to catch
anything that was uncaught by user code.  However when the
`rt_trapExceptions' flag is cleared, this handler would not be enabled,
and this termination would occur, aborting the program, but without any
information about the exception.

libphobos/ChangeLog:

* libdruntime/gcc/deh.d (_d_print_throwable): Declare.
(_d_throw): Print stacktrace before terminating program due to
uncaught exception.

3 years agolibphobos: Remove unused variables in gcc.backtrace.
Iain Buclaw [Fri, 24 Sep 2021 08:49:13 +0000 (10:49 +0200)]
libphobos: Remove unused variables in gcc.backtrace.

The core.runtime module always overrides the default parameter value for
constructor calls.  MaxAlignment is not required because a class can be
created on the stack with the `scope' keyword.

libphobos/ChangeLog:

* libdruntime/core/runtime.d (runModuleUnitTests): Use scope to new
LibBacktrace on the stack.
* libdruntime/gcc/backtrace.d (FIRSTFRAME): Remove.
(LibBacktrace.MaxAlignment): Remove.
(LibBacktrace.this): Remove default initialization of firstFrame.
(UnwindBacktrace.this): Likewise.

3 years agolibphobos: Give _Unwind_Exception an alignment that best resembles __attribute__...
Iain Buclaw [Sat, 25 Sep 2021 17:50:52 +0000 (19:50 +0200)]
libphobos: Give _Unwind_Exception an alignment that best resembles __attribute__((aligned))

For interoperability with C++ EH, the alignment should match, otherwise
D may not be able to intercept exceptions thrown from C++.

libphobos/ChangeLog:

* libdruntime/gcc/unwind/generic.d (__aligned__): Define.
(_Unwind_Exception): Align struct to __aligned__.

3 years agolibphobos: Define main function as extern(C) when compiling without D runtime (PR102476)
Iain Buclaw [Fri, 24 Sep 2021 08:59:47 +0000 (10:59 +0200)]
libphobos: Define main function as extern(C) when compiling without D runtime (PR102476)

The default supplied main function as read when compiling with `-fmain'
has extern(D) linkage.  However this does not work when mixing this
option together with `-fno-druntime'.

PR d/102476

gcc/testsuite/ChangeLog:

* gdc.dg/pr102476.d: New test.

libphobos/ChangeLog:

* libdruntime/__main.di: Define main function as extern(C) when
compiling without D runtime.

3 years agolibgomp.fortran/alloc-*.f90: Add missing dg-prune-output
Tobias Burnus [Thu, 30 Sep 2021 12:44:06 +0000 (14:44 +0200)]
libgomp.fortran/alloc-*.f90: Add missing dg-prune-output

libgomp/
* testsuite/libgomp.fortran/alloc-7.f90: Add dg-prune-output
for -fintrinsic-modules-path= warning of the C compiler.
* testsuite/libgomp.fortran/alloc-9.f90: Likewise.
* testsuite/libgomp.fortran/alloc-10.f90: Likewise.

3 years agoopenmp: Add omp_aligned_{,c}alloc and omp_{c,re}alloc for Fortran
Tobias Burnus [Thu, 30 Sep 2021 12:26:46 +0000 (14:26 +0200)]
openmp: Add omp_aligned_{,c}alloc and omp_{c,re}alloc for Fortran

gcc/ChangeLog:

* omp-low.c (omp_runtime_api_call): Add omp_aligned_{,c}alloc and
omp_{c,re}alloc, fix omp_alloc/omp_free.

libgomp/ChangeLog:

* libgomp.texi (OpenMP 5.1): Set implementation status to Y for
omp_aligned_{,c}alloc and omp_{c,re}alloc routines.
* omp_lib.f90.in (omp_aligned_alloc, omp_aligned_calloc, omp_calloc,
omp_realloc): Add.
* omp_lib.h.in (omp_aligned_alloc, omp_aligned_calloc, omp_calloc,
omp_realloc): Add.
* testsuite/libgomp.fortran/alloc-10.f90: New test.
* testsuite/libgomp.fortran/alloc-6.f90: New test.
* testsuite/libgomp.fortran/alloc-7.c: New test.
* testsuite/libgomp.fortran/alloc-7.f90: New test.
* testsuite/libgomp.fortran/alloc-8.f90: New test.
* testsuite/libgomp.fortran/alloc-9.f90: New test.

3 years agotestsuite: Skip a test-case when LTO is used [PR102509]
Martin Liska [Thu, 30 Sep 2021 12:12:35 +0000 (14:12 +0200)]
testsuite: Skip a test-case when LTO is used [PR102509]

PR testsuite/102509

gcc/testsuite/ChangeLog:

* gcc.c-torture/compile/attr-complex-method.c: Skip if LTO is
  used.
* gcc.c-torture/compile/attr-complex-method-2.c: Likewise.

3 years agoDo not hide asm_out_file in ASM_OUTPUT_ASCII.
Martin Liska [Wed, 15 Sep 2021 11:52:35 +0000 (13:52 +0200)]
Do not hide asm_out_file in ASM_OUTPUT_ASCII.

gcc/ChangeLog:

* defaults.h (ASM_OUTPUT_ASCII): Do not hide global variable
asm_out_file and stream directly to MYFILE.

3 years agoRefine alingment peeling fix
Richard Biener [Thu, 30 Sep 2021 11:05:45 +0000 (13:05 +0200)]
Refine alingment peeling fix

This refines the previous fix further by reverting to the original
code since the API is a bit of a mess.  It also fixes the vector type
used to query the misalignment - that was what triggered the original
bogus change.

2021-09-30  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_update_misalignment_for_peel):
Restore and fix condition under which we apply npeel to
the DRs misalignment value.

3 years agoFix thinko in previous alignment peeling change
Richard Biener [Thu, 30 Sep 2021 08:21:36 +0000 (10:21 +0200)]
Fix thinko in previous alignment peeling change

I was mistaken in that npeel is -1 for variable peeling - it is 0.

2021-09-30  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_update_misalignment_for_peel):
Fix npeel check for variable amount of peeling.

3 years agolibstdc++: Fix preprocessor check for C++17
Jonathan Wakely [Thu, 30 Sep 2021 07:59:21 +0000 (08:59 +0100)]
libstdc++: Fix preprocessor check for C++17

libstdc++-v3/ChangeLog:

* include/bits/regex.h (basic_regex::multiline): Fix #if
condition.

3 years agoPlug possible snprintf overflow in lto-wrapper.
Aldy Hernandez [Tue, 28 Sep 2021 13:54:20 +0000 (15:54 +0200)]
Plug possible snprintf overflow in lto-wrapper.

My upcoming improvements to the DOM threader triggered a warning in
this code.  It looks like the format string is ".ltrans%u.ltrans", but
we're only writing a max of ".ltrans" + whatever the MAX_INT is here.

Tested on x86-64 Linux.

gcc/ChangeLog:

* lto-wrapper.c (run_gcc): Plug snprintf overflow.

3 years agoopenmp: Add omp_aligned_{,c}alloc and omp_{c,re}alloc
Jakub Jelinek [Thu, 30 Sep 2021 07:30:18 +0000 (09:30 +0200)]
openmp: Add omp_aligned_{,c}alloc and omp_{c,re}alloc

This patch adds new OpenMP 5.1 allocator entrypoints and in addition to that
fixes an omp_alloc bug which is hard to test for - if the first allocator
fails but has a larger alignment trait and has a fallback allocator, either
the default behavior or a user fallback, then the extra alignment will be used
even in the fallback allocation, rather than just starting with whatever
alignment has been requested (in GOMP_alloc or the minimum one in omp_alloc).

Jonathan's comment on IRC this morning made me realize that I should add
alloc_align attributes to 2 of the prototypes and I still need to add testsuite
coverage for omp_realloc, will do that in a follow-up.

2021-09-30  Jakub Jelinek  <jakub@redhat.com>

* omp.h.in (omp_aligned_alloc, omp_calloc, omp_aligned_calloc,
omp_realloc): New prototypes.
(omp_alloc): Move after omp_free prototype, add __malloc__ (omp_free)
attribute.
* allocator.c: Include string.h.
(omp_aligned_alloc): No longer static, add ialias.  Add new_alignment
variable and use it instead of alignment so that when retrying the old
alignment is used again.  Don't retry if new alignment is the same
as old alignment, unless allocator had pool size.
(omp_alloc, GOMP_alloc, GOMP_free): Use ialias_call.
(omp_aligned_calloc, omp_calloc, omp_realloc): New functions.
* libgomp.map (OMP_5.0.2): Export omp_aligned_alloc, omp_calloc,
omp_aligned_calloc and omp_realloc.
* testsuite/libgomp.c-c++-common/alloc-4.c (main): Add
omp_aligned_alloc, omp_calloc and omp_aligned_calloc tests.
* testsuite/libgomp.c-c++-common/alloc-5.c: New test.
* testsuite/libgomp.c-c++-common/alloc-6.c: New test.
* testsuite/libgomp.c-c++-common/alloc-7.c: New test.
* testsuite/libgomp.c-c++-common/alloc-8.c: New test.

3 years agoAdd gimple_ranger::debug.
Aldy Hernandez [Wed, 29 Sep 2021 18:50:20 +0000 (20:50 +0200)]
Add gimple_ranger::debug.

I'm trying to add one debug() for each dump() to the dumping aids.

Tested on x86-64 Linux.

gcc/ChangeLog:

* gimple-range.cc (gimple_ranger::debug): New.
* gimple-range.h (class gimple_ranger): Add debug.

3 years agoPlug memory leak in hybrid_threader.
Aldy Hernandez [Thu, 30 Sep 2021 00:19:36 +0000 (02:19 +0200)]
Plug memory leak in hybrid_threader.

Tested on x86-64 Linux.

gcc/ChangeLog:

PR middle-end/102519
* tree-vrp.c (hybrid_threader::~hybrid_threader): Free m_query.

3 years agoDaily bump.
GCC Administrator [Thu, 30 Sep 2021 00:16:20 +0000 (00:16 +0000)]
Daily bump.

3 years agodebug/102507: ICE in btf_finalize when compiling with -gbtf
Indu Bhagat [Wed, 29 Sep 2021 20:25:39 +0000 (13:25 -0700)]
debug/102507: ICE in btf_finalize when compiling with -gbtf

Fix the free up of btf_var_ids hash_map in btf_finalize ().

gcc/ChangeLog:

PR debug/102507
* btfout.c (GTY): Add GTY (()) albeit for cosmetic only purpose.
(btf_finalize): Empty the hash_map btf_var_ids.

3 years agoMAINTAINERS: Add myself to DCO section
Jonathan Wakely [Wed, 29 Sep 2021 20:00:30 +0000 (21:00 +0100)]
MAINTAINERS: Add myself to DCO section

ChangeLog:

* MAINTAINERS: Add myself to DCO section.

3 years ago[PR102501] Adjust jump threading testcases for ppc64* and others.
Aldy Hernandez [Tue, 28 Sep 2021 15:53:57 +0000 (17:53 +0200)]
[PR102501] Adjust jump threading testcases for ppc64* and others.

I really don't know what to do here.  This is a bit of whack-o-mole.
The IL is sufficiently different for various architectures that any
tweak can cause the number of jump threads to vary.

For the pr7745-2.c testcase, we have less threading candidates because 2
of them now cross loop boundaries.  Interestingly, this test matches
"Jumps threaded", not threads registered, so the block copier can
drop threads at copying time adding further confusion.

For example, we can register N threads, but the old copier can cancel
N-M threads while updating the CFG for a variety of different reasons
(removed edges, threading through loop exits, etc).  This makes the
"Registering jump threads" not to match the total number of threads this
test checks for with "Jumps threaded".

The pr66752-3.c test OTOH, is just a matter of thread4 eliminating the
"if".  I had erroneously thought it would always be eliminated by
thread3, but we really don't care where it gets cleaned up.  All we know
is that DCE can't depend on the early threaders doing this work, because
it may cross loop boundaries.  I've chosen thread4 arbitrarily, but we
could just as easily pick the ".optimized" dump.

Sorry, I'm really at my wits end here.  I don't see any clean path
forward, except rewrite these tests as gimple IL.  They're close to useless
as they sit.

gcc/testsuite/ChangeLog:

PR testsuite/102501
* gcc.dg/tree-ssa/pr66752-3.c: Adjust.
* gcc.dg/tree-ssa/pr77445-2.c: Adjust.

3 years agoAvoid CFG updates in VRP threader if nothing changed.
Aldy Hernandez [Wed, 29 Sep 2021 08:02:12 +0000 (10:02 +0200)]
Avoid CFG updates in VRP threader if nothing changed.

There is no need to update the CFG or SSAs if nothing has changed in VRP
threading.

gcc/ChangeLog:

* tree-vrp.c (thread_through_all_blocks): Return bool.
(execute_vrp_threader): Return TODO_* flags.
(pass_data_vrp_threader): Set todo_flags_finish to 0.

3 years agoUse a separate TV_* timer for the VRP threader.
Aldy Hernandez [Wed, 29 Sep 2021 15:16:49 +0000 (17:16 +0200)]
Use a separate TV_* timer for the VRP threader.

There seems to be a memory consumption issue on 32 bit hosts after the
hybrid threader patchset.  I'm having a hard time reproducing, and in
the process I've noticed that the threader is using the TV_TREE_VRP
timer.  Having a distinct one could help diagnose this and other
issues going forward.

gcc/ChangeLog:

* timevar.def (TV_TREE_VRP_THREADER): New.
* tree-vrp.c: Use TV_TREE_VRP_THREADER for VRP threader pass.

3 years agoFortran: fix error recovery for invalid constructor
Harald Anlauf [Wed, 29 Sep 2021 18:11:53 +0000 (20:11 +0200)]
Fortran: fix error recovery for invalid constructor

gcc/fortran/ChangeLog:

PR fortran/102520
* array.c (expand_constructor): Do not dereference NULL pointer.

gcc/testsuite/ChangeLog:

PR fortran/102520
* gfortran.dg/pr102520.f90: New test.

3 years agobpf: correct extra_headers
David Faust [Tue, 28 Sep 2021 17:29:50 +0000 (10:29 -0700)]
bpf: correct extra_headers

The BPF CO-RE support (commit 8bdabb37549f12ce727800a1c8aa182c0b1dd42a)
mistakenly overwrote bpf-*-* extra_headers in config.gcc, causing
bpf-helpers.h to not be installed. The redefinition with coreout.h is
unneeded, so delete it.

gcc/ChangeLog:

* config.gcc (bpf-*-*): Do not overwrite extra_headers.

3 years agoFix more testsuite fallout from computed goto changes
Jeff Law [Wed, 29 Sep 2021 15:21:42 +0000 (11:21 -0400)]
Fix more testsuite fallout from computed goto changes

gcc/testsuite
* gcc.c-torture/compile/920831-1.c: Fix computed goto types.
* gcc.c-torture/compile/pr27863.c: Likewise.

3 years agoaarch64: Fix type qualifiers for qtbl1 and qtbx1 Neon builtins
Jonathan Wright [Thu, 23 Sep 2021 13:27:22 +0000 (14:27 +0100)]
aarch64: Fix type qualifiers for qtbl1 and qtbx1 Neon builtins

Fix type qualifiers for qtbl1 and qtbx1 Neon builtins and remove
casts from the Neon intrinsic function bodies that use these
builtins.

gcc/ChangeLog:

2021-09-23  Jonathan Wright  <jonathan.wright@arm.com>

* config/aarch64/aarch64-builtins.c (TYPES_BINOP_PPU): Define
new type qualifier enum.
(TYPES_TERNOP_SSSU): Likewise.
(TYPES_TERNOP_PPPU): Likewise.
* config/aarch64/aarch64-simd-builtins.def: Define PPU, SSU,
PPPU and SSSU builtin generator macros for qtbl1 and qtbx1
Neon builtins.
* config/aarch64/arm_neon.h (vqtbl1_p8): Use type-qualified
builtin and remove casts.
(vqtbl1_s8): Likewise.
(vqtbl1q_p8): Likewise.
(vqtbl1q_s8): Likewise.
(vqtbx1_s8): Likewise.
(vqtbx1_p8): Likewise.
(vqtbx1q_s8): Likewise.
(vqtbx1q_p8): Likewise.
(vtbl1_p8): Likewise.
(vtbl2_p8): Likewise.
(vtbx2_p8): Likewise.

3 years agolibstdc++: Implement std::regex_constants::multiline (LWG 2503)
Jonathan Wakely [Wed, 29 Sep 2021 12:48:19 +0000 (13:48 +0100)]
libstdc++: Implement std::regex_constants::multiline (LWG 2503)

This implements LWG 2503, which allows ^ and $ to match line terminator
characters, rather than only matching the beginning and end of the
entire input. The multiline option is only valid for ECMAScript, but
for other grammars we ignore it rather than throwing an exception.

This is related to PR libstdc++/102480, which incorrectly said that
ECMAscript should match the beginning of a line when match_prev_avail
is used. I think that's only supposed to happen when multiline is used.

The new regex_constants::multiline and basic_regex::multiline constants
are not defined for strict -std=c++11 and -std=c++14 modes, but
regex_constants::__multiline is always defined, so that the
implementation can use it internally.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex.h (basic_regex::multiline): Define constant
for C++17.
* include/bits/regex_constants.h (regex_constants::multiline):
Define constant for C++17.
(regex_constants::__multiline): Define duplicate constant for
internal use in C++11 and C++14.
* include/bits/regex_executor.h (_Executor::_M_match_multiline()):
New member function.
(_Executor::_M_is_line_terminator(_CharT)): New member function.
(_Executor::_M_at_begin(), _Executor::_M_at_end()): Use new
member functions to support multiline matches.
* testsuite/28_regex/algorithms/regex_match/multiline.cc: New test.

3 years agolibstdc++: Check for invalid syntax_option_type values in <regex>
Jonathan Wakely [Wed, 29 Sep 2021 12:48:15 +0000 (13:48 +0100)]
libstdc++: Check for invalid syntax_option_type values in <regex>

The standard says that it is invalid for more than one grammar element
to be set in a value of type regex_constants::syntax_option_type. This
adds a check in the regex compiler andthrows an exception if an invalid
value is used.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex_compiler.h (_Compiler::_S_validate): New
function.
* include/bits/regex_compiler.tcc (_Compiler::_Compiler): Use
_S_validate to check flags.
* include/bits/regex_error.h (_S_grammar): New error code for
internal use.
* testsuite/28_regex/basic_regex/ctors/grammar.cc: New test.

3 years agolibstdc++: std::basic_regex should treat '\0' as an ordinary char [PR84110]
Jonathan Wakely [Wed, 29 Sep 2021 12:48:11 +0000 (13:48 +0100)]
libstdc++: std::basic_regex should treat '\0' as an ordinary char [PR84110]

When the input sequence contains a _CharT(0) character, the strchr call
in _Scanner<_CharT>::_M_scan_normal() will search for '\0' and so return
a pointer to the terminating null at the end of the string. This makes
the scanner think it's found a special character. Because it doesn't
match any of the actual special characters, we fall off the end of the
function (or assert in debug mode).

We should check for a null character explicitly and either treat it as
an ordinary character (for the ECMAScript grammar) or an error (for all
others). I'm not 100% sure that's right, but it seems consistent with
the POSIX RE rules where a '\0' means the end of the regex pattern or
the end of the sequence being matched.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/84110
* include/bits/regex_error.h (regex_constants::_S_null): New
error code for internal use.
* include/bits/regex_scanner.tcc (_Scanner::_M_scan_normal()):
Check for null character.
* testsuite/28_regex/basic_regex/84110.cc: New test.

3 years agolibstdc++: Simplify std::basic_regex construction and assignment
Jonathan Wakely [Wed, 29 Sep 2021 12:48:02 +0000 (13:48 +0100)]
libstdc++: Simplify std::basic_regex construction and assignment

Introduce a new _M_compile function which does the common work needed by
all constructors and assignment. Call that directly to avoid multiple
levels of constructor delegation or calls to basic_regex::assign
overloads.

For assignment, there is no need to construct a std::basic_string if we
already have a contiguous sequence of the correct character type, and no
need to construct a temporary basic_regex when assigning from an
existing basic_regex.

Also define the copy and move assignment operators as defaulted, which
does the right thing without constructing a temporary and swapping it.
Copying or moving the shared_ptr member cannot fail, so they can be
noexcept. The assign(const basic_regex&) and assign(basic_regex&&)
member can then be defined in terms of copy or move assignment.

The new _M_compile function takes pointer arguments, so the caller has
to convert arbitrary iterator ranges into a contiguous sequence of
characters. With that simplification, the __compile_nfa helpers are not
needed and can be removed.

This also fixes a bug where construction from a contiguous sequence with
the wrong character type would fail to compile, rather than converting
the elements to the regex character type.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex.h (__detail::__is_contiguous_iter): Move
here from <bits/regex_compiler.h>.
(basic_regex::_M_compile): New function to compile an NFA from
a regular expression string.
(basic_regex::basic_regex): Use _M_compile instead of delegating
to other constructors.
(basic_regex::operator=(const basic_regex&)): Define as
defaulted.
(basic_regex::operator=(initializer_list<C>)): Use _M_compile.
(basic_regex::assign(const basic_regex&)): Use copy assignment.
(basic_regex::assign(basic_regex&&)): Use move assignment.
(basic_regex::assign(const C*, flag_type)): Use _M_compile
instead of constructing a temporary string.
(basic_regex::assign(const C*, size_t, flag_type)): Likewise.
(basic_regex::assign(const basic_string<C,T,A>&, flag_type)):
Use _M_compile instead of constructing a temporary basic_regex.
(basic_regex::assign(InputIter, InputIter, flag_type)): Avoid
constructing a temporary string for contiguous iterators of the
right value type.
* include/bits/regex_compiler.h (__is_contiguous_iter): Move to
<bits/regex.h>.
(__enable_if_contiguous_iter, __disable_if_contiguous_iter)
(__compile_nfa): Remove.
* testsuite/28_regex/basic_regex/assign/exception_safety.cc: New
test.
* testsuite/28_regex/basic_regex/ctors/char/other.cc: New test.

3 years agotestsuite/102517 - fix FAIL of gcc.dg/pr78408-1.c with OImode availability
Richard Biener [Wed, 29 Sep 2021 12:32:32 +0000 (14:32 +0200)]
testsuite/102517 - fix FAIL of gcc.dg/pr78408-1.c with OImode availability

This fixes the testcase which looks for variants of memcpy after
memset folding which is disturbed when we expand the memcpy inline
earlier which in fact performs the desired optimization but makes
the dump file not match.  For the ease of testing the following
adjusts the smaller structure size to be no longer power-of-two
which avoids the inline expansion.

2021-09-29  Richard Biener  <rguenther@suse.de>

PR testsuite/102517
* gcc.dg/pr78408-1.c: Make S not power-of-two size.

3 years agoFix peeling for alignment with negative step
Richard Biener [Wed, 29 Sep 2021 09:18:23 +0000 (11:18 +0200)]
Fix peeling for alignment with negative step

The following fixes a regression causing us to no longer peel
negative step loops for alignment.  With dr_misalignment now
applying the bias for negative step we have to do the reverse
when adjusting the misalignment for peeled DRs.

2021-09-29  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_dr_misalign_for_aligned_access):
New helper.
(vect_update_misalignment_for_peel): Use it to update
misaligned to the value necessary for an aligned access.
(vect_get_peeling_costs_all_drs): Likewise.
(vect_enhance_data_refs_alignment): Likewise.

* gcc.target/i386/vect-alignment-peeling-1.c: New testcase.
* gcc.target/i386/vect-alignment-peeling-2.c: Likewise.

3 years agoaarch64: Improve size heuristic for cpymem expansion
Kyrylo Tkachov [Wed, 29 Sep 2021 10:21:45 +0000 (11:21 +0100)]
aarch64: Improve size heuristic for cpymem expansion

Similar to my previous patch for setmem this one does the same for the cpymem expansion.
We count the number of ops emitted and compare it against the alternative of just calling
the library function when optimising for size.
For the code:
void
cpy_127 (char *out, char *in)
{
  __builtin_memcpy (out, in, 127);
}

void
cpy_128 (char *out, char *in)
{
  __builtin_memcpy (out, in, 128);
}

we now emit a call to memcpy (with an extra MOV-immediate instruction for the size) instead of:
cpy_127(char*, char*):
        ldp     q0, q1, [x1]
        stp     q0, q1, [x0]
        ldp     q0, q1, [x1, 32]
        stp     q0, q1, [x0, 32]
        ldp     q0, q1, [x1, 64]
        stp     q0, q1, [x0, 64]
        ldr     q0, [x1, 96]
        str     q0, [x0, 96]
        ldr     q0, [x1, 111]
        str     q0, [x0, 111]
        ret
cpy_128(char*, char*):
        ldp     q0, q1, [x1]
        stp     q0, q1, [x0]
        ldp     q0, q1, [x1, 32]
        stp     q0, q1, [x0, 32]
        ldp     q0, q1, [x1, 64]
        stp     q0, q1, [x0, 64]
        ldp     q0, q1, [x1, 96]
        stp     q0, q1, [x0, 96]
        ret

which is a clear code size win. Speed optimisation heuristics remain unchanged.

2021-09-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/aarch64/aarch64.c (aarch64_expand_cpymem): Count number of
emitted operations and adjust heuristic for code size.

2021-09-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* gcc.target/aarch64/cpymem-size.c: New test.

3 years agoaarch64: Improve size optimisation heuristic for setmem expansion
Kyrylo Tkachov [Wed, 29 Sep 2021 10:00:14 +0000 (11:00 +0100)]
aarch64: Improve size optimisation heuristic for setmem expansion

This patch adjusts the setmem expansion in the backend to track the number of ops it generates
for the DUP + STR/STP inline sequences. This way we can compare the size/complexity of the sequence
against alternatives, notably just returning "false" and thus just emitting a call to memset.

The simple heuristic change here is that if we were going to emit more than 4 operations then
we shouldn't bother and just call memset. The number 4 is chosen because in the worst case for memset
we need to emit 4 instructions: 3 to move the arguments into the right registers and 1 for the call.

The speed optimisation decisions are not affected, though I do want to extend these expansions in a later
patch and I'd like to reuse this ops counting logic there. In any case this patch should make sense on its own.

For the code:
void __attribute__((__noinline__))
set127byte (int64_t *src, int c)
{
  __builtin_memset (src, c, 127);
}

void __attribute__((__noinline__))
set128byte (int64_t *src, int c)
{
  __builtin_memset (src, c, 128);
}

when optimising for size we now get just an immediate move + a call to memset (2 instructions) where before we'd have generated:
set127byte(long*, int):
        dup     v0.16b, w1
        str     q0, [x0, 96]
        stp     q0, q0, [x0]
        stp     q0, q0, [x0, 32]
        stp     q0, q0, [x0, 64]
        str     q0, [x0, 111]
        ret
set128byte(long*, int):
        dup     v0.16b, w1
        stp     q0, q0, [x0]
        stp     q0, q0, [x0, 32]
        stp     q0, q0, [x0, 64]
        stp     q0, q0, [x0, 96]
        ret

which is clearly undesirable for -Os.

I've adjusted the recently-added gcc.target/aarch64/memset-strict-align-1.c testcase to use a bigger struct
and switch to speed optimisation as with this patch we'll just call memset rather than expanding inline.
That is the right decision for size optimisation (the resulting code is indeed shorter).
With -O2 and the new struct size we still try the SIMD expansion and still trigger the path that the testcase is supposed to exercise.

2021-09-27  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/aarch64/aarch64.c (aarch64_expand_setmem): Count number of
emitted operations and adjust heuristic for code size.

2021-09-27  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* gcc.target/aarch64/memset-corner-cases-2.c: New test.
* gcc.target/aarch64/memset-strict-align-1.c: Adjust.

3 years agoopenmp: Disallow reduction with var private in containing parallel even on scope...
Jakub Jelinek [Wed, 29 Sep 2021 08:17:52 +0000 (10:17 +0200)]
openmp: Disallow reduction with var private in containing parallel even on scope [PR102504]

The standard has a restriction:
"A list item that appears in a reduction clause of a scope construct must be
shared in the parallel region to which a corresponding scope region binds."
similar to the restriction for worksharing constructs, but we were checking
it only on worksharing constructs and not for scope and ICEd later on during
omp expansion.

2021-09-29  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/102504
* gimplify.c (gimplify_scan_omp_clauses): Use omp_check_private even
in OMP_SCOPE clauses, not just on worksharing construct clauses.

* c-c++-common/gomp/scope-4.c: New test.

3 years agoFix some testcases after my computed goto patch
Andrew Pinski [Wed, 29 Sep 2021 02:01:52 +0000 (02:01 +0000)]
Fix some testcases after my computed goto patch

For some reason I did not see these failures in my testing.
Sorry about that.  Anyways this fixes the testcases by
adding a cast to __INTPTR_TYPE__ and then a cast to void*.

Committed after testing them on x86_64-linux-gnu.

gcc/testsuite/ChangeLog:

* gcc.c-torture/compile/920826-1.c: Fix computed goto.
* gcc.c-torture/compile/pr27863.c: Likewise.
* gcc.c-torture/compile/pr70190.c: Likewise.
* gcc.dg/torture/pr89135.c: Likewise.
* gcc.dg/torture/pr90071.c: Likewise.
* gcc.dg/vect/bb-slp-pr97709.c: Likewise.

3 years agoAvoid memcpy inline expansion in gcc.dg/out-of-bounds-1.c
Richard Biener [Wed, 29 Sep 2021 06:06:09 +0000 (08:06 +0200)]
Avoid memcpy inline expansion in gcc.dg/out-of-bounds-1.c

This avoids inline expansion to preserve the warning by making
the memcpy size a non-power-of-two as suggested by Martin Sebor.

2021-09-29  Richard Biener  <rguenther@suse.de>

* gcc.dg/out-of-bounds-1.c: Make memcpied size not power-of-two.

3 years agoDaily bump.
GCC Administrator [Wed, 29 Sep 2021 00:16:26 +0000 (00:16 +0000)]
Daily bump.

3 years agoRISC-V: Pattern name fix mul*3_highpart -> smul*3_highpart.
Geng Qi [Mon, 27 Sep 2021 11:37:45 +0000 (19:37 +0800)]
RISC-V: Pattern name fix mul*3_highpart -> smul*3_highpart.

No known code changes, just fixes an inconsistency that was noticed.

gcc/
* config/riscv/riscv.md (mulv<mode>4): Call gen_smul<mode>3_highpart.
(<u>mulditi3): Call <su>muldi3_highpart.
(<u>muldi3_highpart): Rename to <su>muldi3_highpart.
(<u>mulsidi3): Call <su>mulsi3_highpart.
(<u>mulsi3_highpart): Rename to <su>mulsi3_highpart.

3 years agoc++: ttp matching with constrained auto parm [PR99909]
Patrick Palka [Tue, 28 Sep 2021 21:26:20 +0000 (17:26 -0400)]
c++: ttp matching with constrained auto parm [PR99909]

Here, when unifying TT with S, processing_template_decl is unset, and
this foils the dependence checks in do_auto_deduction for avoiding
checking constraints on an auto when the initializer is dependent.

This patch fixes this by making sure processing_template_decl is set
around the call to unify from coerce_template_template_parms; this seems
sensible because we're unifying one set of template parameters with
another, so we're dealing with templated trees throughout.

PR c++/99909

gcc/cp/ChangeLog:

* pt.c (coerce_template_template_parms): Keep
processing_template_decl set around the call to unify as well.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-ttp3.C: New test.

3 years agolibstdc++: Fix return values for atomic wait on futex
Jonathan Wakely [Tue, 28 Sep 2021 19:41:46 +0000 (20:41 +0100)]
libstdc++: Fix return values for atomic wait on futex

This fixes a logic error in the futex-based timed wait.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/atomic_timed_wait.h (__platform_wait_until_impl):
Return false for ETIMEDOUT and true otherwise.

3 years agolibstdc++: Fix 48631_neg test in _GLIBCXX_INLINE_VERSION mode
François Dumont [Tue, 28 Sep 2021 19:45:08 +0000 (21:45 +0200)]
libstdc++: Fix 48631_neg test in _GLIBCXX_INLINE_VERSION mode

libstdc++-v3/ChangeLog:

* testsuite/20_util/default_delete/48631_neg.cc: Adapt dg-prune-output message
to also match message with '__8' in it.

3 years agoc: [PR32122] Require pointer types for computed gotos
Andrew Pinski [Fri, 17 Sep 2021 04:59:03 +0000 (04:59 +0000)]
c: [PR32122] Require pointer types for computed gotos

So GCC has always accepted non-pointer types in computed gotos but
that was wrong based on the documentation:
Any expression of type void * is allowed.

So this fixes the problem by requiring the type to
be a pointer type.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

PR c/32122

gcc/c/ChangeLog:

* c-parser.c (c_parser_statement_after_labels): Pass
the c_expr instead of the tree to c_finish_goto_ptr.
* c-typeck.c (c_finish_goto_ptr): Change the second
argument type to c_expr.
* c-tree.h (c_finish_goto_ptr): Likewise.
Error out if the expression was not of a pointer type.

gcc/testsuite/ChangeLog:

* gcc.dg/comp-goto-5.c: New test.
* gcc.dg/comp-goto-6.c: New test.

3 years agolibstdc++: Remove obfuscating typedefs in <regex>
Jonathan Wakely [Tue, 28 Sep 2021 12:39:36 +0000 (13:39 +0100)]
libstdc++: Remove obfuscating typedefs in <regex>

There is no benefit to using _SizeT instead of size_t, and IterT tells
you less about the type than const _CharT*. This removes some unhelpful
typedefs.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex_automaton.h (_NFA_base::_SizeT): Remove.
* include/bits/regex_compiler.h (_Compiler::_IterT): Remove.
* include/bits/regex_compiler.tcc: Likewise.
* include/bits/regex_scanner.h (_Scanner::_IterT): Remove.
* include/bits/regex_scanner.tcc: Likewise.

3 years agolibstdc++: Tweaks to <regex> to avoid warnings
Jonathan Wakely [Mon, 27 Sep 2021 19:44:24 +0000 (20:44 +0100)]
libstdc++: Tweaks to <regex> to avoid warnings

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex_compiler.tcc: Add line break in empty while
statement.
* include/bits/regex_executor.tcc: Avoid unused parameter
warning.

3 years agolibstdc++: Add noexcept to functions in <regex>
Jonathan Wakely [Mon, 27 Sep 2021 19:42:17 +0000 (20:42 +0100)]
libstdc++: Add noexcept to functions in <regex>

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/regex.h (basic_regex, swap): Add noexcept to
non-throwing functions.
* include/bits/regex_automaton.h (_State_base, _State)
(_NFA_base): Likewise.
* include/bits/regex_compiler.h (_Compiler): Likewise.
* include/bits/regex_error.h (regex_error::code()): Likewise.
* include/bits/regex_scanner.h (_Scanner): Likewise.

3 years agolibstdc++: Define macro before it is first checked
Jonathan Wakely [Tue, 31 Aug 2021 14:51:09 +0000 (15:51 +0100)]
libstdc++: Define macro before it is first checked

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/atomic_wait.h (_GLIBCXX_HAVE_PLATFORM_WAIT):
Define before first attempt to check it.

3 years agoDarwin, D : Add .d suffix to the list for invoking dsymutil.
Iain Sandoe [Fri, 11 Dec 2020 00:34:39 +0000 (00:34 +0000)]
Darwin, D : Add .d suffix to the list for invoking dsymutil.

Recognise .d for D source files on the command line.  This will
trigger an invocation of dsymutil when a D source is present.

gcc/ChangeLog:

* config/darwin.h (DSYMUTIL_SPEC): Recognize D sources.

3 years agolibstdc++: Skip container adaptor tests that fail concept checks
Jonathan Wakely [Fri, 24 Sep 2021 13:32:34 +0000 (14:32 +0100)]
libstdc++: Skip container adaptor tests that fail concept checks

As an extension, our container adaptors SFINAE away the default
constructor if the adapted sequence container is not default
constructible. When _GLIBCXX_CONCEPT_CHECKS is defined we enforce that
the sequence is default constructible, so the tests for the extension
fail. This disables the relevant parts of the tests.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1.cc:
Do not check non-default constructible sequences when
_GLIBCXX_CONCEPT_CHECKS is defined.
* testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++98.cc:
Likewise.
* testsuite/23_containers/queue/requirements/explicit_instantiation/1.cc:
Likewise.
* testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++98.cc:
Likewise.
* testsuite/23_containers/stack/requirements/explicit_instantiation/1.cc:
Likewise.
* testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++98.cc:
Likewise.

3 years agolibstdc++: Skip tests that fail with _GLIBCXX_CONCEPT_CHECKS
Jonathan Wakely [Fri, 24 Sep 2021 13:23:36 +0000 (14:23 +0100)]
libstdc++: Skip tests that fail with _GLIBCXX_CONCEPT_CHECKS

The extension that allows implicitly rebinding a container's allocator
is not allowed when _GLIBCXX_CONCEPT_CHECKS is defined, so skip the
tests for that extension.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/23_containers/deque/requirements/explicit_instantiation/3.cc:
Do not test implicit allocator rebinding when _GLIBCXX_CONCEPT_CHECKS
is defined.
* testsuite/23_containers/forward_list/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/list/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/list/requirements/explicit_instantiation/5.cc:
Likewise.
* testsuite/23_containers/map/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/map/requirements/explicit_instantiation/5.cc:
Likewise.
* testsuite/23_containers/multimap/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/multimap/requirements/explicit_instantiation/5.cc:
Likewise.
* testsuite/23_containers/multiset/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/multiset/requirements/explicit_instantiation/5.cc:
Likewise.
* testsuite/23_containers/set/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/set/requirements/explicit_instantiation/5.cc:
Likewise.
* testsuite/23_containers/unordered_map/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/unordered_multimap/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/unordered_multiset/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/unordered_set/requirements/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/vector/ext_pointer/explicit_instantiation/3.cc:
Likewise.
* testsuite/23_containers/vector/requirements/explicit_instantiation/3.cc:
Likewise.

3 years agolibstdc++: Fix concept checks for iterators
Jonathan Wakely [Fri, 24 Sep 2021 12:56:33 +0000 (13:56 +0100)]
libstdc++: Fix concept checks for iterators

This adds some additional checks the the C++98-style concept checks for
iterators, and removes some bogus checks for mutable iterators. Instead
of requiring that the result of dereferencing a mutable iterator is
assignable (which is a property of the value type, not required for the
iterator) check that the reference type is a non-const reference to the
value type.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/boost_concept_check.h (_ForwardIteratorConcept)
(_BidirectionalIteratorConcept, _RandomAccessIteratorConcept):
Check result types of iterator operations.
(_Mutable_ForwardIteratorConcept): Check that iterator's
reference type is a reference to its value type.
(_Mutable_BidirectionalIteratorConcept): Do not require the
value type to be assignable.
(_Mutable_RandomAccessIteratorConcept): Likewise.
* testsuite/24_iterators/operations/prev_neg.cc: Adjust dg-error
line number.

3 years agolibstdc++: Improve types used as iterators in testsuite
Jonathan Wakely [Fri, 24 Sep 2021 12:23:34 +0000 (13:23 +0100)]
libstdc++: Improve types used as iterators in testsuite

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/25_algorithms/copy/34595.cc: Add missing operation
for type used as an iterator.
* testsuite/25_algorithms/unique_copy/check_type.cc: Likewise.

3 years agolibstdc++: Fix tests that use invalid types in ordered containers
Jonathan Wakely [Fri, 24 Sep 2021 12:21:34 +0000 (13:21 +0100)]
libstdc++: Fix tests that use invalid types in ordered containers

Types used in ordered containers need to be comparable, or the container
needs to use a custom comparison function. These tests fail when
_GLIBCXX_CONCEPT_CHECKS is defined, because the element types aren't
comparable.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* testsuite/20_util/is_nothrow_swappable/value.h: Use custom
comparison function for priority_queue of type with no
relational operators.
* testsuite/20_util/is_swappable/value.h: Likewise.
* testsuite/24_iterators/output/concept.cc: Add operator< to
type used in set.

3 years agolibstdc++: Fix _OutputIteratorConcept checks in algorithms
Jonathan Wakely [Fri, 24 Sep 2021 14:35:20 +0000 (15:35 +0100)]
libstdc++: Fix _OutputIteratorConcept checks in algorithms

The _OutputIteratorConcept should be checked using the correct value
category. The std::move_backward and std::copy_backward algorithms
should use _OutputIteratorConcept instead of _ConvertibleConcept.

In order to use the correct value category, the concept should use a
function that returns _ValueT instead of using an lvalue data member.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/boost_concept_check.h (_OutputIteratorConcept):
Use a function to preserve value category of the type.
* include/bits/stl_algobase.h (copy, move, fill_n): Use a
reference as the second argument for _OutputIteratorConcept.
(copy_backward, move_backward): Use _OutputIteratorConcept
instead of _ConvertibleConcept.

3 years agolibstdc++: Specialize std::pointer_traits<__normal_iterator<I,C>>
Jonathan Wakely [Tue, 28 Sep 2021 14:26:46 +0000 (15:26 +0100)]
libstdc++: Specialize std::pointer_traits<__normal_iterator<I,C>>

This allows std::__to_address to be used with __normal_iterator in
C++11/14/17 modes. Without the partial specialization the deduced
pointer_traits::element_type is incorrect, and so the return type of
__to_address is wrong.

A similar partial specialization is probably needed for
__gnu_debug::_Safe_iterator.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/stl_iterator.h (pointer_traits): Define partial
specialization for __normal_iterator.
* testsuite/24_iterators/normal_iterator/to_address.cc: New test.

3 years agoDarwin, PPC : Fix R13 for PPC64.
Iain Sandoe [Fri, 11 Dec 2020 00:29:42 +0000 (00:29 +0000)]
Darwin, PPC : Fix R13 for PPC64.

We have a somewhat unusual situation in that for PPC64, R13 is
both reserved and callee-saved (it is used internally by the
pthreads implementation to contain pthread_self).

So add R13 to the fixed regs, but also keep it in the callee-
saved set.

gcc/ChangeLog:

* config/rs6000/darwin.h (FIXED_R13): Add for PPC64.
(FIRST_SAVED_GP_REGNO): Save from R13 even when it is one
of the fixed regs.

3 years agolibgcc, X86, Darwin: Export cpu_model and indicator.
Iain Sandoe [Sun, 19 Sep 2021 19:36:49 +0000 (20:36 +0100)]
libgcc, X86, Darwin: Export cpu_model and indicator.

These two symbols have been emitted since 4.8, but were not added
to the Darwin exports, so we have been using the ones from libgcc.a.

Added to libgcc_s now.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
libgcc/ChangeLog:

* config/i386/libgcc-darwin.ver: Add Symbols for
__cpu_model, __cpu_indicator_init.

3 years agocoroutines: Only set parm copy guard vars if we have exceptions [PR 102454].
Iain Sandoe [Mon, 27 Sep 2021 19:21:40 +0000 (20:21 +0100)]
coroutines: Only set parm copy guard vars if we have exceptions [PR 102454].

For coroutines, we make copies of the original function arguments into
the coroutine frame.  Normally, these are destroyed on the proper exit
from the coroutine when the frame is destroyed.

However, if an exception is thrown before the first suspend point is
reached, the cleanup has to happen in the ramp function.  These cleanups
are guarded such that they are only applied to any param copies actually
made.

The ICE is caused by an attempt to set the guard variable when there are
no exceptions enabled (the guard var is not created in this case).

Fixed by checking for flag_exceptions in this case too.

While touching this code paths, also clean up the synthetic names used
when a function parm is unnamed.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
PR c++/102454

gcc/cp/ChangeLog:

* coroutines.cc (analyze_fn_parms): Clean up synthetic names for
unnamed function params.
(morph_fn_to_coro): Do not try to set a guard variable for param
DTORs in the ramp, unless we have exceptions active.

gcc/testsuite/ChangeLog:

* g++.dg/coroutines/pr102454.C: New test.

3 years agolibstdc++: Improve std::forward static assert message
Jonathan Wakely [Tue, 28 Sep 2021 11:35:29 +0000 (12:35 +0100)]
libstdc++: Improve std::forward static assert message

The previous message told you something was wrong, but not why it
happened or why it's bad. This changes it to explain that the function
is being misused.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

* include/bits/move.h (forward(remove_reference_t<T>&&)):
Improve text of static_assert.
* testsuite/20_util/forward/c_neg.cc: Adjust dg-error.
* testsuite/20_util/forward/f_neg.cc: Likewise.

3 years agolibstdc++: Fix mismatched noexcept-specifiers in filesystem::path [PR102499]
Jonathan Wakely [Mon, 27 Sep 2021 21:07:12 +0000 (22:07 +0100)]
libstdc++: Fix mismatched noexcept-specifiers in filesystem::path [PR102499]

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/102499
* include/bits/fs_path.h (path::begin, path::end): Add noexcept
to declarations, to match definitions.

3 years agoaarch64: Add command-line support for Armv8.7-a
Kyrylo Tkachov [Tue, 28 Sep 2021 15:13:26 +0000 (16:13 +0100)]
aarch64: Add command-line support for Armv8.7-a

This patch adds support for -march=armv8.7-a in GCC.
It adds the +ls64 extension that's included in this architecture revision.
Currently this is just the command-line option and +ls64 allows the relevant instructions
to be used in inline assembly. The ACLE defines some intrinsics for them but those can be
added separately later (together with the appropriate __ARM_FEATURE_* predefine).

2021-09-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

* config/aarch64/aarch64.h (AARCH64_FL_LS64): Define
(AARCH64_FL_V8_7): Likewise.
(AARCH64_FL_FOR_ARCH8_7): Likewise.
* config/aarch64/aarch64-arches.def (armv8.7-a): Define.
* config/aarch64/aarch64-option-extensions.def (ls64): Define.
* doc/invoke.texi: Document the above.