gcc.git
6 years agoinvoke.texi (ARM Options): Use @item instead of @itemx for armv5te.
Jakub Jelinek [Mon, 28 May 2018 10:20:56 +0000 (12:20 +0200)]
invoke.texi (ARM Options): Use @item instead of @itemx for armv5te.

* doc/invoke.texi (ARM Options): Use @item instead of @itemx
for armv5te.

From-SVN: r260846

6 years agoDWARF: Handle expressions containing "-1" in dw2_asm_output_delta_uleb128.
Mark Wielaard [Mon, 28 May 2018 09:06:02 +0000 (09:06 +0000)]
DWARF: Handle expressions containing "-1" in dw2_asm_output_delta_uleb128.

In dwarf2out.c dwarf2out_var_location () we create loclabels that might
contain -1 (for example ".LVL5-1"). Technically those are expressions,
not just plain labels. But they work fine everywhere we use them, except
when calculating an uleb128 delta between two labels.

For example we might create the following DWARF5 location list entry:

        .byte   0x3     # DW_LLE_startx_length (*.LLST0)
        .uleb128 0x6    # Location list range start index (*.LVL5-1)
        .uleb128 .LFE1-.LVL5-1        # Location list length (*.LLST0)
        .uleb128 0x1    # Location expression size
        .byte   0x54    # DW_OP_reg4
        .byte   0       # DW_LLE_end_of_list (*.LLST0)

Note the length is calculated using .uleb128 .LFE1-.LVL5-1. This is
wrong, since both .LVL5 and 1 are substracted from .LFE1, instead of
1 being subtracted from .LVL5 first, before substracting from .LFE1.

This happens because dw2_asm_output_delta_uleb128 expects two plain
labels and simply inserts a minus sign between them. To fix this we
simply look if the second label is actually an expression containing
a minus sign and then add brackets around it. That will emit the
correct .uleb128 expression:

        .uleb128 .LFE1-(.LVL5-1)        # Location list length (*.LLST0)

We cannot simply generate the loclabel containing brackets directly
because we do use them also in contexts that don't take a full
expression (for example we use them with .quad too).

gcc/

* dwarf2asm.c (dw2_asm_output_delta_uleb128): Add brackets around
lab2 if it is an expression containing a minus sign.

From-SVN: r260845

6 years ago[Ada] Minor fixes and tweaks to comments in the Repinfo unit
Eric Botcazou [Mon, 28 May 2018 08:56:20 +0000 (08:56 +0000)]
[Ada] Minor fixes and tweaks to comments in the Repinfo unit

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.ads: Minor fixes and tweaks in comments.

From-SVN: r260844

6 years ago[Ada] Remove Valop from the Repinfo unit
Eric Botcazou [Mon, 28 May 2018 08:56:15 +0000 (08:56 +0000)]
[Ada] Remove Valop from the Repinfo unit

This removes the recently added Valop as redundant.  No functional changes.

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.adb (List_GCC_Expression): Remove Valop and replace calls to
it with calls to Unop.

From-SVN: r260843

6 years ago[Ada] Minor cleanup in repinfo unit
Eric Botcazou [Mon, 28 May 2018 08:56:08 +0000 (08:56 +0000)]
[Ada] Minor cleanup in repinfo unit

This removes the Truth_Andif_Expr and Truth_Orif_Expr codes for expressions
handled by the repinfo unit, since they are redundant with Truth_And_Expr
and Truth_Or_Expr respectively in this context.  No functional changes.

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.ads (TCode): Adjust range.
(Truth_Andif_Expr): Remove.
(Truth_Orif_Expr): Likewise.
(Truth_And_Expr .. Dynamic_Val): Adjust value.
* repinfo.adb (Print_Expr): Remove handling of Truth_{And,Or}if_Expr.
(Rep_Value): Likewise.
* repinfo.h (Truth_Andif_Expr): Remove.
(Truth_Orif_Expr): Likewise.
(Truth_And_Expr .. Dynamic_Val): Adjust value.
* gcc-interface/decl.c (annotate_value) <TRUTH_ANDIF_EXPR>: Fall
through to TRUTH_AND_EXPR case.
<TRUTH_ORIF_EXPR>: Fall through to TRUTH_OR_EXPR case.

From-SVN: r260842

6 years ago[Ada] Unnesting: check index expressions for uplevel references
Ed Schonberg [Mon, 28 May 2018 08:56:03 +0000 (08:56 +0000)]
[Ada] Unnesting: check index expressions for uplevel references

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Visit_Node): For indexed components and attribute
references, examine index expressions or associated expressions as well
to record uplevel references.
(Vist_Node): For function and procedure calls, if a formal is an
unconstrained array and the actual is constrained, check whether bounds
of actual have uplevel references.

From-SVN: r260841

6 years ago[Ada] Unnesting: allow uplevel references to exceptions
Ed Schonberg [Mon, 28 May 2018 08:55:57 +0000 (08:55 +0000)]
[Ada] Unnesting: allow uplevel references to exceptions

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* einfo.ads, einfo.adb: Exceptions can be uplevel references, and thus
they can appear as components of activation records.
* exp_unst.adb (Visit_Node): A reference to an exception may be an
uplevel reference.

From-SVN: r260840

6 years ago[Ada] Fix internal error on renaming of equality for record type
Eric Botcazou [Mon, 28 May 2018 08:55:52 +0000 (08:55 +0000)]
[Ada] Fix internal error on renaming of equality for record type

This adjusts the previous change to the cases where the array type is not
yet frozen and, therefore, where Size_Depends_On_Discriminant is not yet
computed, by doing the computation manually.

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Expand_Composite_Equality): Compute whether the size
depends on a discriminant manually instead of using the predicate
Size_Depends_On_Discriminant in the array type case.

gcc/testsuite/

* gnat.dg/renaming12.adb, gnat.dg/renaming12.ads: New testcase.

From-SVN: r260839

6 years ago[Ada] Improve unnesting for discriminants of record subtypes
Ed Schonberg [Mon, 28 May 2018 08:55:47 +0000 (08:55 +0000)]
[Ada] Improve unnesting for discriminants of record subtypes

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Check_Static_Type): For a record subtype, check
discriminant constraints as well.
(Visit_Node): For a selected component, check type of prefix, as is
done for indexed components and slices.

From-SVN: r260838

6 years ago[Ada] Fix regression of ACATS c46032a with CCG back end
Javier Miranda [Mon, 28 May 2018 08:55:42 +0000 (08:55 +0000)]
[Ada] Fix regression of ACATS c46032a with CCG back end

2018-05-28  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_ch4.adb (Real_Range_Check): Add a temporary to store the integer
value when converting a float value to a fixed-point value. This is
required for CCG because it handles fixed-point types by means of
unsigned integer type variables. The range check is now performed using
the integer value stored in this temporary.

From-SVN: r260837

6 years ago[Ada] Update FE check following change in SPARK RM 7.1.3(12)
Yannick Moy [Mon, 28 May 2018 08:55:35 +0000 (08:55 +0000)]
[Ada] Update FE check following change in SPARK RM 7.1.3(12)

SPARK Reference Manual changed to accept attributes First, Last and Length
as not leading to an evaluation of a part of the prefix object. This is
reflected here in the checking code for that rule.

2018-05-28  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_util.adb (Is_OK_Volatile_Context): Add attributes First, Last and
Length as valid non-interfering contexts for SPARK.

From-SVN: r260836

6 years ago[Ada] Allow for GNATprove specific versions of routines from Sem_Disp
Claire Dross [Mon, 28 May 2018 08:55:22 +0000 (08:55 +0000)]
[Ada] Allow for GNATprove specific versions of routines from Sem_Disp

2018-05-28  Claire Dross  <dross@adacore.com>

gcc/ada/

* sem_disp.ads, sem_disp.adb (Inheritance_Utilities): Package for
generic inheritance utilities.
(Generic_Inherited_Subprograms): Generic version of
Inherited_Subprograms, generic in Find_Dispatching_Type function.
(Generic_Is_Overriding_Subprogram): Generic version of
Is_Overriding_Subprogram, generic in Find_Dispatching_Type function.
(Inherited_Subprograms): Instance of Generic_Inherited_Subprograms with
Sem_Disp.Find_Dispatching_Type.
(Is_Overriding_Subprogram): Instance of
Generic_Is_Overriding_Subprogram with Sem_Disp.Find_Dispatching_Type.
(Inheritance_Utilities_Inst): Instance of Inheritance_Utilities
with Sem_Disp.Find_Dispatching_Type.

From-SVN: r260835

6 years ago[Ada] Fix internal error on nested record types with representation clause
Eric Botcazou [Mon, 28 May 2018 08:54:55 +0000 (08:54 +0000)]
[Ada] Fix internal error on nested record types with representation clause

This fixes a long-standing issue with the expansion of equality functions
generated for discriminated record types with variant part.  In this case
the front-end recursively expands equality functions for the composite
sub-components, in particular the array sub-components.

But it systematically uses the unconstrained base type for them, which leads
to both a more complex equality function, because of the need to compare
the bounds, and an additional unchecked conversion from type to base type.

Now this unchecked conversion may block a further expansion of the array
sub-component, for example if it is a large array of record types subject
to a component clause that causes it not to start on a byte boundary, and
thus may lead to an internal error downstream in the back-end.

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Expand_Composite_Equality): For a composite (or FP)
component type, do not expand array equality using the unconstrained
base type, except for the case where the bounds of the type depend on a
discriminant.

gcc/testsuite/

* gnat.dg/rep_clause6.adb, gnat.dg/rep_clause6.ads: New testcase.

From-SVN: r260834

6 years ago[Ada] Introduce a new Needs_Activation_Record entity flag
Ed Schonberg [Mon, 28 May 2018 08:54:46 +0000 (08:54 +0000)]
[Ada] Introduce a new Needs_Activation_Record entity flag

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* einfo.ads, einfo.adb (Needs_Activation_Record): New flag on
access-to-subprogram types, to indicate that an indirect call through
such a type requires an activation record when compiling for LLVM.
* sem_ch3.adb (Access_Subprogram_Declaration): Set new flag as needed.

From-SVN: r260833

6 years ago[Ada] Better accuracy in float-to-fixed conversions
Ed Schonberg [Mon, 28 May 2018 08:54:41 +0000 (08:54 +0000)]
[Ada] Better accuracy in float-to-fixed conversions

This patch improves the accuracy of conversions from a floating point to
a fixed point type when the fixed point type has a specified Snall that is
not a power of two. Previously the conversion of Fixed_Point_Type'First to
some floating point number and back to Fixed_Point_Type raised Constraint
error. This result is within the accuracy imposed by tne Numerics annex of
the RM but is certainly undesirable. This patch transforms the conversion
to avoid extra manipulations of the 'Small of the type, so that the
identity:

      Fixed_T (Float_T (Fixed_Val)) = Fixed_Val

holds over the range of Fixed_T.

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_ch4.adb (Real_Range_Check): Specialize float-to-fixed conversions
when bounds of fixed type are static, to remove some spuerfluous
implicit conversions and provide an accurate result when converting
back and forth between the fixed point type and a floating point type.

gcc/testsuite/

* gnat.dg/fixedpnt5.adb: New testcase.

From-SVN: r260832

6 years ago[Ada] Don't create empty activation records
Ed Schonberg [Mon, 28 May 2018 08:54:34 +0000 (08:54 +0000)]
[Ada] Don't create empty activation records

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Unnest_Subprogram): Prevent creation of empty
activation records.

From-SVN: r260831

6 years ago[Ada] Improve unnesting of indexed references
Richard Kenner [Mon, 28 May 2018 08:54:27 +0000 (08:54 +0000)]
[Ada] Improve unnesting of indexed references

2018-05-28  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

gcc/ada/

* exp_unst.adb (Check_Static_Type): Add argument to indicate node to be
replaced, if any; all callers changed.
(Note_Uplevel_Ref): Likewise.  Also replace reference to deferred
constant with private view so we take the address of that entity.
(Note_Uplevel_Bound): Add argument to indicate node to be replaced, if
any; all callers changed.  Handle N_Indexed_Component like
N_Attribute_Reference.  Add N_Type_Conversion case.
(Visit_Node): Indexed references can be uplevel if the type isn't
static.
(Unnest_Subprograms): Don't rewrite if no reference given.  If call has
been relocated, set first_named pointer in original node as well.

From-SVN: r260830

6 years ago[Ada] Copy index expression trees rather than relocating them
Ed Schonberg [Mon, 28 May 2018 08:54:18 +0000 (08:54 +0000)]
[Ada] Copy index expression trees rather than relocating them

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Flatten): Copy tree of expression in a component
association with a range or a set of discrete choices, rather than
relocating the node. This avoids inconsistencies in the tree when
handling nested subprograms with uplevel references for LLVM.

From-SVN: r260829

6 years ago[Ada] Disregard alignment issues in CodePeer mode
Arnaud Charlet [Mon, 28 May 2018 08:54:11 +0000 (08:54 +0000)]
[Ada] Disregard alignment issues in CodePeer mode

2018-05-28  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_util.adb (Possible_Bit_Aligned_Component): Always return False in
codepeer mode.

From-SVN: r260828

6 years ago[Ada] Minor typo fix in exp_unst.adb
Arnaud Charlet [Mon, 28 May 2018 08:54:06 +0000 (08:54 +0000)]
[Ada] Minor typo fix in exp_unst.adb

2018-05-28  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_unst.adb: Fix typo.

From-SVN: r260827

6 years ago[Ada] Minor cleanup implementation of Ada.Containers.Vectors
Bob Duff [Mon, 28 May 2018 08:54:01 +0000 (08:54 +0000)]
[Ada] Minor cleanup implementation of Ada.Containers.Vectors

2018-05-28  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/a-convec.adb (Query_Element): Minor cleanup: remove an
unnecessary use of 'Unrestricted_Access.

From-SVN: r260826

6 years ago[Ada] Crash on aspect/pragma Linked_Section with -gnatR2
Hristian Kirtchev [Mon, 28 May 2018 08:53:54 +0000 (08:53 +0000)]
[Ada] Crash on aspect/pragma Linked_Section with -gnatR2

This patch modifies the output of the representation information related to
aspect or pragma Linker_Section, achieved with compiler switch -gnatR2. The
value of the section argument is now properly retrieved. Previously it was
assumed that the value is always a N_String_Literal, however the semantics
of the annotation allow for any static string expression, including a
reference to a static string.

------------
-- Source --
------------

--  linker_sections.ads

package Linker_Sections is
   LS_1 : constant String := "1";
   LS_2 : constant String := "2" & "2";
   LS_3 : constant String := LS_1 & "3";
   LS_4 : constant String := "4" & LS_2;

   Val_1  : Integer with Linker_Section => LS_1;
   Val_2  : Integer with Linker_Section => LS_2;
   Val_3  : Integer with Linker_Section => LS_3;
   Val_4  : Integer with Linker_Section => LS_4;
   Val_5  : Integer with Linker_Section => LS_1 & "5";
   Val_6  : Integer with Linker_Section => LS_2 & "6";
   Val_7  : Integer with Linker_Section => LS_3 & "7";
   Val_8  : Integer with Linker_Section => LS_4 & "8";
   Val_9  : Integer with Linker_Section => "9"  & LS_1;
   Val_10 : Integer with Linker_Section => "10" & LS_2;
   Val_11 : Integer with Linker_Section => "11" & LS_3;
   Val_12 : Integer with Linker_Section => "12" & LS_4;

   Val_13 : Integer; pragma Linker_Section (Val_13, LS_1);
   Val_14 : Integer; pragma Linker_Section (Val_14, LS_2);
   Val_15 : Integer; pragma Linker_Section (Val_15, LS_3);
   Val_16 : Integer; pragma Linker_Section (Val_16, LS_4);
   Val_17 : Integer; pragma Linker_Section (Val_17, LS_1 & "5");
   Val_18 : Integer; pragma Linker_Section (Val_18, LS_2 & "6");
   Val_19 : Integer; pragma Linker_Section (Val_19, LS_3 & "7");
   Val_20 : Integer; pragma Linker_Section (Val_20, LS_4 & "8");
   Val_21 : Integer; pragma Linker_Section (Val_21, "9"  & LS_1);
   Val_22 : Integer; pragma Linker_Section (Val_22, "10" & LS_2);
   Val_23 : Integer; pragma Linker_Section (Val_23, "11" & LS_3);
   Val_24 : Integer; pragma Linker_Section (Val_24, "12" & LS_4);
end Linker_Sections;

-----------------
-- Compilation --
-----------------

$ gcc -c -gnatR2s linker_sections.ads

2018-05-28  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* repinfo.adb (Expr_Value_S): New routine.
(List_Linker_Section): Properly extract the value of the section
argument.

From-SVN: r260825

6 years ago[Ada] Update user manual for the -D binder switch
Patrick Bernardi [Mon, 28 May 2018 08:53:49 +0000 (08:53 +0000)]
[Ada] Update user manual for the -D binder switch

2018-05-28  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Update the
description of the -D binder switch to reflect current usage.
* gnat_ugn.texi: Regenerate.

From-SVN: r260824

6 years ago[Ada] Minor reformatting
Gary Dismukes [Mon, 28 May 2018 08:53:42 +0000 (08:53 +0000)]
[Ada] Minor reformatting

2018-05-28  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* exp_ch3.adb: Minor reformatting

From-SVN: r260823

6 years ago[Ada] Spurious constraint error on array of null-excluding components
Justin Squirek [Mon, 28 May 2018 08:53:36 +0000 (08:53 +0000)]
[Ada] Spurious constraint error on array of null-excluding components

This patch fixes an issue whereby the compiler would raise spurious runtime
errors when an array of null-excluding components was initialized with an
expression which required the secondary stack (such as with an concatination
operation) due to certain generated checks which were incorrected performed
on internal object declarations.

2018-05-28  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* exp_ch3.adb
(Build_Initialization_Call): Add logic to pass the appropriate actual to match
 new formal.
(Init_Formals): Add new formal *_skip_null_excluding_check
* exp_util.adb, exp_util.ads
(Enclosing_Init_Proc): Added to fetch the enclosing Init_Proc from the current
 scope.
(Inside_Init_Proc): Refactored to use Enclosing_Init_Proc
(Needs_Conditional_Null_Excluding_Check): Added to factorize the predicate
 used to determine how to generate an Init_Proc for a given type.
(Needs_Constant_Address): Minor reformatting
* sem_res.adb
(Resolve_Null): Add logic to generate a conditional check in certain cases

gcc/testsuite/

* gnat.dg/array31.adb: New testcase.

From-SVN: r260822

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Mon, 28 May 2018 08:53:29 +0000 (08:53 +0000)]
[Ada] Minor reformatting

2018-05-28  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_aggr.adb, gnatlink.adb, sem_ch6.adb, sem_res.adb, sem_util.adb:
Minor reformatting.

From-SVN: r260821

6 years ago[Ada] Spurious error on aspect Volatile
Hristian Kirtchev [Mon, 28 May 2018 08:53:22 +0000 (08:53 +0000)]
[Ada] Spurious error on aspect Volatile

This patch modifies the analysis of aspect/pragma Volatile to correct accept
the annotation when it applies to single protected and single task types, and
SPARK_Mode On is in effect.

------------
-- Source --
------------

--  pack.ads

package Pack with SPARK_Mode is
   protected PO_Aspect with Volatile is end;                         --  OK

   protected PO_Pragma is end;
   pragma Volatile (PO_Pragma);                                      --  OK

   task TO_Aspect with Volatile;                                     --  OK

   task TO_Pragma;
   pragma Volatile (TO_Pragma);                                      --  OK
end Pack;

----------------------------
-- Compilation and output --
----------------------------

$ gcc -c pack.ads
$ gcc -c pack.ads -gnatd.F
cannot generate code for file pack.ads (package spec)

2018-05-28  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_prag.adb (Process_Atomic_Independent_Shared_Volatile): Include
the declarations of single concurrent types because they fall in the
category of full type and object declarations.

From-SVN: r260820

6 years ago[Ada] Minor tweak to output of -gnatR
Eric Botcazou [Mon, 28 May 2018 08:53:13 +0000 (08:53 +0000)]
[Ada] Minor tweak to output of -gnatR

This changes the output of -gnatR for extensions of tagged record types to
avoid displaying the internal _Parent component, which overlaps with other
components and is thus more confusing than helpful.

For the following hierarchy:

  type R1 is tagged record
    I : Integer;
  end record;

  type R2 is new R1 with record
    C : Character;
  end record;

the output -gnatR must now be:

for R1'Object_Size use 128;
for R1'Value_Size use 96;
for R1'Alignment use 8;
for R1 use record
   _Tag at 0 range  0 .. 63;
   I    at 8 range  0 .. 31;
end record;

for R2'Object_Size use 192;
for R2'Value_Size use 136;
for R2'Alignment use 8;
for R2 use record
   _Tag at  0 range  0 .. 63;
   I    at  8 range  0 .. 31;
   C    at 16 range  0 ..  7;
end record;

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.adb (Compute_Max_Length): Skip _Parent component.
(List_Record_Layout): Likewise.

From-SVN: r260819

6 years ago[Ada] Warning on recursive call within postcondition
Ed Schonberg [Mon, 28 May 2018 08:53:06 +0000 (08:53 +0000)]
[Ada] Warning on recursive call within postcondition

This patch adds a warning to a function call that appears within a
postcondition for said function. This may mean an omission of an attribute
reference 'Result, and may lead to an infinite loop on a call to that function.

Compiling post_error.ads must yield:

post_error.ads:3:11:
        warning: postcondition does not mention function result
post_error.ads:3:19:
       warning: call to "Foo" within its postcondition will lead
         to infinite recursion
----
package Post_Error is
   function Foo (A : out Integer) return Integer
     with Post => Foo (A)  /= 0;
   pragma Import (C, Foo);
end Post_Error;

2018-05-28  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_util.adb (Is_Function_Result): Add a warning if a postcondition
includes a call to function to which it applies. This may mean an
omission of an attribute reference 'Result, in particular if the
function is pqrameterless.

From-SVN: r260818

6 years ago[Ada] Misleading warning on unresolvable package name
Justin Squirek [Mon, 28 May 2018 08:53:00 +0000 (08:53 +0000)]
[Ada] Misleading warning on unresolvable package name

This patch fixes an issue whereby the compiler misidentified a package name
containing the name of a standard runtime package as said package - leading to
and improper error message prompting the user to "With" a package already in
scope.

2018-05-28  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch8.adb (Find_Expanded_Name): Add extra guard to make sure the
misresolved package name is not a case of mistaken identity.

gcc/testsuite/

* gnat.dg/warn15-core-main.adb, gnat.dg/warn15-core.ads,
gnat.dg/warn15-interfaces.ads, gnat.dg/warn15.ads: New testcase.

From-SVN: r260817

6 years ago[Ada] Further evaluation of type bounds in GNATprove mode
Yannick Moy [Mon, 28 May 2018 08:52:53 +0000 (08:52 +0000)]
[Ada] Further evaluation of type bounds in GNATprove mode

Some static bounds of types are not recognized and evaluated as such in the
semantic analysis phase of the frontend, which leads to incomplete information
in GNATprove. Fix that in the GNATprove mode only, as this is not needed when
full expansion is used.

There is no impact on compilation.

2018-05-28  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Range): Re-resolve the low bound of a range in
GNATprove mode, as the order of resolution (low then high) means that
all the information is not available when resolving the low bound the
first time.

From-SVN: r260816

6 years ago[Ada] Minor internal cleanup in repinfo unit
Eric Botcazou [Mon, 28 May 2018 08:52:42 +0000 (08:52 +0000)]
[Ada] Minor internal cleanup in repinfo unit

This steamlines a bit the implementation.  No functional changes.

2018-05-28  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.adb (List_Array_Info): Start with an explicit blank line and
end with the linker section, if any.
(List_Entities): Do not output the linker section for record types,
array types and variables.
(Print_Expr): Factor out common processing for unary operators and
special values.  Adjust and reorder the various cases.
(List_Object_Info): End with the linker section, if any.
(List_Record_Info): Likewise.
(List_Type_Info): Do not start with a blank line.

From-SVN: r260815

6 years agoDaily bump.
GCC Administrator [Mon, 28 May 2018 00:16:35 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260814

6 years agopa-linux.h (NEED_INDICATE_EXEC_STACK): Define to 0.
John David Anglin [Sun, 27 May 2018 21:49:43 +0000 (21:49 +0000)]
pa-linux.h (NEED_INDICATE_EXEC_STACK): Define to 0.

* config/pa/pa-linux.h (NEED_INDICATE_EXEC_STACK): Define to 0.

From-SVN: r260809

6 years agodecl.c (match_data_constant): Fortran 2018 allows pointer initialization in a data...
Steven G. Kargl [Sun, 27 May 2018 17:31:26 +0000 (17:31 +0000)]
decl.c (match_data_constant): Fortran 2018 allows pointer initialization in a data statement.

2018-05-27  Steven G. Kargl  <kargl@gcc.gnu.org>

 * decl.c (match_data_constant):  Fortran 2018 allows pointer
 initialization in a data statement.

2018-05-27  Steven G. Kargl  <kargl@gcc.gnu.org>

 * gfortran.dg/data_stmt_pointer.f90: new test.

From-SVN: r260808

6 years agoFix a number of ICE in the test suite.
Paul Koning [Sun, 27 May 2018 17:13:22 +0000 (13:13 -0400)]
Fix a number of ICE in the test suite.

    * config/pdp11/pdp11.md (truncsihi2): Remove.

From-SVN: r260807

6 years agostl_tree.h (_Rb_tree_impl(_Node_allocator&&)): New.
François Dumont [Sun, 27 May 2018 17:06:40 +0000 (17:06 +0000)]
stl_tree.h (_Rb_tree_impl(_Node_allocator&&)): New.

2018-05-27  François Dumont  <fdumont@gcc.gnu.org>

* include/bits/stl_tree.h (_Rb_tree_impl(_Node_allocator&&)): New.
(_Rb_tree(const allocator_type&)): Use latter.
* include/bits/stl_map.h (map(const allocator_type&)): Likewise.
(map(initializer_list<value_type>, const allocator_type&)): Likewise.
(map(_InputIterator, _InputIterator, const allocator_type&)): Likewise.
* include/bits/stl_multimap.h
(multimap(const allocator_type&)): Likewise.
(multimap(initializer_list<value_type>, const allocator_type&)):
Likewise.
(multimap(_InputIterator, _InputIterator, const allocator_type&)):
Likewise.
* include/bits/stl_set.h (set(const allocator_type&)): Likewise.
(set(initializer_list<value_type>, const allocator_type&)): Likewise.
(set(_InputIterator, _InputIterator, const allocator_type&)): Likewise.
* include/bits/stl_multiset.h
(multiset(const allocator_type&)): Likewise.
(multiset(initializer_list<value_type>, const allocator_type&)):
Likewise.
(multiset(_InputIterator, _InputIterator, const allocator_type&)):
Likewise.

From-SVN: r260806

6 years ago[NDS32] Optimize movmem and setmem operations.
Monk Chiang [Sun, 27 May 2018 16:18:24 +0000 (16:18 +0000)]
[NDS32] Optimize movmem and setmem operations.

gcc/
* config/nds32/nds32-intrinsic.md (unaligned_storedi): Modify patterns
implementation.
(unaligned_store_dw): Ditto.
* config/nds32/nds32-memory-manipulation.c
(nds32_expand_movmemsi_loop_known_size): Refactoring implementation.
(nds32_gen_dup_4_byte_to_word_value): Rename to ...
(nds32_gen_dup_4_byte_to_word_value_aux): ... this.
(emit_setmem_word_loop): Rename to ...
(emit_setmem_doubleword_loop): ... this.
(nds32_gen_dup_4_byte_to_word_value): New function.
(nds32_gen_dup_8_byte_to_double_word_value): New function.
(nds32_expand_setmem_loop): Refine implementation.
(nds32_expand_setmem_loop_v3m): Ditto.
* config/nds32/nds32-multiple.md (unaligned_store_update_base_dw): New
pattern.

Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
From-SVN: r260805

6 years ago[NDS32] Implement bswapsi2 and bswaphi2 patterns.
Chung-Ju Wu [Sun, 27 May 2018 06:52:48 +0000 (06:52 +0000)]
[NDS32] Implement bswapsi2 and bswaphi2 patterns.

gcc/
* config/nds32/nds32.md (bswapsi2, bswaphi2): New patterns.

From-SVN: r260804

6 years ago[NDS32] new attribute no_prologue and new option -mret-in-naked-func.
Chung-Ju Wu [Sun, 27 May 2018 06:46:43 +0000 (06:46 +0000)]
[NDS32] new attribute no_prologue and new option -mret-in-naked-func.

gcc/
* config/nds32/nds32.c (nds32_attribute_table): Add "no_prologue".
(nds32_init_machine_status): Initialize machine->attr_naked_p and
machine->attr_no_prologue_p.
(nds32_compute_stack_frame): Check "naked" and "no_prologue" attributes.
(nds32_naked_function_p): Handle "naked" and "no_prologue" attributes.
(nds32_expand_epilogue): Consider attr_naked_p.
(nds32_expand_epilogue_v3pop): Likewise.
(nds32_can_use_return_insn): Likewise.
* config/nds32/nds32.h (machine_function): Add attr_naked_p and
attr_no_prologue_p fields.
* config/nds32/nds32.opt (mret-in-naked-func): New option.

From-SVN: r260803

6 years agoDaily bump.
GCC Administrator [Sun, 27 May 2018 00:16:27 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260801

6 years agore PR target/85918 (Conversions to/from [unsigned] long long are not vectorized for...
Jakub Jelinek [Sat, 26 May 2018 22:04:50 +0000 (00:04 +0200)]
re PR target/85918 (Conversions to/from [unsigned] long long are not vectorized for AVX512DQ target)

PR target/85918
* config/i386/i386.md (fixunssuffix, floatunssuffix): New code
attributes.
* config/i386/sse.md
(<floatsuffix>float<sseintvecmodelower><mode>2<mask_name><round_name>):
Rename to ...
(float<floatunssuffix><sseintvecmodelower><mode>2<mask_name><round_name>):
... this.
(<floatsuffix>float<sselongvecmodelower><mode>2<mask_name><round_name>):
Rename to ...
(float<floatunssuffix><sselongvecmodelower><mode>2<mask_name><round_name>):
... this.
(*<floatsuffix>floatv2div2sf2): Rename to ...
(*float<floatunssuffix>v2div2sf2): ... this.
(<floatsuffix>floatv2div2sf2_mask): Rename to ...
(float<floatunssuffix>v2div2sf2_mask): ... this.
(*<floatsuffix>floatv2div2sf2_mask_1): Rename to ...
(*float<floatunssuffix>v2div2sf2_mask_1): ... this.
(<fixsuffix>fix_truncv8dfv8si2<mask_name><round_saeonly_name>): Rename
to ...
(fix<fixunssuffix>_truncv8dfv8si2<mask_name><round_saeonly_name>):
... this.
(<fixsuffix>fix_trunc<mode><sseintvecmodelower>2<mask_name><round_saeonly_name>):
Rename to ...
(fix<fixunssuffix>_trunc<mode><sseintvecmodelower>2<mask_name><round_saeonly_name>):
... this.
(<fixsuffix>fix_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>):
Rename to ...
(fix<fixunssuffix>_trunc<mode><sselongvecmodelower>2<mask_name><round_saeonly_name>):
... this.
(<fixsuffix>fix_truncv2sfv2di2<mask_name>): Rename to ...
(fix<fixunssuffix>_truncv2sfv2di2<mask_name>): ... this.
(vec_pack_ufix_trunc_<mode>): Use gen_fixuns_truncv8dfv8si2 instead of
gen_ufix_truncv8dfv8si2.
* config/i386/i386-builtin.def (__builtin_ia32_cvttpd2uqq256_mask,
__builtin_ia32_cvttpd2uqq128_mask, __builtin_ia32_cvttps2uqq256_mask,
__builtin_ia32_cvttps2uqq128_mask, __builtin_ia32_cvtuqq2ps256_mask,
__builtin_ia32_cvtuqq2ps128_mask, __builtin_ia32_cvtuqq2pd256_mask,
__builtin_ia32_cvtuqq2pd128_mask, __builtin_ia32_cvttpd2udq512_mask,
__builtin_ia32_cvtuqq2ps512_mask, __builtin_ia32_cvtuqq2pd512_mask,
__builtin_ia32_cvttps2uqq512_mask, __builtin_ia32_cvttpd2uqq512_mask):
Use fixuns instead ufix or floatuns instead ufloat in CODE_FOR_ names.

* gcc.target/i386/avx512dq-pr85918.c: New test.

From-SVN: r260797

6 years agoFix PR number in last commit.
Jerry DeLisle [Sat, 26 May 2018 18:28:02 +0000 (18:28 +0000)]
Fix PR number in last commit.

From-SVN: r260796

6 years agore PR target/89506 (ICE: in decompose, at rtl.h:2266 with -Og -g)
Jerry DeLisle [Sat, 26 May 2018 18:22:18 +0000 (18:22 +0000)]
re PR target/89506 (ICE: in decompose, at rtl.h:2266 with -Og -g)

2018-05-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/89506
* io/write.c (write_integer): Initialise the fnode format to
FMT_NONE, used for list directed write.
(BUF_STACK_SZ): Bump default buffer size up to avoid allocs on
small stuff.

From-SVN: r260795

6 years agoFix changelog.
Jerry DeLisle [Sat, 26 May 2018 17:32:00 +0000 (17:32 +0000)]
Fix changelog.

From-SVN: r260794

6 years agore PR fortran/85840 (Memory leak in write.c)
Jerry DeLisle [Sat, 26 May 2018 17:30:52 +0000 (17:30 +0000)]
re PR fortran/85840 (Memory leak in write.c)

2018-05-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/85840
* io/write.c (write_float_0): Use separate local variable for
the float string length.

From-SVN: r260793

6 years agoDon't check ifunc_resolver on error
H.J. Lu [Sat, 26 May 2018 11:35:31 +0000 (11:35 +0000)]
Don't check ifunc_resolver on error

Since ifunc_resolver isn't set when an error is detected, we should
lookup ifunc attribute in this case.

PR target/85900
PR target/85345
* varasm.c (assemble_alias): Lookup ifunc attribute on error.

From-SVN: r260792

6 years agore PR bootstrap/85921 (/gcc/c-family/c-warn.c fails to build)
Jakub Jelinek [Sat, 26 May 2018 06:40:50 +0000 (08:40 +0200)]
re PR bootstrap/85921 (/gcc/c-family/c-warn.c fails to build)

PR bootstrap/85921
* c-warn.c (diagnose_mismatched_attributes): Remove unnecessary
noinline variable to workaround broken kernel headers.

From-SVN: r260790

6 years agoDaily bump.
GCC Administrator [Sat, 26 May 2018 00:16:48 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r260789

6 years agoRISC-V: Add interrupt attribute support.
Jim Wilson [Fri, 25 May 2018 22:29:17 +0000 (22:29 +0000)]
RISC-V: Add interrupt attribute support.

gcc/
* config/riscv/riscv-protos.h (riscv_epilogue_uses): New.
* config/riscv/riscv.c (struct machine_function): Add
interrupt_handler_p and attribute_checked_p fields.
(riscv_attribute_table): Add interrupt.
(riscv_interrupt_type_p): New.
(riscv_save_reg_p): Save extra regs for interrupt handler.
(riscv_use_save_libcall): Return false  for interrupt handler.
(riscv_first_stack_step): Add forward declaration.
(riscv_compute_frame_info): New local interrupt_save_t1.  Set it
for interrupt handler with large frame.  Use it for saved reg list.
(riscv_expand_prologue): Move flag_stack_usage_info support to
eliminate duplication.
(riscv_expand_epilogue): Generate mret for interrupt handler.
(riscv_epilogue_uses): New.
(riscv_can_use_return_insn): Return false for interrupt handler.
(riscv_function_ok_for_sibcall): Likewise.
(riscv_set_current_function): Add interrupt handler support.
* config/riscv/riscv.h (EPILOGUE_USES): Call riscv_epilogue_uses.
* config/riscv/riscv.md (UNSPECV_MRET): New.
(GP_REGNUM): New.
(riscv_frflags, riscv_fsflags): Use tab after opcode.
(riscv_mret): New.
* doc/extend.texi (RISC-V Function Attributes) <interrupt>: New.

gcc/testsuite/
* gcc.target/riscv/interrupt-1.c: New.
* gcc.target/riscv/interrupt-2.c: New.
* gcc.target/riscv/interrupt-3.c: New.
* gcc.target/riscv/interrupt-4.c: New.
* gcc.target/riscv/interrupt-5.c: New.

From-SVN: r260785

6 years agore PR fortran/85786 (Segfault in associated intrinsic)
Steven G. Kargl [Fri, 25 May 2018 21:57:24 +0000 (21:57 +0000)]
re PR fortran/85786 (Segfault in associated intrinsic)

2018-05-25  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85786
* gfortran.dg/pr85786.f90: New test.

From-SVN: r260783

6 years agoPR c++/85815 - reference to member of enclosing template.
Jason Merrill [Fri, 25 May 2018 21:03:07 +0000 (17:03 -0400)]
PR c++/85815 - reference to member of enclosing template.

* search.c (lookup_base): Use currently_open_class.
(lookup_member): Use it regardless of -fconcepts.
* parser.c (cp_parser_postfix_dot_deref_expression): Check it.

From-SVN: r260782

6 years agoFix test case failures for pdp11 target.
Paul Koning [Fri, 25 May 2018 20:59:28 +0000 (16:59 -0400)]
Fix test case failures for pdp11 target.

* gcc.c-torture/compile/20151204.c: Skip if pdp11.
* gcc.c-torture/compile/pr55921.c: Ditto.
* gcc.c-torture/compile/pr60655-1.c: Ditto.
* gcc.c-torture/compile/vector-align-1.c: Add max alignment if pdp11.

From-SVN: r260781

6 years agoCWG 616, 1213 - value category of subobject references.
Jason Merrill [Fri, 25 May 2018 20:55:32 +0000 (16:55 -0400)]
CWG 616, 1213 - value category of subobject references.

* tree.c (lvalue_kind): Fix handling of ARRAY_REF of pointer.

From-SVN: r260780

6 years agore PR tree-optimization/85712 (ICE in all_phi_incrs_profitable_1 at gcc/gimple-ssa...
Bill Schmidt [Fri, 25 May 2018 19:12:16 +0000 (19:12 +0000)]
re PR tree-optimization/85712 (ICE in all_phi_incrs_profitable_1 at gcc/gimple-ssa-strength-reduction.c:3479)

2018-05-25  Bill Schmidt  <wschmidt@linux.ibm.com>

PR tree-optimization/85712
* gimple-ssa-strength-reduction.c (replace_one_candidate): Skip if
this candidate has already been replaced in-situ by a copy.

From-SVN: r260772

6 years ago* inclhack.def (vxworks_iolib_include_unistd): New fix.
Rasmus Villemoes [Fri, 25 May 2018 16:51:58 +0000 (18:51 +0200)]
* inclhack.def (vxworks_iolib_include_unistd): New fix.

From-SVN: r260763

6 years agoPR c++/80485 - inline function non-zero address.
Jason Merrill [Fri, 25 May 2018 16:44:55 +0000 (12:44 -0400)]
PR c++/80485 - inline function non-zero address.

* symtab.c (nonzero_address): Check DECL_COMDAT.

From-SVN: r260762

6 years agore PR libstdc++/85768 (FreeBSD bootstrap fails due to undefined reference to 'backtrace')
François Dumont [Fri, 25 May 2018 16:40:55 +0000 (16:40 +0000)]
re PR libstdc++/85768 (FreeBSD bootstrap fails due to undefined reference to 'backtrace')

2018-05-25  François Dumont  <fdumont@gcc.gnu.org>

PR libstdc++/85768
* src/c++11/debug.cc: Remove backtrace usage.

From-SVN: r260761

6 years agore PR rtl-optimization/83628 (performance regression when accessing arrays on alpha)
Uros Bizjak [Fri, 25 May 2018 13:56:16 +0000 (15:56 +0200)]
re PR rtl-optimization/83628 (performance regression when accessing arrays on alpha)

PR target/83628
* config/alpha/alpha.md (ashlsi3): New insn pattern.
(*ashlsi_se): Rename from *ashldi_se.  Define as sign
extension of SImode operation.  Use const123_operand predicate.
(*saddsi_1): Remove.
(*saddl_se_1): Ditto.
(*ssubsi_1): Ditto.
(*ssubl_se_1): Ditto.
* config/alpha/predicates.md (const123_operand): New predicate.
* config/alpha/constraints.md (P): Use IN_RANGE.

From-SVN: r260760

6 years agotree-ssa-alias.h (refs_may_alias_p): Add tbaa_p bool parameter, defaulted to true.
Richard Biener [Fri, 25 May 2018 13:08:28 +0000 (13:08 +0000)]
tree-ssa-alias.h (refs_may_alias_p): Add tbaa_p bool parameter, defaulted to true.

2018-05-25  Richard Biener  <rguenther@suse.de>

* tree-ssa-alias.h (refs_may_alias_p): Add tbaa_p bool parameter,
defaulted to true.
(ref_maybe_used_by_stmt_p): Likewise.
(stmt_may_clobber_ref_p): Likewise.
(stmt_may_clobber_ref_p_1): Likewise.
* tree-ssa-alias.c (refs_may_alias_p): Add tbaa_p bool parameter
and pass it along.
(ref_maybe_used_by_stmt_p): Likewise.
(stmt_may_clobber_ref_p): Likewise.
(stmt_may_clobber_ref_p_1): Likewise.
* tree-vect-data-refs.c (vect_slp_analyze_node_dependences): Use
the alias oracle to disambiguate DRs with stmts DR analysis
couldn't handle.
(vect_analyze_data_refs): Do not give up on not analyzable
DRs for BB vectorization.  Remove code truncating the dataref
vector.

From-SVN: r260757

6 years agore PR target/85832 ([AVX512] possible shorter code when comparing with vector of...
Jakub Jelinek [Fri, 25 May 2018 12:36:03 +0000 (14:36 +0200)]
re PR target/85832 ([AVX512] possible shorter code when comparing with vector of zeros)

PR target/85832
* config/i386/sse.md (<avx512>_eq<mode>3<mask_scalar_merge_name>_1):
Add (=Yk,v,C) variant using vptestm insn.  Use TARGET_AVX512BW
in test instead of TARGET_AVX512F for VI12_AVX512VL iterator.

* gcc.target/i386/avx512f-pr85832.c: New test.
* gcc.target/i386/avx512vl-pr85832.c: New test.
* gcc.target/i386/avx512bw-pr85832.c: New test.
* gcc.target/i386/avx512vlbw-pr85832.c: New test.

From-SVN: r260756

6 years agotree-vect-data-refs.c (vect_find_stmt_data_reference): New function, combining stmt...
Richard Biener [Fri, 25 May 2018 11:11:12 +0000 (11:11 +0000)]
tree-vect-data-refs.c (vect_find_stmt_data_reference): New function, combining stmt data ref gathering and fatal analysis parts.

2018-05-25  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_find_stmt_data_reference): New
function, combining stmt data ref gathering and fatal analysis
parts.
(vect_analyze_data_refs): Remove now redudnant code and simplify.
* tree-vect-loop.c (vect_get_datarefs_in_loop): Factor out from
vect_analyze_loop_2 and use vect_find_stmt_data_reference.
* tree-vect-slp.c (vect_slp_bb): Use vect_find_stmt_data_reference.
* tree-vectorizer.h (vect_find_stmt_data_reference): Declare.

From-SVN: r260754

6 years agore PR tree-optimization/85720 (bad codegen for looped assignment of primitives at...
Bin Cheng [Fri, 25 May 2018 11:09:42 +0000 (11:09 +0000)]
re PR tree-optimization/85720 (bad codegen for looped assignment of primitives at -O2)

PR tree-optimization/85720

* tree-loop-distribution.c (break_alias_scc_partitions): Don't merge
SCC if all partitions are builtins.
(version_loop_by_alias_check): New parameter.  Generate cancelable
runtime alias check if all partitions are builtins.
(distribute_loop): Update call to above function.

gcc/testsuite
* gcc.dg/tree-ssa/pr85720.c: New test.
* gcc.target/i386/avx256-unaligned-store-2.c: Disable loop pattern
distribution.

From-SVN: r260753

6 years agoFix a test-case (PR testsuite/85911).
Martin Liska [Fri, 25 May 2018 10:39:35 +0000 (12:39 +0200)]
Fix a test-case (PR testsuite/85911).

2018-05-25  Martin Liska  <mliska@suse.cz>

PR testsuite/85911
* gcc.dg/tree-prof/update-loopch.c: Do not scan
for 'Removing basic block'.

From-SVN: r260748

6 years agotree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files.
Bin Cheng [Fri, 25 May 2018 10:35:44 +0000 (10:35 +0000)]
tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files.

* tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files.
(create_default_def, for_all_parms): Moved from tree-ssa-coalesce.c.
(parm_default_def_partition_arg): Ditto.
(set_parm_default_def_partition): Ditto.
(get_parm_default_def_partitions): Ditto and make it static.
(get_undefined_value_partitions): Ditto and make it static.
(remove_ssa_form): Refactor call to init_var_map here.
* tree-ssa-coalesce.c (build_ssa_conflict_graph): Support live range
computation for loop region.
(coalesce_partitions, compute_optimized_partition_bases): Ditto.
(register_default_def): Delete.
(for_all_parms, create_default_def): Move to tree-outof-ssa.c.
(parm_default_def_partition_arg): Ditto.
(set_parm_default_def_partition): Ditto.
(get_parm_default_def_partitions): Ditto and make it static.
(get_undefined_value_partitions): Ditto and make it static.
(coalesce_with_default, coalesce_with_default): Update comment.
(create_coalesce_list_for_region): New func factored out from
create_outofssa_var_map.
(populate_coalesce_list_for_outofssa): New func factored out from
create_outofssa_var_map and coalesce_ssa_name.
(create_outofssa_var_map): Delete.
(coalesce_ssa_name): Refactor to support live range computation.
* tree-ssa-coalesce.h (coalesce_ssa_name): Change decl.
(get_parm_default_def_partitions): Delete.
(get_undefined_value_partitions): Ditto.
* tree-ssa-live.c (init_var_map, delete_var_map): Support live range
computation for loop region.
(new_tree_live_info, loe_visit_block): Ditto.
(live_worklist, set_var_live_on_entry): Ditto.
(calculate_live_on_exit, verify_live_on_entry): Ditto.
* tree-ssa-live.h (struct _var_map): New fields.
(init_var_map): Change decl.
(region_contains_p): New.

From-SVN: r260747

6 years ago* tree-ssa-live.h (live_merge_and_clear): Delete.
Bin Cheng [Fri, 25 May 2018 10:33:14 +0000 (10:33 +0000)]
* tree-ssa-live.h (live_merge_and_clear): Delete.

From-SVN: r260746

6 years agore PR c++/85912 (-fdump-lang-raw ICE on valid code)
Richard Biener [Fri, 25 May 2018 09:40:38 +0000 (09:40 +0000)]
re PR c++/85912 (-fdump-lang-raw ICE on valid code)

2018-05-25  Richard Biener  <rguenther@suse.de>

PR c++/85912
* tree-dump.c (dequeue_and_dump): Remove access to removed
operand 2 of a SWITCH_EXPR.

From-SVN: r260744

6 years ago[Ada] Improve performance of conversion from String to Long_Float
Nicolas Roche [Fri, 25 May 2018 09:05:34 +0000 (09:05 +0000)]
[Ada] Improve performance of conversion from String to Long_Float

Once it is sure that the result will be infinity, stop computation and return
the result. This ensure that the function call duration is bounded. Before that
change on some cases the computation was taking more than a few seconds.

2018-05-25  Nicolas Roche  <roche@adacore.com>

gcc/ada/

* libgnat/s-valrea.adb (Scan_Real): Abort computation once it is sure
that the result will be either -infinite or +infinite.

From-SVN: r260743

6 years ago[Ada] Remove 2GB secondary stack limit for 64-bit processors
Patrick Bernardi [Fri, 25 May 2018 09:05:28 +0000 (09:05 +0000)]
[Ada] Remove 2GB secondary stack limit for 64-bit processors

This patch removes the restriction introduced recently that limited the size
of the secondary stack to 2GB. The size of the secondary stack is now limited
to half of the size of the memory address space for the target.

2018-05-25  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* libgnat/s-parame.ads, libgnat/s-parame__vxworks.ads,
libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads (Size_Type):
Expand range of type to match the address space of the target.
(Task_Storage_Size): Remove unused type.

gcc/testsuite/

* gnat.dg/sec_stack1.adb: New testcase.

From-SVN: r260742

6 years ago[Ada] Spurious error on fixed-point operation whose operands are expressions
Ed Schonberg [Fri, 25 May 2018 09:05:21 +0000 (09:05 +0000)]
[Ada] Spurious error on fixed-point operation whose operands are expressions

This patch fixes a spurious error in a fixed-point operand of a multiplying
operator M when the operand is an adding operation and the context imposes
a different fixed-point type to the result of M.

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_res.adb (Set_Mixed_Mode_Operand): If the operand is an expression
of a fixed point type and the parent is a multiplying operation,
resolve the operand with its own type because the context will impose a
resulting type on the result of the multiplication by means of
approriate conversion.

gcc/testsuite/

* gnat.dg/fixedpnt4.adb: New testcase.

From-SVN: r260741

6 years ago[Ada] Spurious range check with Initialize_Scalars
Hristian Kirtchev [Fri, 25 May 2018 09:05:15 +0000 (09:05 +0000)]
[Ada] Spurious range check with Initialize_Scalars

This patch modifies the expansion of default-initialized array objects when
pragma Initialize_Scalars or Normalize_Scalars is in effect to suppress the
generation of checks on the constructed in-place aggregate. The aggregate
intentionally contains invalid values which may not necessarily fit the
constraints of a particular component type. Check suppression ensures that
no spurious checks are generated, and that the effects of the pragmas are
carried out.

------------
-- Source --
------------

--  gnat.adc

pragma Initialize_Scalars;

--  init_scalar.adb

with Ada.Text_IO; use Ada.Text_IO;

procedure Init_Scalar is
   type Fixed is delta 0.25 range -12.0 .. 1270.0;
   type Fixed_Array is array (1 .. 1) of Fixed;

begin
   begin
      declare
         Obj : Fixed;
         pragma Unreferenced (Obj);
      begin null; end;
   exception
      when others => Put_Line ("ERROR: Fixed raised exception");
   end;

   begin
      declare
         Obj : Fixed_Array;
         pragma Unreferenced (Obj);
      begin null; end;
   exception
      when others => Put_Line ("ERROR: Fixed_Array raised exception");
   end;
end Init_Scalar;

-----------------
-- Compilation --
-----------------

$ gnatmake -q init_scalar.adb
$ ./init_scalar

2018-05-25  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* exp_ch3.adb (Default_Initialize_Object): Ensure that the analysis of
the in-place initialization aggregate created for pragmas
Initialize_Scalars or Normalize_Scalars is performed with checks
suppressed.

From-SVN: r260740

6 years ago[Ada] Remove "constant" attribute on Osint.Unknown_Attributes
Arnaud Charlet [Fri, 25 May 2018 09:05:10 +0000 (09:05 +0000)]
[Ada] Remove "constant" attribute on Osint.Unknown_Attributes

2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_aggr.adb (Convert_To_Positional): Bump default for
Max_Others_Replicate to 32. Update comments.
* osint.ads (Unknown_Attributes): No longer pretend this is a constant.
(No_File_Info_Cache): Initialize separately.
* osint.adb (No_File_Info_Cache): Update initializer.

From-SVN: r260739

6 years ago[Ada] Membership test of class-wide interface
Javier Miranda [Fri, 25 May 2018 09:05:04 +0000 (09:05 +0000)]
[Ada] Membership test of class-wide interface

The compiler rejects the use of a membership test when the left operand
is a class-wide interface type object and the right operand is not a
class-wide type.

2018-05-25  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Membership_Op): Allow the use of the membership
test when the left operand is a class-wide interface and the right
operand is not a class-wide type.
* exp_ch4.adb (Tagged_Membership): Adding support for interface as the
left operand.

gcc/testsuite/

* gnat.dg/interface7.adb: New testcase.

From-SVN: r260738

6 years ago[Ada] Fix expansion of quantified expressions as part of "others" associations
Ed Schonberg [Fri, 25 May 2018 09:04:59 +0000 (09:04 +0000)]
[Ada] Fix expansion of quantified expressions as part of "others" associations

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_aggr.adb (Flatten): A quantified expression cannot be duplicated
in an others clause to prevent visibility issues with the generated
loop variable.
(Component_OK_For_Backend): Return false for a quantified expression.
(Check_Static_Component): Ditto.

From-SVN: r260737

6 years ago[Ada] Spurious secondary stack depletion
Hristian Kirtchev [Fri, 25 May 2018 09:04:53 +0000 (09:04 +0000)]
[Ada] Spurious secondary stack depletion

This patch reimplements the secondary stack allocation logic to eliminate an
issue which causes the memory index to overflow while the stack itself uses
very little memory, thus causing a spurious Storage_Error.

The issue in details:

The total amount of memory that the secondary stack can accomodate is dictated
by System.Parameters.Size_Type which is really an Integer, giving roughly 2 GB
of storage.

The secondary stack is comprised of multiple frames which logically form a
contiguous array of memory. Each frame maintans a range over which it operates,
where

   Low  bound = Previous frame's high bound + 1
   High bound = Previous frame's high bound + Frame size

The allocation logic starts by first checking whether the current top frame
(which may not be the "last" frame in the secondary stack) has enough memory to
fit an object. If it does, then that frame is used. If it does not, the logic
then examines the subsequent frames, while carrying out the following actions:

   * If the frame is too small to fit the object, it is deleted

   * If the frame is big enough to fit the object, it is used

If all the frames were too small (and thus deleted), a new frame is added which
is big enough to fit the object.

Due to an issue with the deletion logic, the last frame would never be deleted.
Since any new frame's range is based on the previous frame's range, the new
range would keep growing, even though the secondary stack may have very few
frames in use. Eventually this growth overflows the memory index type.

The overflow of the memory index type happens only when the secondary stack
is full, and thus signals a Storage_Error. Due to the spurious growth of the
ranges, the overflow happens much faster and results in a bogus stack depleton.

The issue manifests only when each new memory request to the secondary stack is
slightly bigger than the previous memory request, thus prompring the secondary
stack to delete all its frames, and create a new one.

2018-05-25  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* libgnat/s-secsta.adb (SS_Allocate): Reimplemented.
(SS_Allocate_Dynamic): New routine. The allocation logic is now split
into three distring cases rather than in one loop which attempts to
handle all three cases. This rewrite eliminates an issue where the last
frame of the stack cannot be freed, thus causing the memory range of a
new frame to approach the overflow point of the memory index type.
Since the overflow is logically treated as a
too-much-memory-on-the-stack scenario, it causes a bogus Storage_Error.
(SS_Allocate_Static): New routine. The routine factorizes the static
secondary stack-related code from the former SS_Allocate.

gcc/testsuite/

* gnat.dg/sec_stack2.adb: New testcase.

From-SVN: r260736

6 years ago[Ada] Document the '-U' option for gnatelim
Sergey Rybin [Fri, 25 May 2018 09:04:47 +0000 (09:04 +0000)]
[Ada] Document the '-U' option for gnatelim

2018-05-25  Sergey Rybin  <rybin@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_and_program_execution.rst: Add description of '-U'
option for gnatelim.

From-SVN: r260735

6 years ago[Ada] Crash on classwide precondition on subprogram with stub
Ed Schonberg [Fri, 25 May 2018 09:04:42 +0000 (09:04 +0000)]
[Ada] Crash on classwide precondition on subprogram with stub

This patch allows the compiler to handle properly a classwide precondition
on a primitive operation whose body is a stub and a separate subunit.

Executing:

   gnatmake -gnata -q check
   ./check

must yield:

   precondition violated

----
with Text_IO;
with Msg_Data_Block_Decoder; use Msg_Data_Block_Decoder;
procedure Check is
   Thing : T_Msg_Data_Block_Decoder;
   Value : Integer;
begin
   begin
      Value := Get_Long_Term_Corrections (Thing);
   exception
      when others => Text_IO.Put_Line ("precondition violated");
   end;
end Check;
----
package Msg_Data_Block_Decoder is
   pragma Preelaborate;
   type T_Msg_Data_Block_Decoder is Tagged Limited null record;

   type T_Msg_Data_Block_Decoder_Class_Access is
       access all T_Msg_Data_Block_Decoder'Class;

   function Get_Decoded_Data (This : in T_Msg_Data_Block_Decoder)
      return Integer;

   function Get_Long_Term_Corrections
     (This : in T_Msg_Data_Block_Decoder) return Integer  with
       Pre'
        Class => Get_Decoded_Data (T_Msg_Data_Block_Decoder'Class (This)) = 2;

end Msg_Data_Block_Decoder;
----
package body Msg_Data_Block_Decoder is

   function Get_Long_Term_Corrections (This : in T_Msg_Data_Block_Decoder)
   return Integer is separate;

   function Get_Decoded_Data (This : in T_Msg_Data_Block_Decoder)
     return Integer is
   begin
     return 0;
   end Get_Decoded_Data;

end Msg_Data_Block_Decoder;
----
separate (Msg_Data_Block_Decoder)
function Get_Long_Term_Corrections (This : in T_Msg_Data_Block_Decoder)
   return Integer is
begin
  return 0;
end Get_Long_Term_Corrections;

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Do not create
Class_Wide_Clone_Body when analyzing a subprogram_body_stub: the clone
is created when the proper body of the stub is analyzed.
* sem_util.adb (ZBuild_Class_Wide_Clone_Body): If the subprogram body
is the proper body of a subunit, the cloned body must be inserted in
the declarative list that contains the stub.

From-SVN: r260734

6 years ago[Ada] Fix for freezing of expression functions
Justin Squirek [Fri, 25 May 2018 09:04:37 +0000 (09:04 +0000)]
[Ada] Fix for freezing of expression functions

2018-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* exp_ch6.adb (Expand_Simple_Function_Return): Add guard in check to
generate code for 6.5(8-10) so that we don't get an assertion error
when dealing with an incomplete return type.

From-SVN: r260733

6 years ago[Ada] Strip too long expressions in debug routines
Arnaud Charlet [Fri, 25 May 2018 09:04:32 +0000 (09:04 +0000)]
[Ada] Strip too long expressions in debug routines

2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* pprint.adb (Expression_Name): Strip too long expressions to avoid
carrying very large strings.

From-SVN: r260732

6 years ago[Ada] Disable the creation of the main task secondary stack by the binder
Patrick Bernardi [Fri, 25 May 2018 09:04:27 +0000 (09:04 +0000)]
[Ada] Disable the creation of the main task secondary stack by the binder

Users can now specify that the binder should not create a secondary stack for
the main (environment) task through the binder switch -Q0. This is useful for
ZFP runtime users who allocate secondary stacks for their application
themselves.

2018-05-25  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* switch-b.adb (Scan_Binder_Switches): binder switch -Q accepts Natural
numbers.

From-SVN: r260731

6 years ago[Ada] Implement stack unwinding for Linux on AArch64
Doug Rupp [Fri, 25 May 2018 09:04:20 +0000 (09:04 +0000)]
[Ada] Implement stack unwinding for Linux on AArch64

2018-05-25  Doug Rupp  <rupp@adacore.com>

gcc/ada/

* tracebak.c (aarch64-linux): Implement.

From-SVN: r260730

6 years ago[Ada] Minor reformatting
Justin Squirek [Fri, 25 May 2018 09:04:15 +0000 (09:04 +0000)]
[Ada] Minor reformatting

2018-05-25  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch8.adb: Minor reformatting.

From-SVN: r260729

6 years ago[Ada] Fix convention for iteration with multiple loop variables
Piotr Trojanek [Fri, 25 May 2018 09:04:09 +0000 (09:04 +0000)]
[Ada] Fix convention for iteration with multiple loop variables

Refactoring based on suggestions from GNAT frontend developers.  Semantics
unaffected.

2018-05-25  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_util.adb (Iterate_Call_Parameters): Fix code convention and
assertions.

From-SVN: r260728

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Fri, 25 May 2018 09:04:04 +0000 (09:04 +0000)]
[Ada] Minor reformatting

2018-05-25  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* einfo.adb, einfo.ads, exp_ch3.adb, exp_ch8.adb, exp_unst.adb,
pprint.adb, sem_ch12.adb, sem_ch3.adb, sem_prag.adb, sem_util.adb:
Minor reformatting.

From-SVN: r260727

6 years ago[Ada] Strengthen checks for instantiation with interface types
Ed Schonberg [Fri, 25 May 2018 09:03:59 +0000 (09:03 +0000)]
[Ada] Strengthen checks for instantiation with interface types

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch12.adb (Instance_Exists): New function, subsidiary of
Validate_Derived_Type_Instance, to verify that all interfaces
implemented by the formal type are also implemented by the actual. The
verification is complicated when an interface of the formal is declared
in a generic unit and the actual is declared in an instance of it.
There is currently no mechanism to relate an interface declared within
a generic to the corresponding interface in an instance, so we must
traverse the list of interfaces of the actual, looking for a name
match, and verifying that that interface is declared in an instance.

From-SVN: r260726

6 years ago[Ada] Rewrite Iterate_Call_Parameters in more assertive style
Piotr Trojanek [Fri, 25 May 2018 09:03:54 +0000 (09:03 +0000)]
[Ada] Rewrite Iterate_Call_Parameters in more assertive style

The formal and actual parameters in a subprogram call must match each other.
This is now checked with assertion (so that we can detect possible mistakes),
while the production builds have less work to do. Semantics unchanged.

2018-05-25  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_util.adb (Iterate_Call_Parameters): Rewrite with extra
assertions; replace function versions of Next_Formal/Next_Actual with
their procedural versions (which are more concise).

From-SVN: r260725

6 years ago[Ada] Make Max_Sensible_Delay uniform across all Posix targets
Doug Rupp [Fri, 25 May 2018 09:03:47 +0000 (09:03 +0000)]
[Ada] Make Max_Sensible_Delay uniform across all Posix targets

For instance: 6 months where Duration is 64bits.  Heretofore LynxOS was unique
in having an approximately 12 days max delay. By experimentation the actual
maximum was determined and all relevant delay and sleep procedures rewritten to
incrementally wait if necessary.

2018-05-25  Doug Rupp  <rupp@adacore.com>

gcc/ada/

* libgnarl/s-osinte__aix.ads, libgnarl/s-osinte__android.ads,
libgnarl/s-osinte__darwin.ads, libgnarl/s-osinte__freebsd.ads,
libgnarl/s-osinte__hpux.ads, libgnarl/s-osinte__kfreebsd-gnu.ads,
libgnarl/s-osinte__linux.ads, libgnarl/s-osinte__lynxos178e.ads,
libgnarl/s-osinte__qnx.ads, libgnarl/s-osinte__rtems.ads
(Relative_Timed_Wait): Remove.
* libgnarl/s-tpopmo.adb (Timed_Sleep, Timed_Delay): Rewrite to allow
for incremental looping. Remove references to Rel_Time and
Relative_Timed_Wait.
* libgnat/s-osprim__posix.adb, libgnat/s-osprim__posix2008.adb
(Timed_Delay): Make separate.
* libgnat/s-optide.adb: New separate procedure.
* libgnat/s-osprim.ads (Max_System_Delay): New constant.
* libgnat/s-osprim__lynxos.ads (Max_Sensible_Delay): Set to 6 months.
(Max_System_Delay): New constant.

From-SVN: r260724

6 years ago[Ada] Checks on instantiations with formal derived types with interfaces
Ed Schonberg [Fri, 25 May 2018 09:03:41 +0000 (09:03 +0000)]
[Ada] Checks on instantiations with formal derived types with interfaces

This patch implements the rule stated in RM 12.5.5 : the actual shall be
a descendant of very progenitor of the formal type.

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch12.adb (Validate_Derived_Type_Instance): Verify that the actual
for a formal derived type implements all the interfaces declared for
the formal.

gcc/testsuite/

* gnat.dg/interface6.adb: New testcase.

From-SVN: r260723

6 years ago[Ada] Fix handling of Loop_Entry for CodePeer/SPARK
Yannick Moy [Fri, 25 May 2018 09:03:34 +0000 (09:03 +0000)]
[Ada] Fix handling of Loop_Entry for CodePeer/SPARK

When the applicable Assertion_Policy is Ignore for a pragma containing
an occurrence of attribute Loop_Entry, CodePeer and SPARK should still be
able to analyze the corresponding pragma. GNAT frontend was wrongly
translating X'Loop_Entry as X in the AST, as a side-effect of an
optimization only valid for compilation and not for static analysis.

This has no effect on compilation.

2018-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_prag.adb (Check_Applicable_Policy): Deal specially with CodePeer
and GNATprove modes when applicable policy is Ignore.

From-SVN: r260722

6 years ago[Ada] Support for C99 and C++ standard boolean types
Eric Botcazou [Fri, 25 May 2018 09:03:29 +0000 (09:03 +0000)]
[Ada] Support for C99 and C++ standard boolean types

This change the type Interfaces.C.Extensions.bool to be fully compatible
with the C99 and C++ standard boolean types by making it a fully-fledged
boolean type with convention C.

The following C+Ada program must compile quietly in LTO mode:

bool b;

struct S {};

bool foo (struct S *s) { return true; }

pragma Ada_2005;
pragma Style_Checks (Off);

with Interfaces.C; use Interfaces.C;
with Interfaces.C.Extensions;

package t_c is

   b : aliased Extensions.bool;  -- t.c:3
   pragma Import (C, b, "b");

   type S is record
      null;
   end record;
   pragma Convention (C_Pass_By_Copy, S);  -- t.c:5

   function foo (the_s : access S) return Extensions.bool;  -- t.c:7
   pragma Import (C, foo, "foo");

end t_c;

with t_c; use t_c;

procedure P_C is

  Dummy : aliased S;

begin
  b := foo (Dummy'Access);
end;

2018-05-25  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* freeze.adb (Freeze_Enumeration_Type): Do not give integer size to a
boolean type with convention C.
* libgnat/i-cexten.ads (bool): Change to boolean with convention C.
* gcc-interface/decl.c (gnat_to_gnu_entity): Add new local variable
FOREIGN and use it throughout the function.
<E_Enumeration_Type>: Set precision 1 on boolean types with foreign
convention.
<E_Enumeration_Subtype>: Likewise for subtypes.
<E_Record_Type>: Force the size of a storage unit on empty classes.
* gcc-interface/utils.c (make_type_from_size) <BOOLEAN_TYPE>: Skip
boolean types with precision 1 if the size is the expected one.

From-SVN: r260721

6 years ago[Ada] Do not print non ASCII characters in debug routines
Arnaud Charlet [Fri, 25 May 2018 09:03:24 +0000 (09:03 +0000)]
[Ada] Do not print non ASCII characters in debug routines

2018-05-25  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* pprint.adb (Expression_Name): Do not print non ASCII characters.

From-SVN: r260720

6 years ago[Ada] Unbounded strings: inline Initialize and Adjust
Bob Duff [Fri, 25 May 2018 09:03:19 +0000 (09:03 +0000)]
[Ada] Unbounded strings: inline Initialize and Adjust

Procedures Initialize and Adjust in the Ada.[Wide_[Wide_]]Strings.Unbounded
package are now inlined for nondispatching calls. No test available (efficiency
issue only).

2018-05-25  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/a-strunb__shared.ads, libgnat/a-stwiun__shared.ads,
libgnat/a-stzunb__shared.ads: (Initialize, Adjust): Add pragma Inline.

From-SVN: r260719

6 years ago[Ada] Minor comment fix
Bob Duff [Fri, 25 May 2018 09:03:14 +0000 (09:03 +0000)]
[Ada] Minor comment fix

2018-05-25  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_util.ads: Minor comment fix.

From-SVN: r260718

6 years ago[Ada] Refine checks for uplevel references
Ed Schonberg [Fri, 25 May 2018 09:03:09 +0000 (09:03 +0000)]
[Ada] Refine checks for uplevel references

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_unst.adb (Visit_Node): Restrict check for uplevel references in
prefixes of array attributes, to prefixes that are entity names whose
type is constrained.
(Note_Uplevel_Bound): Verify that the bound is declared in an enclosing
subprogram, as itype created for loops in pre/postcondition may appear
in loops at the library level.

From-SVN: r260717

6 years ago[Ada] Compiler loop on expression function and predicate in generic unit
Ed Schonberg [Fri, 25 May 2018 09:03:04 +0000 (09:03 +0000)]
[Ada] Compiler loop on expression function and predicate in generic unit

This patch fixes an infinite loop in the compiler when analyzing an
expression function whose expression mentions a subtype with a static
predicate, and the context is a generic unit.

2018-05-25  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch13.adb (Build_Predicate_Functions): The predicate function
declaration is inserted into the tree and analyzed at that point, so
should not be reinserted when the body is constructed. Inside a
generic, ensure that the body is not inserted twice in the tree.

gcc/testsuite/

* gnat.dg/static_pred1.adb, gnat.dg/static_pred1.ads: New testcase.

From-SVN: r260716

6 years ago[Ada] Detect misplaced assertions between loop invariants
Yannick Moy [Fri, 25 May 2018 09:02:58 +0000 (09:02 +0000)]
[Ada] Detect misplaced assertions between loop invariants

Loop invariants and loop variants should all be colocated, as defined in
SPARK RM 5.5.3(8). The code checking that rule was incorrectly accepting
pragma Assert between two loop invariants. Now fixed.

2018-05-25  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_prag.adb (Check_Grouping): Modify test to ignore statements and
declarations not coming from source.

From-SVN: r260715

6 years ago[Ada] Document new switch --copy-environment for gnattest
Fedor Rybin [Fri, 25 May 2018 09:02:53 +0000 (09:02 +0000)]
[Ada] Document new switch --copy-environment for gnattest

2018-05-25  Fedor Rybin  <frybin@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Document new switch
--copy-environment for gnattest.

From-SVN: r260714

6 years agoAdd IFN_COND_{MUL,DIV,MOD,RDIV}
Richard Sandiford [Fri, 25 May 2018 08:53:15 +0000 (08:53 +0000)]
Add IFN_COND_{MUL,DIV,MOD,RDIV}

This patch adds support for conditional multiplication and division.
It's mostly mechanical, but a few notes:

* The *_optab name and the .md names are the same as the unconditional
  forms, just with "cond_" added to the front.  This means we still
  have the awkward difference between sdiv and div, etc.

* It was easier to retain the difference between integer and FP
  division in the function names, given that they map to different
  tree codes (TRUNC_DIV_EXPR and RDIV_EXPR).

* SVE has no direct support for IFN_COND_MOD, but it seemed more
  consistent to add it anyway.

* Adding IFN_COND_MUL enables an extra fully-masked reduction
  in gcc.dg/vect/pr53773.c.

* In practice we don't actually use the integer division forms without
  if-conversion support (added by a later patch).

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* doc/sourcebuild.texi (vect_double_cond_arith): Include
multiplication and division.
* doc/md.texi (cond_mul@var{m}, cond_div@var{m}, cond_mod@var{m})
(cond_udiv@var{m}, cond_umod@var{m}): Document.
* optabs.def (cond_smul_optab, cond_sdiv_optab, cond_smod_optab)
(cond_udiv_optab, cond_umod_optab): New optabs.
* internal-fn.def (IFN_COND_MUL, IFN_COND_DIV, IFN_COND_MOD)
(IFN_COND_RDIV): New internal functions.
* internal-fn.c (get_conditional_internal_fn): Handle TRUNC_DIV_EXPR,
TRUNC_MOD_EXPR and RDIV_EXPR.
* match.pd (UNCOND_BINARY, COND_BINARY): Handle them.
* config/aarch64/iterators.md (UNSPEC_COND_MUL, UNSPEC_COND_DIV):
New unspecs.
(SVE_INT_BINARY): Include mult.
(SVE_COND_FP_BINARY): Include UNSPEC_MUL and UNSPEC_DIV.
(optab, sve_int_op): Handle mult.
(optab, sve_fp_op, commutative): Handle UNSPEC_COND_MUL and
UNSPEC_COND_DIV.
* config/aarch64/aarch64-sve.md (cond_<optab><mode>): New pattern
for SVE_INT_BINARY_SD.

gcc/testsuite/
* lib/target-supports.exp
(check_effective_target_vect_double_cond_arith): Include
multiplication and division.
* gcc.dg/vect/pr53773.c: Do not expect a scalar tail when using
fully-masked loops with a fixed vector length.
* gcc.dg/vect/vect-cond-arith-1.c: Add multiplication and division
tests.
* gcc.target/aarch64/sve/vcond_8.c: Likewise.
* gcc.target/aarch64/sve/vcond_9.c: Likewise.
* gcc.target/aarch64/sve/vcond_12.c: Add multiplication tests.

From-SVN: r260713

6 years ago[AArch64] Add SVE support for integer division
Richard Sandiford [Fri, 25 May 2018 08:38:12 +0000 (08:38 +0000)]
[AArch64] Add SVE support for integer division

After the previous patch to prevent pessimisation of divisions
by constants, this patch adds support for the SVE integer division
instructions.

2018-05-25  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* config/aarch64/iterators.md (SVE_INT_BINARY_SD): New code iterator.
(optab, sve_int_op): Handle div and udiv.
* config/aarch64/aarch64-sve.md (<optab><mode>3): New expander
for SVE_INT_BINARY_SD.
(*<optab><mode>3): New insn for the same.

gcc/testsuite/
* gcc.target/aarch64/sve/div_1.c: New test.
* gcc.target/aarch64/sve/div_1_run.c: Likewise.
* gcc.target/aarch64/sve/mul_highpart_2.c: Likewise.
* gcc.target/aarch64/sve/mul_highpart_2_run.c: Likewise.

From-SVN: r260712

6 years agoPrefer open-coding vector integer division
Richard Sandiford [Fri, 25 May 2018 08:18:42 +0000 (08:18 +0000)]
Prefer open-coding vector integer division

vect_recog_divmod_pattern currently bails out if the target has
native support for integer division, but I think in practice
it's always going to be better to open-code it anyway, just as
we usually open-code scalar divisions by constants.

I think the only currently affected targets are MIPS MSA and
powerpcspe (which is currently marked obsolete).  For:

  void
  foo (int *x)
  {
    for (int i = 0; i < 100; ++i)
      x[i] /= 2;
  }

the MSA port previously preferred to use division for powers of 2:

        .set    noreorder
        bnz.w   $w1,1f
        div_s.w $w0,$w0,$w1
        break   7
        .set    reorder
1:

(or just the div_s.w for -mno-check-zero-division), but after the patch
it open-codes them using shifts:

        clt_s.w $w1,$w0,$w2
        subv.w  $w0,$w0,$w1
        srai.w  $w0,$w0,1

MSA doesn't define a high-part pattern, so it still uses a division
instruction for the non-power-of-2 case.

Richard B pointed out that this would disable SLP of division by
different amounts, but I think in practice that's a price worth paying,
since the current cost model can't really tell whether using a general
vector division is better than using open-coded scalar divisions.
The fix would be either to support SLP of mixed open-coded divisions
or to improve the cost model and try SLP again without the patterns.
The patch adds an XFAILed test for this.

2018-05-23  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree-vect-patterns.c: Include predict.h.
(vect_recog_divmod_pattern): Restrict check for division support
to when optimizing for size.

gcc/testsuite/
* gcc.dg/vect/bb-slp-div-1.c: New XFAILed test.

From-SVN: r260711