gcc.git
4 years ago[Ada] Basic support for 128-bit types
Eric Botcazou [Fri, 7 Aug 2020 13:41:06 +0000 (15:41 +0200)]
[Ada] Basic support for 128-bit types

gcc/ada/

* Makefile.rtl (GNATRTL_128BIT_PAIRS): New variable.
(GNATRTL_128BIT_OBJS): Likewise.
(Windows): In 64-bit mode, add the former to LIBGNAT_TARGET_PAIRS and
the latter to EXTRA_GNATRTL_NONTASKING_OBJS.
(x86_64/linux): Likewise, but unconditionally.
(GNATRTL_NONTASKING_OBJS): Add s-aridou, s-exponn, s-expont,
s-exponu.
* ada_get_targ.adb (Get_Long_Long_Long_Size): New function.
* checks.adb (Apply_Arithmetic_Overflow_Strict): Use Integer_Type_For
to find an appropriate integer type; if it does not exist and the max
integer size is larger than 64, use the 128-bit arithmetic routines.
* cstand.adb (Create_Standard): Build Standard_Long_Long_Long_Integer
and its base type.  Use it for Etype of Any_Integer, Any_Modular and
Any_Numeric.  Use its size for Build Standard_Long_Long_Long_Unsigned
and Universal_Integer.
(Print_Standard): Print Long_Long_Long_Integer.
* exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Mod>: Adjust
comment.
* exp_ch3.adb (Simple_Init_Initialize_Scalars_Type): Deal with 128-bit
types.
* exp_ch4.adb (Expand_Array_Comparison): Likewise.
(Expand_N_Op_Expon): Likewise.
(Narrow_Large_Operation): Likewise.
* exp_dbug.adb (Bounds_Match_Size): Handle 128-bit size.
* exp_fixd.adb (Build_Double_Divide_Code): Use RE_Double_Divide64.
* exp_intr.adb (Expand_Binary_Operator_Call): Handle 128-bit size.
* exp_pakd.ads (E_Array): Extend range to 127.
(Bits_Id): Fill in up to 127.
(Get_Id): Likewise.
(GetU_Id): Likewise.
(Set_Id): Likewise.
(SetU_Id): Likewise.
* exp_pakd.adb (Revert_Storage_Order): Handle 128-bit size.
* exp_util.adb (Integer_Type_For): Likewise.
(Small_Integer_Type_For): Likewise.
* fname.adb (Is_Predefined_File_Name): Do not return False for names
larger than 12 characters if they start with "s-".
* freeze.adb (Adjust_Esize_For_Alignment): Change the maximum value
to System_Max_Integer_Size.
(Check_Suspicious_Modulus): Adjust comment.
(Freeze_Entity): Likewise.
* get_targ.ads (Get_Long_Long_Long_Size): New function.
* get_targ.adb (Get_Long_Long_Long_Size): Likewise.
(Width_From_Size): Deal with 128-bit size.
* gnat1drv.adb (Adjust_Global_Switches): Deal with 128-bit types.
* impunit.adb (Get_Kind_Of_File): Bump buffer size.  Accept files with
13 characters if they start with 's'.  Compare slice of Buffer.
(Not_Impl_Defined_Unit): Accept files with 13 characters if they start
with 's'.
* krunch.ads: Document length for 128-bit support units.
* krunch.adb (Krunch): Set length to 9 for 128-bit support units.
* layout.adb (Layout_Type): Use System_Max_Integer_Size as alignment
limit.
* rtsfind.ads (RTU_Id): Add System_Arith_128,
System_Compare_Array_Signed_128, System_Compare_Array_Unsigned_128,
System_Exn_LLLI, System_Exp_LLLU, System_Pack_[65..127].
(RE_Id): Add RE_Integer_128, RE_Unsigned_128, RE_Add_With_Ovflo_Check128
RE_Multiply_With_Ovflo_Check128, RE_Subtract_With_Ovflo_Check128,
RE_Bswap_128, RE_Compare_Array_S128, RE_Compare_Array_U128,
RE_Exn_Long_Long_Long_Integer, RE_Exp_Long_Long_Long_Integer,
RE_Exp_Long_Long_Long_Unsigned, RE_Bits_[65-127], RE_Get_[65-127],
RE_Set_[65-127], RE_IS_Is16, RE_IS_Iu16, RE_Integer_128 and
RE_Unsigned_128.  Rename RE_Add_With_Ovflo_Check, RE_Double_Divide,
RE_Multiply_With_Ovflo_Check, RE_Scaled_Divide and
RE_Subtract_With_Ovflo_Check.  Remove RE_IS_Iz1, RE_IS_Iz2, RE_IS_Iz4,
RE_IS_Iz8, RE_Long_Unsigned, RE_Short_Unsigned, RE_Short_Short_Unsigned
(RE_Unit_Table): Likewise.
* sem_aux.adb (Corresponding_Unsigned_Type): Deal with a size equal to
that of Standard_Long_Long_Long_Integer.
(First_Subtype): Deal with Standard_Long_Long_Long_Integer'Base.
* sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Attribute_Size>:
Check the size against powers of 2 and System_Max_Integer_Size for
objects as well.
(Set_Enum_Esize): Deal with 128-bit bounds.
* sem_ch3.adb (Set_Modular_Size): Handle 128-bit size.
(Modular_Type_Declaration): Deal with 128-bit types.
(Signed_Integer_Type_Declaration): Support derivation from
Standard_Long_Long_Long_Integer.
* sem_ch4.adb (Analyze_Mod): Handle 128-bit modulus.
* sem_intr.adb: Add with and use clauses for Ttypes.
(Check_Shift): Handle 128-bit size and modulus.
* sem_prag.adb (Analyze_Pragma) <Pragma_Initialize_Scalars>: Deal
with Signed_128 and Unsigned_128.
(Analyze_Integer_Value): Handle 128-bit size.
* sem_util.ads (Addressable): Adjust description.
* sem_util.adb (Addressable): Return true for 128 if the system
supports 128 bits.
(Set_Invalid_Binder_Values): Deal with Signed_128 and Unsigned_128.
* set_targ.ads (Long_Long_Long_Size): New variable.
* set_targ.adb (S_Long_Long_Long_Size): New constant.
(DTN): Add entry for S_Long_Long_Long_Size.
(DTV): Add entry for Long_Long_Long_Size.
(Set_Targ): Set Long_Long_Long_Size.
* snames.ads-tmpl (Name_Max_Integer_Size): New attribute name.
(Name_Signed_128): New scalar name.
(Name_Unsigned_128): Likewise.
(Scalar_Id): Adjust.
(Integer_Scalar_Id): Likewise.
(Attribute_Id): Add Attribute_Max_Integer_Size.
* stand.ads (Standard_Entity_Type): Add S_Long_Long_Long_Integer.
(Standard_Long_Long_Long_Integer): New renaming.
(Universal_Integer): Adjust description.
(Standard_Long_Long_Long_Unsigned): New variable.
* switch-c.adb (Scan_Front_End_Switches): Deal with -gnate128.
* ttypes.ads (Standard_Long_Long_Long_Integer_Size): New variable.
(Standard_Long_Long_Long_Integer_Width): Likewise.
(System_Max_Integer_Size): Turn into variable.
(System_Max_Binary_Modulus_Power): Likewise.
* uintp.ads (Uint_127): New constant.
* uintp.adb (UI_Power_2): Extednd to 128.
(UI_Power_10): Likewise.
(UI_Expon): Deal with exponent up to 128 specially.
* usage.adb (Write_Switch_Char): Print -gnate128 switch.
* libgnat/a-tifiio.adb (Put_Scaled): Call Scaled_Divide64.
* libgnat/interfac__2020.ads (Integer_128): New integer type.
(Unsigned_128): New modular type.
(Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left,
Rotate_Right): New intrinsic functions operating on it.
* libgnat/s-aridou.ads, libgnat/s-aridou.adb: New generic
package.
* libgnat/s-arit64.ads, libgnat/s-arit64.adb: Instantiate
System.Arithmetic_Double.
* libgnat/s-arit128.ads, libgnat/s-arit128.adb: Likewise.
* libgnat/s-bytswa.ads: Add with clause for Interfaces, use subtypes
of unsigned types defined in Interfaces and add Bswap_128.
* libgnat/s-casi128.ads, libgnat/s-casi128.adb: New package.
* libgnat/s-caun128.ads, libgnat/s-caun128.adb: Likewise.
* libgnat/s-exnint.ads: Instantiate System.Exponn.
* libgnat/s-exnint.adb: Add pragma No_Body.
* libgnat/s-exnlli.ads: Instantiate System.Exponn.
* libgnat/s-exnlli.adb: Add pragma No_Body.
* libgnat/s-exnllli.ads: Instantiate System.Exponn.
* libgnat/s-expint.ads: Likewise.
* libgnat/s-expint.adb: Add pragma No_Body.
* libgnat/s-explli.ads: Instantiate System.Exponn.
* libgnat/s-explli.adb: Add pragma No_Body.
* libgnat/s-expllli.ads: Instantiate System.Exponn.
* libgnat/s-explllu.ads: Instantiate System.Exponu.
* libgnat/s-expllu.ads: Likewise.
* libgnat/s-expllu.adb: Add pragma No_Body.
* libgnat/s-exponn.ads, libgnat/s-exponn.adb: New generic
function.
* libgnat/s-expont.ads, libgnat/s-expont.adb: Likewise.
* libgnat/s-exponu.ads, libgnat/s-exponu.adb: Likewise.
* libgnat/s-expuns.ads, libgnat/s-expuns.adb: Likewise.
* libgnat/s-pack65.ads, libgnat/s-pack65.adb: New package.
* libgnat/s-pack66.ads, libgnat/s-pack66.adb: New package.
* libgnat/s-pack67.ads, libgnat/s-pack67.adb: New package.
* libgnat/s-pack68.ads, libgnat/s-pack68.adb: New package.
* libgnat/s-pack69.ads, libgnat/s-pack69.adb: New package.
* libgnat/s-pack70.ads, libgnat/s-pack70.adb: New package.
* libgnat/s-pack71.ads, libgnat/s-pack71.adb: New package.
* libgnat/s-pack72.ads, libgnat/s-pack72.adb: New package.
* libgnat/s-pack73.ads, libgnat/s-pack73.adb: New package.
* libgnat/s-pack74.ads, libgnat/s-pack74.adb: New package.
* libgnat/s-pack75.ads, libgnat/s-pack75.adb: New package.
* libgnat/s-pack76.ads, libgnat/s-pack76.adb: New package.
* libgnat/s-pack77.ads, libgnat/s-pack77.adb: New package.
* libgnat/s-pack78.ads, libgnat/s-pack78.adb: New package.
* libgnat/s-pack79.ads, libgnat/s-pack79.adb: New package.
* libgnat/s-pack80.ads, libgnat/s-pack80.adb: New package.
* libgnat/s-pack81.ads, libgnat/s-pack81.adb: New package.
* libgnat/s-pack82.ads, libgnat/s-pack82.adb: New package.
* libgnat/s-pack83.ads, libgnat/s-pack83.adb: New package.
* libgnat/s-pack84.ads, libgnat/s-pack84.adb: New package.
* libgnat/s-pack85.ads, libgnat/s-pack85.adb: New package.
* libgnat/s-pack86.ads, libgnat/s-pack86.adb: New package.
* libgnat/s-pack87.ads, libgnat/s-pack87.adb: New package.
* libgnat/s-pack88.ads, libgnat/s-pack88.adb: New package.
* libgnat/s-pack89.ads, libgnat/s-pack89.adb: New package.
* libgnat/s-pack90.ads, libgnat/s-pack90.adb: New package.
* libgnat/s-pack91.ads, libgnat/s-pack91.adb: New package.
* libgnat/s-pack92.ads, libgnat/s-pack92.adb: New package.
* libgnat/s-pack93.ads, libgnat/s-pack93.adb: New package.
* libgnat/s-pack94.ads, libgnat/s-pack94.adb: New package.
* libgnat/s-pack95.ads, libgnat/s-pack95.adb: New package.
* libgnat/s-pack96.ads, libgnat/s-pack96.adb: New package.
* libgnat/s-pack97.ads, libgnat/s-pack97.adb: New package.
* libgnat/s-pack98.ads, libgnat/s-pack98.adb: New package.
* libgnat/s-pack99.ads, libgnat/s-pack99.adb: New package.
* libgnat/s-pack100.ads, libgnat/s-pack100.adb: New package.
* libgnat/s-pack101.ads, libgnat/s-pack101.adb: New package.
* libgnat/s-pack102.ads, libgnat/s-pack102.adb: New package.
* libgnat/s-pack103.ads, libgnat/s-pack103.adb: New package.
* libgnat/s-pack104.ads, libgnat/s-pack104.adb: New package.
* libgnat/s-pack105.ads, libgnat/s-pack105.adb: New package.
* libgnat/s-pack106.ads, libgnat/s-pack106.adb: New package.
* libgnat/s-pack107.ads, libgnat/s-pack107.adb: New package.
* libgnat/s-pack108.ads, libgnat/s-pack108.adb: New package.
* libgnat/s-pack109.ads, libgnat/s-pack109.adb: New package.
* libgnat/s-pack110.ads, libgnat/s-pack110.adb: New package.
* libgnat/s-pack111.ads, libgnat/s-pack111.adb: New package.
* libgnat/s-pack112.ads, libgnat/s-pack112.adb: New package.
* libgnat/s-pack113.ads, libgnat/s-pack113.adb: New package.
* libgnat/s-pack114.ads, libgnat/s-pack114.adb: New package.
* libgnat/s-pack115.ads, libgnat/s-pack115.adb: New package.
* libgnat/s-pack116.ads, libgnat/s-pack116.adb: New package.
* libgnat/s-pack117.ads, libgnat/s-pack117.adb: New package.
* libgnat/s-pack118.ads, libgnat/s-pack118.adb: New package.
* libgnat/s-pack119.ads, libgnat/s-pack119.adb: New package.
* libgnat/s-pack120.ads, libgnat/s-pack120.adb: New package.
* libgnat/s-pack121.ads, libgnat/s-pack121.adb: New package.
* libgnat/s-pack122.ads, libgnat/s-pack122.adb: New package.
* libgnat/s-pack123.ads, libgnat/s-pack123.adb: New package.
* libgnat/s-pack124.ads, libgnat/s-pack124.adb: New package.
* libgnat/s-pack125.ads, libgnat/s-pack125.adb: New package.
* libgnat/s-pack126.ads, libgnat/s-pack126.adb: New package.
* libgnat/s-pack127.ads, libgnat/s-pack127.adb: New package.
* libgnat/s-rannum.ads (Random): New function returning 128-bit.
* libgnat/s-rannum.adb (Random): Implement it.
* libgnat/s-scaval.ads: Add with clause for Interfaces, use subtypes
of unsigned types defined in Interfaces.
* libgnat/s-scaval.adb: Add use clause for Interfaces.
* libgnat/s-scaval__128.ads, libgnat/s-scaval__128.adb: New
package.
* libgnat/s-unstyp.ads (Long_Long_Long_Unsigned): New modular type.
(Shift_Left, Shift_Right, Shift_Right_Arithmetic, Rotate_Left,
Rotate_Right): New intrinsic functions operating on it.

gcc/testsuite/

* gnat.dg/multfixed.adb: Update expected exception message.

4 years ago[Ada] Document Long_Long_Long_Integer in implementation characteristics
Eric Botcazou [Fri, 7 Aug 2020 13:23:23 +0000 (15:23 +0200)]
[Ada] Document Long_Long_Long_Integer in implementation characteristics

gcc/ada/

* doc/gnat_rm/implementation_defined_characteristics.rst: Add
Long_Long_Long_Integer to the list of predefined integer types.
* gnat_rm.texi: Regenerate.

4 years ago[Ada] Fix target configuration file used for CodePeer/SPARK for new ints
Yannick Moy [Fri, 7 Aug 2020 10:20:12 +0000 (12:20 +0200)]
[Ada] Fix target configuration file used for CodePeer/SPARK for new ints

gcc/ada/

* ada_get_targ.adb (Width_From_Size): Add case for 128 bits.
Reorder declarations in the same order as get_targ.adb to
facilitate diffs.

4 years ago[Ada] Refactor repeated calls to Etype in aggregate expansion
Piotr Trojanek [Thu, 6 Aug 2020 20:19:18 +0000 (22:19 +0200)]
[Ada] Refactor repeated calls to Etype in aggregate expansion

gcc/ada/

* exp_aggr.adb (Expand_N_Aggregate): Refactor repeated calls to
Etype (N).
(Build_Array_Aggr_Code): Fix whitespace.

4 years ago[Ada] Fix bootstrap with old GCC
Dmitriy Anisimkov [Thu, 6 Aug 2020 05:54:48 +0000 (11:54 +0600)]
[Ada] Fix bootstrap with old GCC

gcc/ada/

* adaint.c (__gnat_file_time): Use regular arithmetic instead of
__builtin_*_overflow routines if GCC version 4 or less and
compiler is g++.

4 years ago[Ada] Fix crash on illegal OTHERS in iterated_component_association
Piotr Trojanek [Wed, 5 Aug 2020 20:17:02 +0000 (22:17 +0200)]
[Ada] Fix crash on illegal OTHERS in iterated_component_association

gcc/ada/

* sem_aggr.adb (Resolve_Array_Aggregate): Use Choice_List, which
internally calls either Choice or Discrete_Choices, depending on
the context.

4 years ago[Ada] Use index parameter for iterated_component_association
Piotr Trojanek [Tue, 4 Aug 2020 15:47:39 +0000 (17:47 +0200)]
[Ada] Use index parameter for iterated_component_association

gcc/ada/

* sem_aggr.adb (Resolve_Iterated_Component_Association): Use
existing defining identifier for index parameter.

4 years ago[Ada] Wrong detection of potentially blocking call in protected object
Javier Miranda [Thu, 6 Aug 2020 17:56:50 +0000 (13:56 -0400)]
[Ada] Wrong detection of potentially blocking call in protected object

gcc/ada/

* exp_ch9.adb (Build_Task_Activation_Call): Do not generate a
call to activate tasks if we are within the scope of a protected
type and pragma Detect_Blocking is active.

4 years ago[Ada] Codepeer remarks take into account
Liaiss Merzougue [Mon, 13 Jan 2020 12:07:26 +0000 (13:07 +0100)]
[Ada] Codepeer remarks take into account

gcc/ada/

* libgnat/s-carsi8.adb (Compare_Array_S8): Add pragma Assert to
avoid warning concerning Left_Len and RighLen value regarding
Bytes_Compared_As_Words.
* libgnat/s-carun8.adb (Compare_Array_U8): Likewise.
* libgnat/s-geveop.adb (Binary_Operation, Unary_Operation): Add
pragma Assert concerning divide by 0 warning.
* libgnat/s-imgcha.adb (Image_Character): Code update to prevent
constant operation warning.
(Image_Character): Add pragma Assert concerning the unchecked
String size.
* libgnat/s-imgdec.adb
(Round): Upate loop code to prevent warning concerning
Digs'First access.
(Round): Add pragma assert.
(Set): Add pragma Assert for the unchecked string size.
(Set_Digits): Add pragma Assert for the input range.
(Set_Decimal_Digits): Add pragma Assert.
(Set_Blank_And_Sign): Add pragma Assert for the input range.
* libgnat/s-arit64.adb (DoubleDivide): Add pragma Assert
concerning Du /= 0.
(Multiply_With_Ovflo_Check): Add pragma Annotate to avoid
warning concerning unsigned -> signed conversion.
* libgnat/s-imguns.adb (Set_Image_Unsigned): Add pragma Assert
to prevent overflow check warning.  Add pragma Assert for
controlling S'First = 1.
* libgnat/s-imgrea.adb (Image_Floating_Point, Set, Set_Digs,
Set_Special_Fill, Convert_Integer): Add pragma Annotate to
prevent overflow check warning.
(Set_Image_Real): Add pragma Annotate to avoid dead code warning
on float check. Add pragma Assert to prevent overflow check
warning.
* libgnat/s-imgwiu.adb (Set_Digits, Set_Image_Width_Unsigned):
Add pragma assert to prevent overflow check warning.
* libgnat/s-imgllu.adb (Set_Image_Long_Long_Unsigned): Add
pragma assert to prevent overflow check warning.
* libgnat/s-imgint.adb (Set_Digits): Add Assert for input
constraint and to prevent overflow check warning, create
Non_Positive subtype, and change the T parameter as Non_Positive
instead Integer.
(Set_Image_Integer): Add pragma assert to prevent overflow check
warning.
* libgnat/s-imglli.adb (Set_Digits): Add Assert for input
constraint and to prevent overflow check warning, create
Non_Positive subtype, and change the T parameter as Non_Positive
instead Integer.
(Set_Image_Long_Long_Integer): Add pragma assert to prevent
overflow check warning.
* libgnat/s-fatgen.adb (Decompose, Pred, Succ): Add pragma
Annotate to prevent dead code due to invalid float check.
* libgnat/s-imenne.adb (Image_Enumeration_8,
Image_Enumeration_16, Image_Enumeration_32): Add pragma Assert
to prevent overflow check warning.  Add Names_Index subtype for
restricting Index_table content.

4 years ago[Ada] Compiler crash on prefixed call to controlled function with invariant check
Gary Dismukes [Wed, 5 Aug 2020 20:29:30 +0000 (16:29 -0400)]
[Ada] Compiler crash on prefixed call to controlled function with invariant check

gcc/ada/

* exp_ch6.adb (Insert_Post_Call_Actions): Test for
N_Explicit_Dereference as part of the existing test for function
calls.

4 years ago[Ada] Fix bogus error for bit-packed array with volatile component
Eric Botcazou [Tue, 4 Aug 2020 13:08:56 +0000 (15:08 +0200)]
[Ada] Fix bogus error for bit-packed array with volatile component

gcc/ada/

* freeze.adb (Check_Strict_Alignment): Do not set the flag for
a bit-packed array type, even if it is a by-reference type.

4 years ago[Ada] Improve precision of Ada.Directories.Modification_Time
Dmitriy Anisimkov [Mon, 3 Aug 2020 06:18:20 +0000 (12:18 +0600)]
[Ada] Improve precision of Ada.Directories.Modification_Time

gcc/ada/

* adaint.c (__gnat_file_time): New routine.
(__gnat_copy_attribs): Copy timestamps in nanoseconds.
* libgnat/a-direct.adb (C_Modification_Time): Bind to
__gnat_file_time.
(Modification_Time): Call to C_Modification_Time.

4 years ago[Ada] Fix crash with iterated_component_association and -gnatc
Piotr Trojanek [Mon, 3 Aug 2020 20:54:18 +0000 (22:54 +0200)]
[Ada] Fix crash with iterated_component_association and -gnatc

gcc/ada/

* sem_aggr.adb (Resolve_Iterated_Component_Association):
Expression's copy and now has the same parent as the original
expression.
(Resolve_Array_Aggregate): Add ??? comment about a still
existing minor issue that led to discovery of the above crash.

4 years ago[Ada] Spurious error in current instance used as formal package
Javier Miranda [Mon, 3 Aug 2020 17:50:03 +0000 (13:50 -0400)]
[Ada] Spurious error in current instance used as formal package

gcc/ada/

* sem_ch12.adb (Install_Parents_Of_Generic_Context): Simplify
functionality; collect and install parents of generic child
package.
(Remove_Parents_Of_Generic_Context): Code cleanup.
(Instantiate_Package_Body): Hide parents of generic context from
visibility before installing the parent instance; restore their
visibility when the instance is analyzed

4 years ago[Ada] Remove -mthreads from Linker_Options pragma for x86-lynx178e
Doug Rupp [Mon, 3 Aug 2020 16:26:09 +0000 (09:26 -0700)]
[Ada] Remove -mthreads from Linker_Options pragma for x86-lynx178e

gcc/ada/

* libgnarl/s-osinte__lynxos178e.ads: Remove -mthreads switch.

4 years ago[Ada] Use VxWorks 7 APIs for accessing environment variables in kernel mode
Patrick Bernardi [Thu, 30 Jul 2020 23:06:13 +0000 (19:06 -0400)]
[Ada] Use VxWorks 7 APIs for accessing environment variables in kernel mode

gcc/ada/

* env.c (__gnat_setenv): call setenv for VxWorks 7 kernel mode.
(__gnat_environ): envGet takes an int instead of a NULL pointer.
(__gnat_unsetenv): call unsetenv for VxWorks 7 kernel mode.
(__gnat_clearenv): use __gnat_unsetenv to clear environment
variables.

4 years ago[Ada] Use helper function in Freeze_Subprogram_Body
Eric Botcazou [Sun, 2 Aug 2020 12:14:50 +0000 (14:14 +0200)]
[Ada] Use helper function in Freeze_Subprogram_Body

gcc/ada/

* sem_ch12.adb (Freeze_Subprogram_Body): Call
Package_Freeze_Node to retrieve the freeze node for the
enclosing body of the generic.

4 years ago[Ada] Incorrect associations for extra accessibility parameters
Justin Squirek [Thu, 30 Jul 2020 18:54:42 +0000 (14:54 -0400)]
[Ada] Incorrect associations for extra accessibility parameters

gcc/ada/

* exp_ch6.adb (Expand_Call_Helper): Modify calls to
Add_Extra_Actual to use Extra_Accessibility instead of
Get_Accessibility for the EF parameter.

4 years ago[Ada] Make minimum accessibility level a constant object
Piotr Trojanek [Thu, 30 Jul 2020 10:02:19 +0000 (12:02 +0200)]
[Ada] Make minimum accessibility level a constant object

gcc/ada/

* exp_ch6.adb (Expand_Actuals): Whitespace cleanup.
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Make minimum
accessibility a constant object.

4 years ago[Ada] Simplify the VxWorks implementation of __gnat_environ
Patrick Bernardi [Tue, 28 Jul 2020 15:36:08 +0000 (11:36 -0400)]
[Ada] Simplify the VxWorks implementation of __gnat_environ

gcc/ada/

* env.c (__gnat_environ): For VxWorks kernel simply return the
result of the envGet call. Do this for VxWorks 6 and 7 as they
both support the same API.

4 years ago[Ada] Disable warnings on entities when building finalizers
Ghjuvan Lacambre [Thu, 23 Jul 2020 07:51:43 +0000 (09:51 +0200)]
[Ada] Disable warnings on entities when building finalizers

gcc/ada/

* exp_ch7.adb (Build_Finalizer): Disable warnings on referenced
entity.

4 years ago[Ada] Fix typos and style in comments related to Default_Initial_Condition
Piotr Trojanek [Mon, 27 Jul 2020 20:06:18 +0000 (22:06 +0200)]
[Ada] Fix typos and style in comments related to Default_Initial_Condition

gcc/ada/

* einfo.ads, sem_ch3.adb, sem_util.adb: Fix comments.

4 years ago[Ada] Spurious error in taft ammendment derivation of CPP type
Javier Miranda [Sat, 25 Jul 2020 17:16:32 +0000 (13:16 -0400)]
[Ada] Spurious error in taft ammendment derivation of CPP type

gcc/ada/

* sem_ch3.adb (Build_Derived_Type): Propagate convention of
class-wide parent.

4 years ago[Ada] Raise Capacity_Error on formal vector insertion
Claire Dross [Tue, 21 Jul 2020 15:37:23 +0000 (17:37 +0200)]
[Ada] Raise Capacity_Error on formal vector insertion

gcc/ada/

* libgnat/a-cofove.adb (Copy): Add explanation in case of
Capacity_Error.
(Insert_Space): Raise Capacity_Error if the new length is
greater than the capacity.
(Reserve_Capacity): Raise Capacity_Error instead of
Constraint_Error.

4 years agoaarch64: [testsuite] Fix typo in diagnostic message
Andrea Corallo [Wed, 21 Oct 2020 06:48:16 +0000 (08:48 +0200)]
aarch64: [testsuite] Fix typo in diagnostic message

gcc/testsuite/ChangeLog

2020-10-21  Andrea Corallo  <andrea.corallo@arm.com>

* gcc.target/aarch64/advsimd-intrinsics/vstX_lane.c (CMT):
Adopt the same style used in the rest of the file.

4 years agoFix discrepancy in Walloca test on 32-bit systems.
Aldy Hernandez [Wed, 21 Oct 2020 06:47:03 +0000 (08:47 +0200)]
Fix discrepancy in Walloca test on 32-bit systems.

There is a discrepancy in the way we report -Walloca-larger-than=
errors on 32-bit versus 64-bit architectures, due to the nature of
ranges derived from a cast operation.

For the Walloca-1 tests on 64-bits we get:

  int num.0_1;
  long unsigned int _2;

  <bb 2> [local count: 1073741824]:
  num.0_1 = num;
  _2 = (long unsigned int) num.0_1;
  s_8 = __builtin_alloca (_2);

Because of the cast of a 32-bit quantity into a 64-bit quantity in _2,
ranger calculates its range as:

long unsigned int [0, 2147483647][18446744071562067968, +INF]

Thus excluding the numbers that can't exist in _2.

This causes the Walloca pass to report that the argument to alloca may be
too large.

However, for -m32 on x86, the gimple is:

  int num.0_1;
  unsigned int num.1_2;

  <bb 2> [local count: 1073741824]:
  num.0_1 = num;
  num.1_2 = (unsigned int) num.0_1;
  s_8 = __builtin_alloca (num.1_2);

Since num.0_1 and num.1_2 are of the same size, we cannot determine
any useful range, so we return VARYING.  In the Walloca pass, VARYING
basically means "unbounded" (no known bounds for the alloca call argument).
So on 32-bits, the error message issued is slightly different:

warning: unbounded use of ‘alloca’

versus on 64-bits, where due to the cast, it is:

warning: argument to ‘alloca’ may be too large

In reality both versions of the IL show an unbounded call, but in one
version (64-bits) we can exclude some values so we assume the range
was provided, but it was out of bounds.

I've mentioned various times that all these diagnostics passes
(alloca, restrict, printf, etc), could benefit from less specific error
messages since what we have can potentially confuse the user.  However,
no consensus has been reached on how to report these things.

In the meantime, this patch adjusts the testcase to accept both variants.

gcc/testsuite/ChangeLog:

* gcc.dg/Walloca-1.c: Adjust for 32-bits.

4 years agoDaily bump.
GCC Administrator [Wed, 21 Oct 2020 00:16:36 +0000 (00:16 +0000)]
Daily bump.

4 years agoHandle 16 bit targets in diagnostic pruning
Jeff Law [Tue, 20 Oct 2020 23:28:34 +0000 (17:28 -0600)]
Handle 16 bit targets in diagnostic pruning

gcc/testsuite
* gcc.dg/Wbuiltin-declaration-mismatch-9.c: Improve pruning of
invalid scanf call messages.

4 years agoTemporarily disable trap in in extract_range_builtin check.
Andrew MacLeod [Tue, 20 Oct 2020 20:55:14 +0000 (16:55 -0400)]
Temporarily disable trap in in extract_range_builtin check.

Until we figure out how to adjust ubsan for symbolics, disable the trap.

    gcc/ChangeLog:

PR tree-optimization/97505
* vr-values.c (vr_values::extract_range_basic): Trap if
vr_values version disagrees with range_of_builtin_call.

4 years agolibgo: adjust NetBSD-specific types for stable syscall API
Nikhil Benesch [Mon, 19 Oct 2020 02:07:34 +0000 (02:07 +0000)]
libgo: adjust NetBSD-specific types for stable syscall API

The backwards-compatibility guarantees of the syscall package
require some munging of the C API inferred by mksysinfo.sh.
Specifically, the RTM_RESOLVE constant must be added if it is
missing, and the stat_t struct must use the suffix "timespec"
rather than "tim" for its time-related fields.

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

4 years agors6000: Allow -mabi=no-altivec override on command line for AIX.
David Edelsohn [Mon, 19 Oct 2020 17:11:56 +0000 (13:11 -0400)]
rs6000: Allow -mabi=no-altivec override on command line for AIX.

The override options machinery to set rs6000_altivec_abi for AIX
doesn't check if the option is set on the command line.  This patch
checks for a command line option to not override it.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_option_override_internal):
Don't implcitly enable Altivec ABI if set on the command line.

4 years agolibstdc++: Refactor _Hashtable to prepare for custom pointers
François Dumont [Sun, 4 Oct 2020 16:06:11 +0000 (18:06 +0200)]
libstdc++: Refactor _Hashtable to prepare for custom pointers

Limit usage of node pointers in _Hashtable implementation details so that when
we move to allocator custom pointer type we do not need to add an _Alloc
template parameter everywhere which would impact abi.

This is done by reviewing node type definition. It is now based on new basic
types which are not pointer dependant. The _Hashtable helper
types are now using those new node base types and do not receive node pointers.

libstdc++-v3/ChangeLog

* include/bits/hashtable_policy.h
(_Hash_node_value_base<>): Remove _Hash_node_base inheritance.
(_Hash_node_code_cache<bool _Cache_hash_code>): New.
(_Hash_node_value<typename _Value, bool _Cache_hash_code>): New.
(_Hash_node<>): Inherits _Hash_node_base<> and _Hash_node_value<>.
(_Map_base<>::__node_type): Remove.
(_Map_base<>::iterator): Remove.
(_Insert_base<>::__hash_cached): New.
(_Insert_base<>::__constant_iterators): New.
(_Insert_base<>::__hashtable_alloc): New.
(_Insert_base<>::__node_type): Remove.
(_Insert_base<>::__node_ptr): New.
(_Hash_code_base<>): Remove specializations.
(_Hash_code_base<>::__node_type): Remove.
(_Hash_code_base<>::_M_bucket_index(const __node_type*, size_t)):
Replace by...
(_Hash_code_base<>::_M_bucket_index(const _Hash_node_value<>&, size_t)):
...this.
(_Hash_code_base<>::_M_store_code(__node_type*, __hash_code)):
Replace by...
(_Hash_code_base<>::_M_store_code(_Hash_node_code_cache<>&, __hash_code)):
...this.
(_Hash_code_base<>::_M_copy_code(__node_type*, const __node_type*)):
Replace by...
(_Hash_code_base<>::_M_copy_code(_Hash_node_code_cache<>&,
const _Hash_node_code_base<>&)): ...this.
(_Hashtable_base<>::__constant_iterators): Remove.
(_Hashtable_base<>::__unique_keys): Remove.
(_Hashtable_base<>::__node_type): Remove.
(_Hashtable_base<>::iterator): Remove.
(_Hashtable_base<>::const_iterator): Remove.
(_Hashtable_base<>::local_iterator): Remove.
(_Hashtable_base<>::const_local_iterator): Remove.
(_Hashtable_base<>::__ireturn_type): Remove.
(_Hashtable_base<>::_Equal_hash_code<>::_S_equals): Replace by...
(_Hashtable_base<>::_S_equals(__hash_code, const _Hash_node_code_hash<>&)):
...this.
(_Hashtable_base<>::_Equal_hash_code<>::_S_node_equals): Replace by...
(_Hashtable_base<>::_S_node_equals(__hash_code,
const _Hash_node_code_hash<>&)): ...this.
(_Hashtable_base<>::_Equal_hash_code<>): Remove.
(_Hashtable_base<>::_M_equals): Adapt.
(_Hashtable_baxe<>::_M_node_equals): Adapt.
(_Equality<>::_M_equal): Adapt.
(_Hashtable_alloc<>::__node_ptr): New.
(_Hashtable_alloc<>::__bucket_type): Rename into...
(_Hashtable_alloc<>::__node_base_ptr): ...this.
(_Hashtable_alloc<>::__bucket_alloc_type): Rename into...
(_Hashtable_alloc<>::__buckets_alloc_type): ...this.
(_Hashtable_alloc<>::__bucket_alloc_traits): Rename into...
(_Hashtable_alloc<>::__buckets_alloc_traits): ...this.
(_Hashtable_alloc<>::__buckets_ptr): New.
(_Hashtable_alloc<>::_M_allocate_node): Adapt.
(_Hashtable_alloc<>::_M_deallocate_node): Adapt.
(_Hashtable_alloc<>::_M_deallocate_node_ptr): Adapt.
(_Hashtable_alloc<>::_M_deallocate_nodes): Adapt.
(_Hashtable_alloc<>::_M_allocate_buckets): Adapt.
(_Hashtable_alloc<>::_M_deallocate_buckets): Adapt.
* include/bits/hashtable.h (_Hashtable<>): Adapt.

4 years agoc++: block-scope extern decl with default args
Nathan Sidwell [Tue, 20 Oct 2020 19:17:21 +0000 (12:17 -0700)]
c++: block-scope extern decl with default args

In adding the DECL_LOCAL_DECL handling, I'd forgotten that the
parm-decls also need cloning -- and resetting of their DECL_CONTEXT.
Also, any default args need droping when adding an alias, as those are
not propagated.  The std's not totally clear on this latter point when
there's no exising namespace decl, but that seems like the right thing
and is what clang does.

gcc/cp/
* name-lookup.c (push_local_extern_decl_alias): Reconstextualize
alias' parm decls.  Drop any default args.
gcc/testsuite/
* g++.dg/lookup/local-extern.C: New.

4 years agolibbacktrace: use __attribute__((__fallthrough__))
Ian Lance Taylor [Tue, 20 Oct 2020 18:47:35 +0000 (11:47 -0700)]
libbacktrace: use __attribute__((__fallthrough__))

Use an attribute rather than a comment when falling through a switch case.

* internal.h (ATTRIBUTE_FALLTHROUGH): Define.
* elf.c (elf_zlib_inflate): Use ATTRIBUTE_FALLTHROUGH.

4 years agoConvert -Wrestrict pass to ranger.
Aldy Hernandez [Mon, 19 Oct 2020 15:03:44 +0000 (17:03 +0200)]
Convert -Wrestrict pass to ranger.

There is one adjustment to a C++ test which now gives a false positive.
After talking with Martin Sebor, we've concluded this is expected.  There
is no way to communicate that libstdc++ allocated objects are always
less than PTRDIFF_MAX.

gcc/ChangeLog:

* calls.c (get_size_range): Adjust to work with ranger.
* calls.h (get_size_range): Add ranger argument to prototype.
* gimple-ssa-warn-restrict.c (class wrestrict_dom_walker): Remove.
(check_call): Pull out of wrestrict_dom_walker into a
static function.
(wrestrict_dom_walker::before_dom_children): Rename to...
(wrestrict_walk): ...this.
(pass_wrestrict::execute): Instantiate ranger.
(class builtin_memref): Add stmt and query fields.
(builtin_access::builtin_access): Add range_query field.
(builtin_memref::builtin_memref): Same.
(builtin_memref::extend_offset_range): Same.
(builtin_access::builtin_access): Make work with ranger.
(wrestrict_dom_walker::check_call): Pull out into...
(check_call): ...here.
(check_bounds_or_overlap): Add range_query argument.
* gimple-ssa-warn-restrict.h (check_bounds_or_overlap):
Add range_query and gimple stmt arguments.

gcc/testsuite/ChangeLog:

* gcc.dg/Wrestrict-22.c: New test.
* g++.dg/torture/pr92421.C: Adjust for ranger.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string/capacity/1.cc: Pass
-Wno-stringop-overflow to test.

4 years agoConvert -Walloca pass to ranger.
Aldy Hernandez [Mon, 19 Oct 2020 14:52:51 +0000 (16:52 +0200)]
Convert -Walloca pass to ranger.

gcc/ChangeLog:

* gimple-ssa-warn-alloca.c (enum alloca_type): Remove
ALLOCA_BOUND_UNKNOWN and ALLOCA_CAST_FROM_SIGNED.
(warn_limit_specified_p): New.
(alloca_call_type_by_arg): Remove.
(cast_from_signed_p): Remove.
(is_max): Remove.
(alloca_call_type): Remove heuristics and replace with call into
ranger.
(pass_walloca::execute): Instantiate ranger.

gcc/testsuite/ChangeLog:

* gcc.dg/Walloca-1.c: Adjust for ranger.
* gcc.dg/Walloca-12.c: Same.
* gcc.dg/Walloca-13.c: Same.
* gcc.dg/Walloca-2.c: Same.
* gcc.dg/Walloca-3.c: Same.
* gcc.dg/Walloca-6.c: Same.
* gcc.dg/Wvla-larger-than-2.c: Same.

4 years agosyscall: remove Sendfile on NetBSD
Nikhil Benesch [Mon, 19 Oct 2020 02:19:04 +0000 (02:19 +0000)]
syscall: remove Sendfile on NetBSD

NetBSD does not support the sendfile syscall.

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

4 years agolto-wrapper: Fix -save-temps filename commit
Tobias Burnus [Tue, 20 Oct 2020 17:41:44 +0000 (19:41 +0200)]
lto-wrapper: Fix -save-temps filename commit

Fix for 'Improve -save-temps filename' patch,
commit b3032d1b84b8ab683f2d7345b6a2d9f783fe946d

gcc/ChangeLog
* lto-wrapper.c (run_gcc): Use proper variable for
%u.ltrans_args dump suffix.

gcc/testsuite/ChangeLog
* gcc.misc-tests/outputs.exp: Add ltrans_args dump files
for 'lto save-temps'.

4 years agoAArch64: Add FLAG for get/set reg intrinsics [PR94442]
zhengnannan [Tue, 20 Oct 2020 16:53:04 +0000 (17:53 +0100)]
AArch64: Add FLAG for get/set reg intrinsics [PR94442]

2020-10-20  Zhiheng Xie  <xiezhiheng@huawei.com>
    Nannan Zheng  <zhengnannan@huawei.com>

gcc/ChangeLog:

* config/aarch64/aarch64-simd-builtins.def: Add proper FLAG
for get/set reg intrinsics.

4 years agoRefactor range handling of builtins in vr_values and ranger.
Aldy Hernandez [Fri, 9 Oct 2020 09:26:33 +0000 (11:26 +0200)]
Refactor range handling of builtins in vr_values and ranger.

This sets things up so we can share range handling of builtins between
vr_values and ranger.  It is meant to refactor the code so that we can
verify that both implementations yield the same results.

First, we abstract out gimple_ranger::range_of_builtin_call into an externally
visible counterpart that can be called from vr_values.  It will take a
range_query since both ranger and vr_values inherit from this base class.

Then we abstract out all the builtin handling in vr_values into a separate
method that is easier to compare against.

Finally, we call the ranger version from vr_values and compare it with the
vr_values version.  Since this proves both versions return the same,
we can remove vr_values::extract_range_builtin in a follow-up patch.

The vr_values::range_of_expr change brings the vr_values version up to par
with the ranger version.  It should've handled non-SSA's.  This was
a small oversight that went unnoticed because the vr_value version isn't
stressed nearly as much as the ranger version.  The change is needed because
the ranger code handling builtins calls, may call it for integer arguments
in range_of_builtin_ubsan_call.

There should be no change in functionality.

gcc/ChangeLog:

* gimple-range.cc (gimple_ranger::range_of_builtin_ubsan_call):
Make externally visble...
(range_of_builtin_ubsan_call): ...here.  Add range_query argument.
(gimple_ranger::range_of_builtin_call): Make externally visible...
(range_of_builtin_call): ...here.  Add range_query argument.
* gimple-range.h (range_of_builtin_call): Move out from class and
make externally visible.
* vr-values.c (vr_values::extract_range_basic): Abstract out
builtin handling to...
(vr_values::range_of_expr): Handle non SSAs.
(vr_values::extract_range_builtin): ...here.
* vr-values.h (class vr_values): Add extract_range_builtin.
(range_of_expr): Rename NAME to EXPR.

4 years agoSaturate overflows return from SCEV in ranger.
Aldy Hernandez [Tue, 20 Oct 2020 13:25:20 +0000 (15:25 +0200)]
Saturate overflows return from SCEV in ranger.

bounds_of_var_in_loop is returning an overflowed int, which is causing
us to create a range for which we can't compare the bounds causing
an ICE in verify_range.

Overflowed bounds cause compare_values() to return -2, which we
don't handle in verify_range.

We don't represent overflowed ranges in irange, so this patch just
saturates any overflowed end-points to MIN or MAX.

gcc/ChangeLog:

PR tree-optimization/97501
* gimple-range.cc (gimple_ranger::range_of_ssa_name_with_loop_info):
Saturate overflows returned from SCEV.

gcc/testsuite/ChangeLog:

* gcc.dg/pr97501.c: New test.

4 years agopreprocessor: Further fix for EOF in macro args [PR97471]
Nathan Sidwell [Tue, 20 Oct 2020 14:51:40 +0000 (07:51 -0700)]
preprocessor: Further fix for EOF in macro args [PR97471]

My previous attempt at fixing this was incorrect.  The problem occurs
earlier in that _cpp_lex_direct processes the unwinding EOF needs in
collect_args mode.  This patch changes it not to do that, in the same
way as directive parsing works.  Also collect_args shouldn't push_back
such fake EOFs, and neither should funlike_invocation_p.

libcpp/
* lex.c (_cpp_lex_direct): Do not complete EOF processing when
parsing_args.
* macro.c (collect_args): Do not unwind fake EOF.
(funlike_invocation_p): Do not unwind fake EOF.
(cpp_context): Replace abort with gcc_assert.
gcc/testsuite/
* gcc.dg/cpp/endif.c: Move to ...
* c-c++-common/cpp/endif.c: ... here.
* gcc.dg/cpp/endif.h: Move to ...
* c-c++-common/cpp/endif.h: ... here.
* c-c++-common/cpp/eof-2.c: Adjust diagnostic.
* c-c++-common/cpp/eof-3.c: Adjust diagnostic.

4 years agolibgomp: Fix up bootstrap in libgomp/target.c due to false positive warning
Jakub Jelinek [Tue, 20 Oct 2020 14:38:24 +0000 (16:38 +0200)]
libgomp: Fix up bootstrap in libgomp/target.c due to false positive warning

> On 10/20/20 2:11 PM, Tobias Burnus wrote:
>
> > Unfortunately, the committed patch
> > (r11-4121-g1bfc07d150790fae93184a79a7cce897655cb37b)
> > causes build errors.
> >
> > The error seems to be provoked by function cloning – as the code
> > itself looks fine:
> > ...
> >  struct gomp_device_descr *devices_s
> >     = malloc (num_devices * sizeof (struct gomp_device_descr));
> > ...
> >   for (i = 0; i < num_devices; i++)
> >     if (!(devices[i].capabilities & GOMP_OFFLOAD_CAP_OPENMP_400))
> >       devices_s[num_devices_after_openmp++] = devices[i];
>
> gomp_target_init.part.0 ()
> {
> ...
> <bb 2>
>   devices_s_1 = malloc (0);
> ...
>   num_devices.16_67 = num_devices;
> ...
>   if (num_devices.16_67 > 0)
>     goto <bb 3>; [89.00%]
>   else
>     goto <bb 18>; [11.00%]
>
> Which seems to have an ordering problem.

This patch fixes the warning that breaks the bootstrap.

2020-10-20  Jakub Jelinek  <jakub@redhat.com>

* target.c (gomp_target_init): Inside of the function, use automatic
variables corresponding to num_devices, num_devices_openmp and devices
global variables and update the globals only at the end of the
function.

4 years agoc++: Add fixed test [PR82239]
Marek Polacek [Tue, 20 Oct 2020 14:15:41 +0000 (10:15 -0400)]
c++: Add fixed test [PR82239]

This test was fixed by r256550 but that commit was fixing another issue,
and just happened to fix this too.

gcc/testsuite/ChangeLog:

PR c++/82239
* g++.dg/cpp0x/static_assert16.C: New test.

4 years agoSimplify and split irange::copy_legacy_range into two functions.
Aldy Hernandez [Tue, 20 Oct 2020 07:17:12 +0000 (09:17 +0200)]
Simplify and split irange::copy_legacy_range into two functions.

copy_legacy_range was a small but complex function.  It was tricky
to understand, and easy to introduce bugs into it.  It also did
unnecessary work on some code paths.

This patch splits the function into two functions that are more
efficient and easier to read (copy_to_legacy and
copy_legacy_to_multi_range).

gcc/ChangeLog:

* value-range.cc (irange::operator=): Split up call to
copy_legacy_range into...
(irange::copy_to_legacy): ...this.
(irange::copy_legacy_to_multi_range): ...and this.
(irange::copy_legacy_range): Remove.
* value-range.h: Remove copoy_legacy_range.
Add copy_legacy_to_multi_range and copy_to_legacy.

4 years agogcc/doc/invoke.texi: Fix @table syntax
Tobias Burnus [Tue, 20 Oct 2020 13:32:58 +0000 (15:32 +0200)]
gcc/doc/invoke.texi: Fix @table syntax

gcc/
* doc/invoke.texi (NVPTX options): Use @item not @itemx.

4 years agoAvoid changing PHIs in GIMPLE split_edge
Richard Biener [Tue, 20 Oct 2020 10:52:31 +0000 (12:52 +0200)]
Avoid changing PHIs in GIMPLE split_edge

Previously I've changed gimple_split_edge to avoid PHI node
re-allocation, but this introduced swapping of PHI arguments
due to the way edge redirection works.  This is now a problem
for me and which can be solved with the following approach
reducing the overhead of split_edge even more.  We can simply
pretend there are no PHI nodes if we can make sure the
new fallthru will have the same dest_idx as the old edge
into the destination.

2020-10-20  Richard Biener  <rguenther@suse.de>

* tree-cfg.c (reinstall_phi_args): Remove.
(gimple_split_edge): Remove PHIs around the edge redirection
to avoid touching them at all.

4 years agoFix latch PHI arg lookup in vectorizable_reduction for double-reduction
Richard Biener [Tue, 20 Oct 2020 11:15:45 +0000 (13:15 +0200)]
Fix latch PHI arg lookup in vectorizable_reduction for double-reduction

We were using the wrong loop to figure the latch arg of a
double-reduction PHI.  Which isn't a problem in case ->dest_idx
match up with the outer loop edges - but that's of course not guaranteed.

2020-10-20  Richard Biener  <rguenther@suse.de>

* tree-vect-loop.c (vectorizable_reduction): Use the correct
loops latch edge for the PHI arg lookup.

4 years agoopenmp: Implement support for OMP_TARGET_OFFLOAD environment variable
Kwok Cheung Yeung [Tue, 20 Oct 2020 11:15:59 +0000 (04:15 -0700)]
openmp: Implement support for OMP_TARGET_OFFLOAD environment variable

This implements support for the OMP_TARGET_OFFLOAD environment variable
introduced in the OpenMP 5.0 standard, which controls how offloading
is handled.  It may be set to MANDATORY (abort if offloading cannot be
performed), DISABLED (no offloading to devices) or DEFAULT (offload to
device if possible, fall back to host if not).

2020-10-20  Kwok Cheung Yeung  <kcy@codesourcery.com>

libgomp/
* env.c (gomp_target_offload_var): New.
(parse_target_offload): New.
(handle_omp_display_env): Print value of OMP_TARGET_OFFLOAD.
(initialize_env): Parse OMP_TARGET_OFFLOAD.
* libgomp.h (gomp_target_offload_t): New.
(gomp_target_offload_var): New.
* libgomp.texi (OMP_TARGET_OFFLOAD): New section.
* target.c (resolve_device): Generate error if device not found and
offloading is mandatory.
(gomp_target_fallback): Generate error if offloading is mandatory.
(GOMP_target): Add argument in call to gomp_target_fallback.
(GOMP_target_ext): Likewise.
(gomp_target_data_fallback): Generate error if offloading is mandatory.
(GOMP_target_data): Add argument in call to gomp_target_data_fallback.
(GOMP_target_data_ext): Likewise.
(gomp_target_task_fn): Add argument in call to gomp_target_fallback.
(gomp_target_init): Return early if offloading is disabled.

4 years agolibstdc++: Define noop coroutine details private and inline [PR 95917]
Jonathan Wakely [Tue, 20 Oct 2020 10:19:58 +0000 (11:19 +0100)]
libstdc++: Define noop coroutine details private and inline [PR 95917]

This moves the __noop_coro_frame type, the __noop_coro_fr global
variable, and the __dummy_resume_destroy function from namespace scope,
replacing them with private members of the specialization
coroutine_handle<noop_coroutine_promise>.

The function and variable are also declared inline, so that they
generate no code unless used.

libstdc++-v3/ChangeLog:

PR libstdc++/95917
* include/std/coroutine (__noop_coro_frame): Replace with
noop_coroutine_handle::__frame.
(__dummy_resume_destroy): Define inline in __frame.
(__noop_coro_fr): Replace with noop_coroutine_handle::_S_fr
and define as inline.
* testsuite/18_support/coroutines/95917.cc: New test.

4 years agolibstdc++: Remove inheritance from std::coroutine_handle<> [LWG 3460]
Jonathan Wakely [Tue, 20 Oct 2020 10:18:35 +0000 (11:18 +0100)]
libstdc++: Remove inheritance from std::coroutine_handle<> [LWG 3460]

This removes the coroutine_handle<> base class from the primary template
and the noop_coroutine_promise explicit specialization. To preserve the
API various members are added, as they are no longer inherited from the
base class.

I've also tweaked some indentation and formatting, and replaced
subclause numbers from the standard with stable names like
[coroutine.handle.con].

libstdc++-v3/ChangeLog:

* include/std/coroutine (coroutine_handle<_Promise>): Remove
base class. Add constructors, conversions, accessors etc. as
proposed for LWG 3460.
(coroutine_handle<noop_coroutine_promise>): Likewise.
* testsuite/18_support/coroutines/lwg3460.cc: New test.

4 years agoMSP430: Support a memory operand for op1 of andneghi3
Jozef Lawrynowicz [Tue, 20 Oct 2020 10:26:20 +0000 (11:26 +0100)]
MSP430: Support a memory operand for op1 of andneghi3

This fixes an ICE caused by an unrecognizeable insn generated when
compiling gcc.c-torture/execute/pr97386-1.c at -O0.

gcc/ChangeLog:

* config/msp430/msp430.md (andneghi3): Allow general operand for
op1 and update output assembler template.

4 years agocollect-utils.c, lto-wrapper + mkoffload: Improve -save-temps filename
Tobias Burnus [Tue, 20 Oct 2020 10:14:03 +0000 (12:14 +0200)]
collect-utils.c, lto-wrapper + mkoffload: Improve -save-temps filename

gcc/ChangeLog:

* collect-utils.c (collect_execute, fork_execute): Add at-file suffix
argument.
* collect-utils.h (collect_execute, fork_execute): Update prototype.
* collect2.c (maybe_run_lto_and_relink, do_link, main, do_dsymutil):
Update calls by passing NULL.
* config/i386/intelmic-mkoffload.c (compile_for_target,
generate_host_descr_file, prepare_target_image, main): Likewise.
* config/gcn/mkoffload.c (compile_native, main): Pass at-file suffix.
* config/nvptx/mkoffload.c (compile_native, main): Likewise.
* lto-wrapper.c (compile_offload_image): Likewise.

4 years agoFix compilation on older systems
Vitaly Buka [Tue, 20 Oct 2020 05:44:34 +0000 (22:44 -0700)]
Fix compilation on older systems

Cherry-pick upstream commit f97ca48b1cbbf5da065e94271cb3af4f1c907dd4.

Fixes https://bugs.llvm.org/show_bug.cgi?id=47896

4 years agoSpecial case shifting by zero in operator_rshift::op1_range.
Aldy Hernandez [Tue, 20 Oct 2020 06:53:21 +0000 (08:53 +0200)]
Special case shifting by zero in operator_rshift::op1_range.

gcc/ChangeLog:

* range-op.cc (operator_rshift::op1_range): Special case
shifting by zero.

4 years ago[Ada] Refine type for type constraining routines
Piotr Trojanek [Sun, 26 Jul 2020 13:24:29 +0000 (15:24 +0200)]
[Ada] Refine type for type constraining routines

gcc/ada/

* sem_ch3.adb (Constrain_Decimal, Constrain_Enumeration,
Constrain_Float, Constrain_Integer, Constrain_Ordinary_Fixed):
Refine parameter type from Node_Id to Entity_Id.

4 years ago[Ada] Prevent crashes when pretty-printing freeze nodes from gdb
Piotr Trojanek [Fri, 24 Jul 2020 10:52:00 +0000 (12:52 +0200)]
[Ada] Prevent crashes when pretty-printing freeze nodes from gdb

gcc/ada/

* sprint.adb (po): Set Dump_Freeze_Null to False; align colons.
(ps): Likewise.

4 years ago[Ada] AI12-0339: Empty function for Aggregate aspect of Ada containers
Ed Schonberg [Thu, 23 Jul 2020 15:51:39 +0000 (11:51 -0400)]
[Ada] AI12-0339: Empty function for Aggregate aspect of Ada containers

gcc/ada/

* sinfo.ads, sinfo.adb: The flag Box_Present can appear in
Iterated_Element_Association nodes.
* sem_aggr.adb (Resolve_Aggregate): Call
Resolve_Container_Aggregate when type of context has
corresponding aspect.
* sem_type.adb (Covers): In Ada_2020 an aggregate is compatible
with a type that carries the corresponding aspect.
* exp_ch3.adb (Make_Controlling_Function_Wrappers): Do not
create declarations and bodies for inherited primitive functions
of null extensions that dispatch on result, when current scope
includes an immediately visible non-overloadable homonym of the
function.
* libgnat/a-cborse.adb, libgnat/a-cborse.ads,
libgnat/a-cbhase.ads, libgnat/a-cbhase.adb,
libgnat/a-cborma.adb, libgnat/a-cborma.ads,
libgnat/a-cbhama.adb, libgnat/a-cbhama.ads,
libgnat/a-cbdlli.adb, libgnat/a-cbdlli.ads,
libgnat/a-convec.ads, libgnat/a-ciorse.ads,
libgnat/a-cihase.ads, libgnat/a-cihase.adb,
libgnat/a-ciorma.ads, libgnat/a-cihama.ads,
libgnat/a-cihama.adb, libgnat/a-cidlli.ads,
libgnat/a-cidlli.adb, libgnat/a-coinve.adb,
libgnat/a-cobove.adb, libgnat/a-cobove.ads,
libgnat/a-convec.adb, libgnat/a-coinve.ads,
libgnat/a-coorse.ads, libgnat/a-cohase.adb,
libgnat/a-cohase.ads, libgnat/a-coorma.ads,
libgnat/a-cohama.adb, libgnat/a-cohama.ads,
libgnat/a-cdlili.ads: Add primitive function Empty for use in
aspect Aggregate, and add corresponding body or expression
function.

4 years ago[Ada] Add support for Unreferenced aspect on formal parameters
Arnaud Charlet [Tue, 21 Jul 2020 09:45:31 +0000 (05:45 -0400)]
[Ada] Add support for Unreferenced aspect on formal parameters

gcc/ada/

* aspects.adb (Has_Aspect_Specifications_Flag): Add
N_Parameter_Specification.
* par-ch13.adb (Aspect_Specifications_Present): Also handle case
of an unknown aspect on the last formal parameter (terminated by
a Tok_Right_Paren). Minor reformatting.
* par-ch6.adb (P_Formal_Part): Scan aspects on formal
parameters.
* par.adb: Fix typos.
* sem_ch6.adb (Process_Formals): Add processing of aspects and
in particular Unreferenced aspect for now.
* sinfo.ads: Allow ASPECT_SPECIFICATIONS on a
PARAMETER_SPECIFICATION.
* doc/gnat_rm/implementation_defined_aspects.rst
(Aspect Unreferenced): Update documentation.
* gnat_rm.texi: Regenerate.

4 years ago[Ada] Refine result type of Get_Accessibility
Piotr Trojanek [Thu, 23 Jul 2020 21:30:53 +0000 (23:30 +0200)]
[Ada] Refine result type of Get_Accessibility

gcc/ada/

* sem_util.ads, sem_util.adb (Get_Accessibility): Refine result
type from Node_Id to Entity_Id.

4 years ago[Ada] Replace low-level Ekind membership tests with high-level Is_Formal
Piotr Trojanek [Thu, 23 Jul 2020 21:26:20 +0000 (23:26 +0200)]
[Ada] Replace low-level Ekind membership tests with high-level Is_Formal

gcc/ada/

* einfo.adb, exp_attr.adb, sem_ch13.adb, sem_util.adb: Use
Is_Formal where possible.

4 years ago[Ada] Implement AI12-0280 Making 'Old more flexible
Steve Baird [Thu, 21 May 2020 21:42:53 +0000 (14:42 -0700)]
[Ada] Implement AI12-0280 Making 'Old more flexible

gcc/ada/

* sem_util.ads: Declare a new package, Old_Attr_Util, which in
turn declares two more packages, Conditional_Evaluation and
Indirect_Temps. Conditional_Evaluation provides a predicate for
deciding whether a given 'Old attribute reference is eligible
for conditional evaluation and, in the case where it is
eligible, a function that constructs the Boolean-valued
condition that is to be evaluated at run time in deciding
whether to evaluate the attribute prefix.  Indirect_Temps
provides support for declaring a temporary which is only
initialized conditionally; more specifically, an access type and
a variable of that type are declared (unconditionally) and then
the variable is (conditionally) initialized with an allocator.
The existence of the access type and the pointer variable is
hidden from clients, except that a predicate,
Is_Access_Type_For_Indirect_Temp, is provided for identifying
such access types. This is needed because we want such an access
type to be treated like a "normal" access type (specifically
with respect to finalization of allocated objects). Other parts
of the compiler treat access types differently if
Comes_From_Source is False, or if the secondary stack storage
pool is used; this predicate is used to disable this special
treatment.
* sem_attr.adb (Uneval_Old_Msg): Improve message text to reflect
Ada202x changes.
(Analyze_Attribute): A previously-illegal 'Old attribute
reference is accepted in Ada2020 if it is eligible for
conditional evaluation.
* sem_res.adb (Valid_Conversion): Do not treat a rewritten 'Old
attribute like other rewrite substitutions. This makes a
difference, for example, in the case where we are generating the
expansion of a membership test of the form "Saooaaat'Old in
Named_Access_Type"; in this case Valid_Conversion needs to
return True (otherwise the expansion will be False - see the
call site in exp_ch4.adb).
* exp_attr.adb (Expand_N_Attribute_Reference): When expanding a
'Old attribute reference, test for the case where the reference
is eligible for conditional evaluation. In that case, use the
new "indirect temporary" mechanism provided by Sem_Util.
* exp_prag.adb
(Expand_Attributes_In_Consequence.Expand_Attributes): If
Sem_Util.Indirect_Temp_Needed indicates that there could be
correctness problems associated with the old expansion scheme
for dealing with 'Old attributes in contract cases consequences,
then we use the new "indirect temporary" mechanism provided by
Sem_Util instead. We do not want to do this unconditionally.
* sem_util.adb: Provide a body for the new Old_Attr_Util
package. Further work is needed in several areas for
correctness:
- The function Is_Repeatedly_Evaluated does not deal with
container aggregates yet.
- The function Is_Known_On_Entry does not deal with interactions
with the Global aspect.
Each area where more work is needed is indicated with a "???"
comment in the code; a more detailed description can be found
there. Some optimization opportunties are similarly indicated
with a "???" comment.
* exp_ch3.adb (Freeze_Type): In deciding whether to generate
expansion for the list controller of an access type, take the
predicate Is_Access_Type_For_Indirect_Temp into account. If the
predicate yields True, then generate the expansion.
* exp_util.adb (Build_Allocate_Deallocate_Proc): We don't
normally finalize allocated objects that are allocated on the
secondary stack. Add an exception to this rule if the predicate
Is_Access_Type_For_Indirect_Temp yields True.  As a result of
this exception, we have to deal with the fact that gigi expects
a different parameter profile if we are using the secondary
stack pool; the Pool and Alignment parameters must be omitted in
this case.

4 years ago[Ada] Spurious error in current instance used as formal package
Javier Miranda [Thu, 23 Jul 2020 09:55:16 +0000 (05:55 -0400)]
[Ada] Spurious error in current instance used as formal package

gcc/ada/

* sem_ch12.adb (Install_Parents_Of_Generic_Context,
Remove_Parents_Of_Generic_Context): New subprograms.
(Instantiate_Package_Body): Adding assertions to ensure that
installed parents are properly removed.

4 years ago[Ada] Make attribute Update an obsolescent feature
Claire Dross [Tue, 21 Jul 2020 09:14:02 +0000 (11:14 +0200)]
[Ada] Make attribute Update an obsolescent feature

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Emit a warning on 'Update
when Warn_On_Obsolescent_Feature is set to True.

4 years ago[Ada] CUDA: build procedure calls instead of function calls
Richard Kenner [Thu, 23 Jul 2020 08:07:24 +0000 (10:07 +0200)]
[Ada] CUDA: build procedure calls instead of function calls

gcc/ada/

* gnat_cuda.adb (Build_Register_Function_Call): Make procedure
call instead of function, rename to
Build_Register_Procedure_Call.
(Build_CUDA_Init_Proc): Make procedure call instead of function.

4 years ago[Ada] Crash on cond expression as actual for anonymous access formal
Justin Squirek [Wed, 22 Jul 2020 12:13:24 +0000 (08:13 -0400)]
[Ada] Crash on cond expression as actual for anonymous access formal

gcc/ada/

* exp_ch6.adb (Expand_Branch): Properly anticipate expansion of
conditional expressions producing object declarations in
addition to assignment statements, and rename formal.

4 years ago[Ada] Fixes for pretty command-line GNATprove output with -gnatdF
Yannick Moy [Wed, 22 Jul 2020 07:14:54 +0000 (09:14 +0200)]
[Ada] Fixes for pretty command-line GNATprove output with -gnatdF

gcc/ada/

* errout.adb (Write_Source_Code_Line): Adopt display closer to
GCC format.
(Output_Messages): Deal specially with info messages.
* erroutc.adb (Prescan_Message): Fix bug leading to check
messages being considered as error messages in pretty output
mode.

4 years ago[Ada] Hang on cond expression as actual for anonymous access formal
Justin Squirek [Tue, 21 Jul 2020 19:06:37 +0000 (15:06 -0400)]
[Ada] Hang on cond expression as actual for anonymous access formal

gcc/ada/

* exp_ch6.adb (Expand_Call_Helper): Properly handle the case
where the condition of a conditional expression has been
optimized out when calculating the value of an extra
accessibility parameter.

4 years ago[Ada] gnatpp: Fix documentation of threshold switches
Bob Duff [Mon, 20 Jul 2020 17:55:25 +0000 (13:55 -0400)]
[Ada] gnatpp: Fix documentation of threshold switches

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Change "_" to "-".

4 years ago[Ada] New warning on not fully initialized box aggregate
Arnaud Charlet [Thu, 16 Jul 2020 16:38:10 +0000 (12:38 -0400)]
[Ada] New warning on not fully initialized box aggregate

gcc/ada/

* sem_aggr.adb (Resolve_Aggregate): Warn on not fully
initialized box aggregate.
* sem_aggr.ads: Fix typo.
* sem_res.adb (Resolve_Actuals): Fix typo in error message
format marking it incorrectly as a continuation message.
* sem_elab.adb (Check_Internal_Call_Continue): Similarly, add
missing primary message in case of a call to an actual generic
subprogram.
* sem_warn.adb (Check_References): Do not warn on read but never
assigned variables if the type is partially initialized.
* libgnat/a-except.ads, libgnat/a-ststun.ads,
libgnat/g-sechas.ads, libgnat/a-cbdlli.ads,
libgnat/a-cfdlli.ads, libgnat/a-cobove.ads,
libgnat/a-cohata.ads, libgnat/a-crbltr.ads,
libgnat/a-cbmutr.ads, libgnat/a-crdlli.ads,
libgnat/a-cbsyqu.ads: Address new warning.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Update doc on -gnatwv.
* gnat_ugn.texi: Regenerate.

gcc/testsuite/

* gnat.dg/opt11.adb: Add new expected warning.

4 years ago[Ada] Inlining nonstatic calls to static expression functions
Gary Dismukes [Fri, 17 Jul 2020 22:28:52 +0000 (18:28 -0400)]
[Ada] Inlining nonstatic calls to static expression functions

gcc/ada/

* sem_ch6.adb (Analyze_Expression_Function): Mark static
expression functions as inlined.

4 years ago[Ada] Crash on precondition, discriminant and protected objects
Arnaud Charlet [Thu, 16 Jul 2020 12:27:54 +0000 (08:27 -0400)]
[Ada] Crash on precondition, discriminant and protected objects

gcc/ada/

* contracts.adb (Is_Prologue_Renaming): This function was
missing support for E_Constant which can also be generated in
protected objects.

4 years ago[Ada] Issue with gnatbind -V switch and Ada 2012
Arnaud Charlet [Fri, 17 Jul 2020 09:41:03 +0000 (05:41 -0400)]
[Ada] Issue with gnatbind -V switch and Ada 2012

gcc/ada/

* bindgen.adb (Gen_Bind_Env_String): Generate Ada 2012 compatible
strings. Code cleanup.

4 years ago[Ada] Fix comments as volatility properties can apply to objects
Yannick Moy [Fri, 17 Jul 2020 07:47:44 +0000 (09:47 +0200)]
[Ada] Fix comments as volatility properties can apply to objects

gcc/ada/

* sem_util.adb, sem_util.ads: Comment fix.

4 years ago[Ada] Spurious discriminant check on "for of" loop
Arnaud Charlet [Mon, 13 Jul 2020 09:23:17 +0000 (05:23 -0400)]
[Ada] Spurious discriminant check on "for of" loop

gcc/ada/

* sem_ch8.adb (Check_Constrained_Object): Suppress discriminant
checks when the type has default discriminants and comes from
expansion of a "for of" loop.

4 years ago[Ada] Flexible AST node structure
Bob Duff [Tue, 14 Jul 2020 21:10:19 +0000 (17:10 -0400)]
[Ada] Flexible AST node structure

gcc/ada/

* atree.ads: Make Default_Node a constant.  Remove the
modification of Comes_From_Source, and use a separate flag for
that.  Change Sloc to 0; it always overwritten, and never left
as the No_Location value.
(Print_Statistics): Move to spec so we can call it from
gnat1drv.
(Num_Nodes): Rename to clarify that this is approximate.
Correct comment: nodes and entities are never deleted, the count
is never decremented, and this is not used by Xref.
(Initialize): Correct comment: Error_List is not created here.
Other minor naming and comment changes.
* atree.adb (Extend_Node, New_Copy, New_Entity, New_Node):
Streamline these. Simplify and improve efficiency.  Move code
from Allocate_Initialize_Node to these, where it can be executed
unconditionally.  Take advantage of automatic zeroing of the
Nodes table.
(Allocate_Initialize_Node): Remove this. It was an efficiency
bottleneck, and somewhat complicated, because it was called from
4 places, and had all sorts of conditionals to check where it
was called from. Better to move most of that code to the call
sites, where it can be executed (or not) unconditionally.
(Allocate_New_Node): New procedure to partly replace
Allocate_Initialize_Node (called from just 2 of those 4 places).
(Comes_From_Source_Default): New flag written/read by
Set_Comes_From_Source_Default/Get_Comes_From_Source_Default.
This allows us to make Default_Node into a constant with
all-zeros value.
(Set_Paren_Count_Of_Copy): New procedure to avoid duplicated
code.
(Report): New procedure to encapsulate the call to the reporting
procedure.
(Atree_Private_Part): We now need a body for this package, to
contain package body Nodes.
(Approx_Num_Nodes_And_Entities): Was Num_Nodes.  For efficiency,
compute the answer from Nodes.Last. That way we don't need to
increment a counter on every node creation. Other minor naming
and comment changes.
* gnat1drv.adb: Call Atree.Print_Statistics if -gnatd.A switch
was given.  Add comment documenting the new order dependency (we
must process the command line before calling Atree.Initialize).
* debug.adb: Document -gnatd.A.
* einfo.adb, sinfo.adb: Remove useless Style_Checks pragmas.
* nlists.ads (Allocate_List_Tables): Inline makes node creation
a little faster.
* nlists.adb (Initialize): Remove local constant E, which didn't
seem to add clarity.
* treepr.adb (Print_Init): Use renamed
Approx_Num_Nodes_And_Entities function.
* types.ads: Change the Low and High bounds as described above.
* types.h: Change Low and High bounds to match types.ads.
* sem_ch8.adb, namet.adb, namet.ads: Move the computation of
Last_Name_Id from sem_ch8 to namet, and correct it to not assume
Name_Ids are positive.
* ali.adb, ali-util.adb, bindo-writers.adb, exp_dist.adb,
fmap.adb, fname-uf.adb, osint.adb: Fix various hash functions to
avoid assuming the various ranges are positive. Note that "mod"
returns a nonnegative result when the second operand is
positive. "rem" can return negative values in that case (in
particular, if the first operand is negative, which it now is).
* switch-c.adb: Allow switch -gnaten to control the value of
Nodes_Size_In_Meg.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Remove traling whitespaces.
* opt.ads (Nodes_Size_In_Meg): New Variable.

4 years ago[Ada] Fix internal error on bit-aligned component of function call
Eric Botcazou [Thu, 16 Jul 2020 09:07:32 +0000 (11:07 +0200)]
[Ada] Fix internal error on bit-aligned component of function call

gcc/ada/

* exp_util.adb (Remove_Side_Effects): Always generate a renaming
that is handled by the front-end in the case of an indexed or a
selected component whose prefix has a nonstandard representation.

4 years ago[Ada] Document Ada.Task_Initialization
Pat Rogers [Mon, 13 Jul 2020 20:31:54 +0000 (15:31 -0500)]
[Ada] Document Ada.Task_Initialization

gcc/ada/

* doc/gnat_rm/the_gnat_library.rst: Add Ada.Task_Initialization.
* gnat_rm.texi: Regenerate.

4 years ago[Ada] Display source code pointing at locations in messages for GNATprove
Yannick Moy [Fri, 10 Jul 2020 14:52:03 +0000 (16:52 +0200)]
[Ada] Display source code pointing at locations in messages for GNATprove

gcc/ada/

* errout.adb: (Error_Msg-Internal): Pass the location for a line
insertion if any in the message.
(Output_Messages: Add display of source code lines if -gnatdF is
set.
(Write_Source_Code_Line): Code clean up.
* erroutc.adb (Prescan_Message): Apply prescan for continuation
lines when -gnatdF is set, and record presence of line
insertion.
* erroutc.ads (Has_Insertion_Line): New global for prescan.
(Error_Msg_Object): Add field to record line insertion if
present.
* errutil.adb (Error_Msg): Pass no location for Insertion_Sloc.

4 years ago[Ada] Remove extra validity check in case statement
Arnaud Charlet [Mon, 13 Jul 2020 12:14:20 +0000 (08:14 -0400)]
[Ada] Remove extra validity check in case statement

gcc/ada/

* exp_ch5.adb (Expand_N_Case_Statement): Do not generate
validity check when possible.

4 years ago[Ada] Ada_2020: Further code cleanup for container aggregates
Ed Schonberg [Mon, 13 Jul 2020 20:29:56 +0000 (16:29 -0400)]
[Ada] Ada_2020: Further code cleanup for container aggregates

gcc/ada/

* exp_aggr.adb (Expand_Iterated_Component): Reorganize code to
ensure that Loop_Id is properly initialized on all paths, and
remove code duplication.

4 years ago[Ada] Propagate predicate function to a full view of a private subtype
Piotr Trojanek [Mon, 13 Jul 2020 13:22:27 +0000 (15:22 +0200)]
[Ada] Propagate predicate function to a full view of a private subtype

gcc/ada/

* sem_ch3.adb (Analyze_Subtype_Declaration): Propagate predicate
function to full view of the created type as well, if it was
created.

4 years ago[Ada] Code clean up
Arnaud Charlet [Mon, 13 Jul 2020 16:28:31 +0000 (18:28 +0200)]
[Ada] Code clean up

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Merge handling of
Simple_Storage_Pool and Storage_Pool.

4 years ago[Ada] Support for new aspect Subprogram_Variant on recursive subprograms
Piotr Trojanek [Mon, 13 Jul 2020 10:42:18 +0000 (12:42 +0200)]
[Ada] Support for new aspect Subprogram_Variant on recursive subprograms

gcc/ada/

* aspects.ads: Introduce Subprogram_Variant aspect with the
following properties: GNAT-specific, with mandatory expression,
not a representation aspect, never delayed.
* contracts.adb (Expand_Subprogram_Contract): Mention new aspect
in the comment.
(Add_Contract_Item): Support addition of pragma
Subprogram_Variant to N_Contract node.
(Analyze_Entry_Or_Subprogram_Contract): Mention new aspect in
the comment; add pragma Subprogram_Variant to N_Contract node.
(Build_Postconditions_Procedure): Adapt call to
Insert_Before_First_Source_Declaration, which is now reused in
expansion of new aspect.
(Process_Contract_Cases_For): Also process Subprogram_Variant,
which is stored in N_Contract node together with Contract_Cases.
* contracts.ads (Analyze_Entry_Or_Subprogram_Contract): Mention
new aspect in the comment.
(Analyze_Entry_Or_Subprogram_Body_Contract): Likewise.
* einfo.adb (Get_Pragma): Support retrieval of new pragma.
* einfo.ads (Get_Pragma): Likewise.
* exp_ch6.adb (Check_Subprogram_Variant): New routine for
emitting call to check Subprogram_Variant expressions at run
time.
(Expand_Call_Helper): Check Subprogram_Variant expressions at
recursive calls.
* exp_prag.adb (Make_Op): Moved from expansion of pragma
Loop_Variant to Exp_Util, so it is now reused for expansion of
pragma Subprogram_Variant.
(Process_Variant): Adapt call to Make_Op after moving it to
Exp_Util.
(Expand_Pragma_Subprogram_Variant): New routine.
* exp_prag.ads (Expand_Pragma_Subprogram_Variant): Likewise.
* exp_util.adb (Make_Variant_Comparison): Moved from Exp_Prag
(see above).
* exp_util.ads (Make_Variant_Comparison): Likewise.
* inline.adb (Remove_Aspects_And_Pragmas): Handle aspect/pragma
Subprogram_Variant just like similar contracts.
* par-prag.adb (Prag): Likewise.
* sem.adb (Insert_Before_First_Source_Declaration): Moved from
Contracts (see above).
* sem.ads (Insert_Before_First_Source_Declaration): Likewise.
* sem_ch12.adb: Mention new aspect in the comment about
"Implementation of Generic Contracts", just like similar aspects
are mentioned there.
* sem_ch13.adb (Insert_Pragma): Mention new aspect in the
comment, because this routine is now used for Subprogram_Variant
just like for other similar aspects.
(Analyze_Aspect_Specifications): Mention new aspect in comments;
it is handled just like aspect Contract_Cases.
(Check_Aspect_At_Freeze_Point): Do not expect aspect
Subprogram_Variant just like we don't expect aspect
Contract_Cases.
* sem_prag.adb (Ensure_Aggregate_Form): Now also used for pragma
Subprogram_Variant, so update comment.
(Analyze_Pragma): Add initial checks for pragma
Subprogram_Variant.
(Analyze_Subprogram_Variant_In_Decl_Part): New routine with
secondary checks on the new pragma.
(Sig_Flags): Handle references within pragma Subprogram_Variant
expression just like references in similar pragma
Contract_Cases.
(Is_Valid_Assertion_Kind): Handle Subprogram_Variant just like
other similar contracts.
* sem_prag.ads (Analyze_Subprogram_Variant_In_Decl_Part): New
routine.
* sem_res.adb (Same_Or_Aliased_Subprograms): Moved to Sem_Util,
so it can be reused for detection of recursive calls where
Subprogram_Variant needs to be verified.
* sem_util.adb (Is_Subprogram_Contract_Annotation): Handle new
Subprogram_Variant annotation just like other similar
annotations.
(Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above).
* sem_util.ads (Is_Subprogram_Contract_Annotation): Mention new
aspect in the comment.
(Same_Or_Aliased_Subprograms): Moved from Sem_Res (see above).
* sinfo.ads (N_Contract): Document handling of
Subprogram_Variant.
* snames.ads-tmpl: Add name for the internally generated
procedure with checks for Subprogram_Variant expression, name
for the new aspect and new pragma corresponding to aspect
Subprogram_Variant.

4 years ago[Ada] Minor reorder subprogram declarations alphabetically
Piotr Trojanek [Mon, 13 Jul 2020 09:47:16 +0000 (11:47 +0200)]
[Ada] Minor reorder subprogram declarations alphabetically

gcc/ada/

* exp_util.ads: Reorder declaration.

4 years agotree-optimization/97496 - avoid SLP externs in patterns
Richard Biener [Tue, 20 Oct 2020 06:14:54 +0000 (08:14 +0200)]
tree-optimization/97496 - avoid SLP externs in patterns

I forgot to guard the promotion to external for the case where the
def is in a pattern.

2020-10-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97496
* tree-vect-slp.c (vect_get_and_check_slp_defs): Guard extern
promotion with not in pattern.

* gcc.dg/vect/bb-slp-pr97496.c: New testcase.

4 years agoAdd { target int128 } to gcc.dg/pr97488.c
Aldy Hernandez [Tue, 20 Oct 2020 06:39:02 +0000 (02:39 -0400)]
Add { target int128 } to gcc.dg/pr97488.c

__int128 does not exist on 32-bit targets.

gcc/testsuite/ChangeLog:

* gcc.dg/pr97488.c: Add target int128 predicate.

4 years agoIBM Z: Emit vector alignment hints for strlen
Stefan Schulze Frielinghaus [Sun, 18 Oct 2020 17:53:49 +0000 (19:53 +0200)]
IBM Z: Emit vector alignment hints for strlen

In case the vectorized version of strlen is used, then each memory
access inside the loop is 16-byte aligned.  Thus add this kind of
information so that vector alignment hints can later on be emitted.

gcc/ChangeLog:

* config/s390/s390.c (s390_expand_vec_strlen): Add alignment
for memory access inside loop.

4 years agoDaily bump.
GCC Administrator [Tue, 20 Oct 2020 00:16:29 +0000 (00:16 +0000)]
Daily bump.

4 years agoUse precision and sign to compare types for ranges
Andrew MacLeod [Mon, 19 Oct 2020 23:04:40 +0000 (19:04 -0400)]
Use precision and sign to compare types for ranges

Sanity check ranges by comparing just SIGN and PRECISION.

gcc/
PR tree-optimization/97360
* gimple-range.h (range_compatible_p): New.
* gimple-range-gori.cc (is_gimple_logical_p): Use range_compatible_p.
(range_is_either_true_or_false): Ditto.
(gori_compute::outgoing_edge_range_p): Cast result to the correct
type if necessary.
(logical_stmt_cache::cacheable_p): Use range_compatible_p.
* gimple-range.cc (gimple_ranger::calc_stmt): Check range_compatible_p
before casting the range.
(gimple_ranger::range_on_exit): Use range_compatible_p.
(gimple_ranger::range_on_edge): Ditto.

gcc/testsuite/
* gcc.dg/pr97360-2.c: New test.

4 years agotestsuite: Enable and adjust powerpc vec-extract and vsu testcases.
David Edelsohn [Mon, 19 Oct 2020 22:31:07 +0000 (18:31 -0400)]
testsuite: Enable and adjust powerpc vec-extract and vsu testcases.

This patch remove unnecessary target requirements from many vec-extract
testcases and enables the vsu testcases on AIX.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/sad-vectorize-1.c: Remove target.
* gcc.target/powerpc/sad-vectorize-2.c: Remove target.
* gcc.target/powerpc/vec-extract-v16qi-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v16qi.c: Remove target.
* gcc.target/powerpc/vec-extract-v16qiu-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v16qiu.c: Remove target.
* gcc.target/powerpc/vec-extract-v2df.c: Remove target.
* gcc.target/powerpc/vec-extract-v2di.c: Require lp64.
* gcc.target/powerpc/vec-extract-v4sf.c: Remove target.
* gcc.target/powerpc/vec-extract-v4si-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v4si.c: Remove target.
* gcc.target/powerpc/vec-extract-v4siu-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v4siu.c: Remove target.
* gcc.target/powerpc/vec-extract-v8hi-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v8hi.c: Remove target.
* gcc.target/powerpc/vec-extract-v8hiu-df.c: Remove target.
* gcc.target/powerpc/vec-extract-v8hiu.c: Remove target.
* gcc.target/powerpc/vec-init-1.c: Remove target.
* gcc.target/powerpc/vec-init-2.c: Require lp64.
* gcc.target/powerpc/vec-init-3.c: Require lp64.
* gcc.target/powerpc/vec-init-4.c: Remove target.
* gcc.target/powerpc/vec-init-5.c: Remove target.
* gcc.target/powerpc/vec-init-6.c: Require lp64.
* gcc.target/powerpc/vec-init-7.c: Require lp64.
* gcc.target/powerpc/vec-init-8.c: Remove target.
* gcc.target/powerpc/vec-init-9.c: Require lp64.
* gcc.target/powerpc/vec-setup-double.c: Remove target.
* gcc.target/powerpc/vec-setup-long.c: Remove target.
* gcc.target/powerpc/vsu/vec-xl-len-13.c: Correct expected warnings.
* gcc.target/powerpc/vsu/vsu.exp: Enable on AIX.

4 years agolibstdc++: Implement std::make_unique_for_overwrite
Jonathan Wakely [Mon, 19 Oct 2020 21:11:39 +0000 (22:11 +0100)]
libstdc++: Implement std::make_unique_for_overwrite

This is the std::unique_ptr part of P1020R1 (as amended by P1973R1) for
C++20. The std::shared_ptr part still needs to be done.

libstdc++-v3/ChangeLog:

* include/bits/unique_ptr.h (make_unique_for_overwrite): Define
for C++20.
* testsuite/20_util/unique_ptr/creation/array_neg.cc: Remove
unused header. Adjust standard reference.
* testsuite/20_util/unique_ptr/creation/for_overwrite.cc: New test.
* testsuite/20_util/unique_ptr/creation/for_overwrite__neg.cc: New test.

4 years agotestsuite: Enable and adjust powerpc fold-vec-extract/insert testcases.
David Edelsohn [Mon, 19 Oct 2020 13:50:44 +0000 (09:50 -0400)]
testsuite: Enable and adjust powerpc fold-vec-extract/insert testcases.

This patch enables a number of testcases on non-Linux targets, adjusts
the target requirements, and updates the expected results.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/fold-vec-extract-char.p7.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-char.p8.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-char.p9.c: Remove target.
Expect 3 addi for ilp32.
* gcc.target/powerpc/fold-vec-extract-double.p7.c: Remove target.
Add -mbig-endian for Linux.
* gcc.target/powerpc/fold-vec-extract-double.p8.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-float.p7.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-float.p8.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-float.p9.c: Require lp64.
* gcc.target/powerpc/fold-vec-extract-int.p7.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-int.p8.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-int.p9.c: Remove target.
Expect 3 addi for ilp32.
* gcc.target/powerpc/fold-vec-extract-longlong.p7.c: Remove target.
Expect 4 addi for ilp32.
* gcc.target/powerpc/fold-vec-extract-longlong.p8.c: Remove target.
Expect 4 addi for ilp32.
* gcc.target/powerpc/fold-vec-extract-longlong.p9.c: Require lp64.
* gcc.target/powerpc/fold-vec-extract-short.p7.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-short.p8.c: Remove target.
* gcc.target/powerpc/fold-vec-extract-short.p9.c: Require lp64.
* gcc.target/powerpc/fold-vec-insert-char-p8.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-char-p9.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-double.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-float-p8.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-float-p9.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-int-p8.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-int-p9.c: Remove target.
Require 8 addi for ilp32.
* gcc.target/powerpc/fold-vec-insert-longlong.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-short-p8.c: Remove target.
* gcc.target/powerpc/fold-vec-insert-short-p9.c: Remove target.
* gcc.target/powerpc/fold-vec-select-double.c: Remove target.
* gcc.target/powerpc/fold-vec-select-float.c: Remove target.
* gcc.target/powerpc/fold-vec-splats-int.c: Require lp64.
* gcc.target/powerpc/fold-vec-splats-longlong.c: Require lp64.

4 years agocoroutines: Emit error for invalid promise return types [PR97438].
Iain Sandoe [Sat, 17 Oct 2020 10:21:11 +0000 (11:21 +0100)]
coroutines: Emit error for invalid promise return types [PR97438].

At one stage, use cases were proposed for allowing the promise
type to contain both return_value and return_void.  That was
not accepted into C++20, so we should reject it as per the PR.

gcc/cp/ChangeLog:

PR c++/97438
* coroutines.cc (struct coroutine_info): Add a field to
record that we emitted a promise type error.
(coro_promise_type_found_p): Check for the case that the
promise type contains both return_void and return_value.
Emit an error if so, with information about the wrong
type methods.

gcc/testsuite/ChangeLog:

PR c++/97438
* g++.dg/coroutines/pr97438.C: New test.

4 years agocplxlower: Avoid a transform when looking at a default definition
Martin Jambor [Mon, 19 Oct 2020 17:21:10 +0000 (19:21 +0200)]
cplxlower: Avoid a transform when looking at a default definition

In PR 97456, IPA-SRA triggers a bug in tree-complex.c where it
converts:

 <bb 2>
   a$_M_value_21 = COMPLEX_EXPR <ISRA.18_10(D), ISRA.18_10(D)>;

(where ISRA.18 is IPA-SRA created PARM_DECL with DECL_IGNORED_P set,
which is why it only happens with IPA-SRA) into:

  <bb 2>
    a$_M_value_21 = COMPLEX_EXPR <a$_M_value$real_10(D), a$_M_value$real_10(D)>;

i.e. it replaces two uses of the parameter default-def with two
uninitialized default-defs of a new variable - all in hope to produce
code with better debug info.

This patch fixes it by avoiding the transform when the SSA_NAME to be
replaced is a default definition.

gcc/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97456
* tree-complex.c (set_component_ssa_name): Do not replace ignored decl
default definitions with new component vars.  Reorder if conditions.

gcc/testsuite/ChangeLog:

2020-10-19  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97456
* gcc.dg/tree-ssa/pr97456.c: New test.

4 years agolibstdc++: Use reserved name for C++20 attribute
Jonathan Wakely [Mon, 19 Oct 2020 16:57:14 +0000 (17:57 +0100)]
libstdc++: Use reserved name for C++20 attribute

Although the compiler supports the [[no_unique_address]] attribute, it's
not a reserved name prior to C++20, so we can't use it in std::tuple.
Use [[__no_unique_address__]] instead.

libstdc++-v3/ChangeLog:

* include/std/tuple (_Head_base<Idx, Head, true>): Use reserved
form of __no_unique_address__ attribute because
no_unique_address is not reserved prior to C++20.

4 years agolibstdc++: Optimize container node-handle type for size
Jonathan Wakely [Mon, 19 Oct 2020 16:56:54 +0000 (17:56 +0100)]
libstdc++: Optimize container node-handle type for size

The use of std::optional in _Node_handle makes the node handle types for
associative and unordered containers larger than necessary. It also
greatly increases the amount of code included, as <optional> is quite
large.

The boolean flag that records whether the std::optional contains a value
is redundant, because the _Node_handle::_M_ptr member provides the same
information. If the node handle has a non-null pointer it also has an
allocator, and not otherwise. By replacing std::optional with a custom
union type (and using _M_ptr to tell which union member is active) all
node handle sizes can be reduced by sizeof(allocator_type::pointer).

This makes the node handle types incompatible with previous releases, so
must be done before the C++17 ABI is fixed for GCC 11.

libstdc++-v3/ChangeLog:

* include/bits/node_handle.h (_Node_handle_common): Replace
std::optional with custom type.
* testsuite/20_util/variant/exception_safety.cc: Add missing
header include.

4 years agopreprocessor: Fix non-fn fn-like macro at EOF [PR97471]
Nathan Sidwell [Mon, 19 Oct 2020 14:57:50 +0000 (07:57 -0700)]
preprocessor: Fix non-fn fn-like macro at EOF [PR97471]

We inject EOF tokens between macro argument lists, but had
confused/stale logic in the non-fn invocation.  Renamed the magic
'eof' token, as it's now only used for macro argument termination.
Always rewind the non-OPEN_PAREN token.

libcpp/
* internal.h (struct cpp_reader): Rename 'eof' field to 'endarg'.
* init.c (cpp_create_reader): Adjust.
* macro.c (collect_args): Use endarg for separator.  Always rewind
in the not-fn case.
gcc/testsuite/
* c-c++-common/cpp/pr97471.c: New.

4 years agors6000: correct BE vextract_fp_from_short[hl] vperm masks
David Edelsohn [Mon, 19 Oct 2020 12:59:46 +0000 (08:59 -0400)]
rs6000: correct BE vextract_fp_from_short[hl] vperm masks

xvcvhpsp instruction converts a vector of bfloat16 half precision to single
precision.  The intrinsics vextract_fp_from_shorth and
vextract_fp_from_shortl select the high or low four elements of a
half precision vector to convert.  The intrinsics use vperm to select
the appropriate portion of the half precision vector and redistribute
the values for the xvcvhpsp instruction.  The big endian versions of the
masks for the intrinsics were initialized wrong.  This patch replaces the
masks with the correct values.  This corrects the failure of
builtins-3-p9-runnable.c testcase on big endian systems.

Bootstrapped powerpc-ibm-aix7.2.3.0 Power9.

gcc/ChangeLog:

* config/rs6000/vsx.md (vextract_fp_from_shorth):  Fix vals_be.
(vextract_fp_from_shortl) Same.

4 years agoGracefully handle right shifts larger than the precision.
Aldy Hernandez [Mon, 19 Oct 2020 10:18:46 +0000 (06:18 -0400)]
Gracefully handle right shifts larger than the precision.

gcc/ChangeLog:

PR tree-optimization/97488
* range-op.cc (operator_lshift::op1_range): Handle large right shifts.

gcc/testsuite/ChangeLog:

* gcc.dg/pr97488.c: New test.