gcc.git
6 years ago[Ada] Spurious visibility error in a nested instance with formal package
Ed Schonberg [Tue, 22 May 2018 13:23:46 +0000 (13:23 +0000)]
[Ada] Spurious visibility error in a nested instance with formal package

This patch fixes a spurious visibility error with a nested instance of a
generic unit with a formal package, when the actual for it is a formal
package PA of an enclosing generic, and there are subsequent uses of the
formals of PA in that generic unit.

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

gcc/ada/

* einfo.ads, einfo.adb: New attribute Hidden_In_Formal_Instance,
defined on packages that are actuals for formal packages, in order to
set/reset the visibility of the formals of a formal package with given
actuals, when there are subsequent uses of those formals in the
enclosing generic, as required by RN 12.7 (10).
* atree.ads, atree.adb: Add operations for Elist30.
* atree.h: Add Elist30.
* sem_ch12.adb (Analyze_Formal_Package_Instantiation): Collect formals
that are not defaulted and are thus not visible within the current
instance.
(Check_Formal_Packages): Reset visibility of formals of a formal
package that are not defaulted, on exit from current instance.

gcc/testsuite/

* gnat.dg/gen_formal_pkg.adb, gnat.dg/gen_formal_pkg_a.ads,
gnat.dg/gen_formal_pkg_b.ads, gnat.dg/gen_formal_pkg_w.ads: New
testcase.

From-SVN: r260520

6 years ago[Ada] Prohibit output dependency items on functions
Hristian Kirtchev [Tue, 22 May 2018 13:23:40 +0000 (13:23 +0000)]
[Ada] Prohibit output dependency items on functions

This patch modifies the analysis of pragma [Refined_]Depends to emit an error
when the pragma is asspciated with a [generic] function, and one of its clauses
contains a non-null, non-'Result output item.

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

--  pack.ads

package Pack with SPARK_Mode is
   Obj_1 : Integer := 1;
   Obj_2 : Integer := 2;

   function Func_1 return Integer
     with Global => (In_Out => Obj_1);                               --  Error

   function Func_2 return Integer
     with Global => (Output => Obj_1);                               --  Error

   function Func_3 return Integer
     with Depends => (Func_3'Result => Obj_1,                        --  OK
                      Obj_1         => Obj_1);                       --  Error

   function Func_4 return Integer
     with Depends => (Func_4'Result => Obj_1,                        --  OK
                      null          => Obj_2);                       --  OK
end Pack;

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

$ gcc -c pack.ads
pack.ads:6:22: global mode "In_Out" is not applicable to functions
pack.ads:9:22: global mode "Output" is not applicable to functions
pack.ads:13:23: output item is not applicable to function

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

gcc/ada/

* sem_prag.adb (Analyze_Input_Output): Emit an error when a non-null,
non-'Result output appears in the output list of a function.

From-SVN: r260519

6 years ago[Ada] Allow attribute 'Valid_Scalars on private types
Hristian Kirtchev [Tue, 22 May 2018 13:23:35 +0000 (13:23 +0000)]
[Ada] Allow attribute 'Valid_Scalars on private types

This patch modifies the analysis and expansion of attribute 'Valid_Scalars. It
is now possible to specify the attribute on a prefix of an untagged private
type.

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

--  gnat.adc

pragma Initialize_Scalars;

--  pack1.ads

package Pack1 is
   type Acc_1  is private;
   type Acc_2  is private;
   type Arr_1  is private;
   type Arr_2  is private;
   type Bool_1 is private;
   type Cmpx_1 is private;
   type Cmpx_2 is private;
   type Enum_1 is private;
   type Enum_2 is private;
   type Fix_1  is private;
   type Fix_2  is private;
   type Flt_1  is private;
   type Flt_2  is private;
   type Modl_1 is private;
   type Prot_1 is limited private;
   type Prot_2 is limited private;
   type Prot_3 (Discr : Boolean) is limited private;
   type Rec_1  is private;
   type Rec_2  is private;
   type Rec_3  is private;
   type Rec_4 (Discr : Boolean) is private;
   type Rec_5 (Discr_1 : Boolean; Discr_2 : Boolean) is private;
   type Sign_1 is private;
   type Tag_1  is tagged private;
   type Task_1 is limited private;
   type Task_2 (Discr : Boolean) is limited private;

   type Prec_Arr_1 is private;
   type Prec_Arr_2 is private;
   type Prec_Arr_3 is private;
   type Prec_Arr_4 is private;
   type Prec_Arr_5 is private;

   type Prec_Rec_1 is private;
   type Prec_Rec_2 (Discr : Boolean) is private;
   type Prec_Rec_3 (Discr_1 : Boolean; Discr_2 : Boolean) is private;
   type Prec_Rec_4 is private;
   type Prec_Rec_5 is private;
   type Prec_Rec_6 is private;
   type Prec_Rec_7 is private;
   type Prec_Rec_8 is private;
   type Prec_Rec_9 is private;

private
   type Acc_1 is access Boolean;
   type Acc_2 is access procedure;
   type Arr_1  is array (1 .. 10) of Boolean;
   type Arr_2  is array (1 .. 3) of access Boolean;
   type Bool_1 is new Boolean;
   type Cmpx_1 is array (1 .. 5) of Rec_5 (True, True);
   type Cmpx_2 is record
      Comp_1 : Cmpx_1;
      Comp_2 : Rec_4 (True);
   end record;
   type Enum_1 is (One, Two, Three);
   type Enum_2 is ('f', 'o', 'u', 'r');
   type Fix_1  is delta 0.5 range 0.0 .. 10.0;
   type Fix_2  is delta 0.1 digits 15;
   type Flt_1  is digits 8;
   type Flt_2  is digits 10 range -1.0 .. 1.0;
   type Modl_1 is mod 8;
   protected type Prot_1 is
   end Prot_1;
   protected type Prot_2 is
   private
      Comp_1 : Boolean;
      Comp_2 : Boolean;
   end Prot_2;
   protected type Prot_3 (Discr : Boolean) is
   private
      Comp_1 : Boolean;
      Comp_2 : Rec_4 (Discr);
   end Prot_3;
   type Rec_1  is null record;
   type Rec_2  is record
      null;
   end record;
   type Rec_3  is record
      Comp_1 : Boolean;
      Comp_2 : Boolean;
   end record;
   type Rec_4 (Discr : Boolean) is record
      case Discr is
         when True =>
            Comp_1 : Boolean;
            Comp_2 : Boolean;
         when False =>
            Comp_3 : access Boolean;
      end case;
   end record;
   type Rec_5 (Discr_1 : Boolean; Discr_2 : Boolean) is record
      Comp_1 : Boolean;
      Comp_2 : Boolean;
      case Discr_1 is
         when True =>
            case Discr_2 is
               when True =>
                  Comp_3 : Boolean;
                  Comp_4 : Boolean;
               when False =>
                  null;
            end case;
         when False =>
            null;
      end case;
   end record;
   type Sign_1 is range 1 .. 10;
   type Tag_1 is tagged null record;
   task type Task_1;
   task type Task_2 (Discr : Boolean);

   type Prec_Arr_1 is array (1 .. 2) of Boolean;
   type Prec_Arr_2 is array (1 .. 2, 1 .. 2) of Boolean;
   type Prec_Arr_3 is array (1 .. 2) of Prec_Rec_1;
   type Prec_Arr_4 is array (1 .. 2) of Prec_Rec_2 (True);
   type Prec_Arr_5 is array (1 .. 2) of Prec_Rec_3 (True, True);

   type Prec_Rec_1 is record
      Comp_1 : Boolean;
   end record;

   type Prec_Rec_2 (Discr : Boolean) is record
      case Discr is
         when True =>
            Comp_1 : Boolean;
         when others =>
            Comp_2 : Boolean;
      end case;
   end record;

   type Prec_Rec_3 (Discr_1 : Boolean; Discr_2 : Boolean) is record
      case Discr_1 is
         when True =>
            case Discr_2 is
               when True =>
                  Comp_1 : Boolean;
               when others =>
                  Comp_2 : Boolean;
            end case;
         when False =>
            case Discr_2 is
               when True =>
                  Comp_3 : Boolean;
               when others =>
                  Comp_4 : Boolean;
            end case;
      end case;
   end record;

   type Prec_Rec_4 is record
      Comp : Prec_Arr_1;
   end record;

   type Prec_Rec_5 is record
      Comp : Prec_Arr_4;
   end record;

   type Prec_Rec_6 is record
      Comp : Prec_Arr_5;
   end record;

   type Prec_Rec_7 is record
      Comp : Prec_Rec_4;
   end record;

   type Prec_Rec_8 is record
      Comp : Prec_Rec_5;
   end record;

   type Prec_Rec_9 is record
      Comp : Prec_Rec_6;
   end record;
end Pack1;

--  pack1.adb

package body Pack1 is
   protected body Prot_1 is end Prot_1;
   protected body Prot_2 is end Prot_2;
   protected body Prot_3 is end Prot_3;

   task body Task_1 is begin null; end Task_1;
   task body Task_2 is begin null; end Task_2;
end Pack1;

--  pack2.ads

with Pack1; use Pack1;

package Pack2 is
   type Acc_3  is private;
   type Acc_4  is private;
   type Arr_3  is private;
   type Arr_4  is private;
   type Bool_2 is private;
   type Cmpx_3 is private;
   type Cmpx_4 is private;
   type Enum_3 is private;
   type Enum_4 is private;
   type Fix_3  is private;
   type Fix_4  is private;
   type Flt_3  is private;
   type Flt_4  is private;
   type Modl_2 is private;
   type Prot_4 is limited private;
   type Prot_5 is limited private;
   type Prot_6 is limited private;
   type Rec_6  is private;
   type Rec_7  is private;
   type Rec_8  is private;
   type Rec_9  (Discr : Boolean) is private;
   type Rec_10 (Discr : Boolean) is private;
   type Sign_2 is private;
   type Task_3 is limited private;

private
   type Acc_3  is new Acc_1;
   type Acc_4  is new Acc_2;
   type Arr_3  is new Arr_1;
   type Arr_4  is new Arr_2;
   type Bool_2 is new Bool_1;
   type Cmpx_3 is new Cmpx_1;
   type Cmpx_4 is new Cmpx_2;
   type Enum_3 is new Enum_1;
   type Enum_4 is new Enum_2;
   type Fix_3  is new Fix_1;
   type Fix_4  is new Fix_2;
   type Flt_3  is new Flt_1;
   type Flt_4  is new Flt_2;
   type Modl_2 is new Modl_1;
   type Prot_4 is new Prot_1;
   type Prot_5 is new Prot_2;
   type Prot_6 is new Prot_3 (True);
   type Rec_6  is new Rec_1;
   type Rec_7  is new Rec_2;
   type Rec_8  is new Rec_3;
   type Rec_9  (Discr : Boolean) is
     new Rec_4 (Discr => Discr);
   type Rec_10 (Discr : Boolean) is
     new Rec_5 (Discr_1 => Discr, Discr_2 => True);
   type Sign_2 is new Sign_1;
   type Task_3 is new Task_1;
end Pack2;

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;

with Pack1; use Pack1;
with Pack2; use Pack2;

procedure Main is
   procedure Check
     (Actual : Boolean;
      Valid  : Boolean;
      Test   : String)
   is
   begin
      if Actual /= Valid then
         Put_Line ("ERROR " & Test);
         Put_Line ("  valid : " & Valid'Img);
         Put_Line ("  actual: " & Actual'Img);
      end if;
   end Check;

   Valid     : constant Boolean := True;
   Not_Valid : constant Boolean := not Valid;

   pragma Warnings (Off);
   Acc_1_Obj  : Acc_1;
   Acc_2_Obj  : Acc_2;
   Acc_3_Obj  : Acc_3;
   Acc_4_Obj  : Acc_4;
   Arr_1_Obj  : Arr_1;
   Arr_2_Obj  : Arr_2;
   Arr_3_Obj  : Arr_3;
   Arr_4_Obj  : Arr_4;
   Bool_1_Obj : Bool_1;
   Bool_2_Obj : Bool_2;
   Cmpx_1_Obj : Cmpx_1;
   Cmpx_2_Obj : Cmpx_2;
   Cmpx_3_Obj : Cmpx_3;
   Cmpx_4_Obj : Cmpx_4;
   Enum_1_Obj : Enum_1;
   Enum_2_Obj : Enum_2;
   Enum_3_Obj : Enum_3;
   Enum_4_Obj : Enum_4;
   Fix_1_Obj  : Fix_1;
   Fix_2_Obj  : Fix_2;
   Fix_3_Obj  : Fix_3;
   Fix_4_Obj  : Fix_4;
   Flt_1_Obj  : Flt_1;
   Flt_2_Obj  : Flt_2;
   Flt_3_Obj  : Flt_3;
   Flt_4_Obj  : Flt_4;
   Modl_1_Obj : Modl_1;
   Modl_2_Obj : Modl_2;
   Prot_1_Obj : Prot_1;
   Prot_2_Obj : Prot_2;
   Prot_3_Obj : Prot_3 (True);
   Prot_4_Obj : Prot_4;
   Prot_5_Obj : Prot_5;
   Rec_1_Obj  : Rec_1;
   Rec_2_Obj  : Rec_2;
   Rec_3_Obj  : Rec_3;
   Rec_4_Obj  : Rec_4 (True);
   Rec_5_Obj  : Rec_5 (True, True);
   Rec_6_Obj  : Rec_6;
   Rec_7_Obj  : Rec_7;
   Rec_8_Obj  : Rec_8;
   Rec_9_Obj  : Rec_9 (True);
   Sign_1_Obj : Sign_1;
   Sign_2_Obj : Sign_2;
   Tag_1_Obj  : Tag_1;
   Task_1_Obj : Task_1;
   Task_2_Obj : Task_2 (True);
   Task_3_Obj : Task_3;

   Prec_Arr_1_Obj : Prec_Arr_1;
   Prec_Arr_2_Obj : Prec_Arr_2;
   Prec_Arr_3_Obj : Prec_Arr_3;
   Prec_Arr_4_Obj : Prec_Arr_4;
   Prec_Arr_5_Obj : Prec_Arr_5;

   Prec_Rec_1_Obj : Prec_Rec_1;
   Prec_Rec_2_Obj : Prec_Rec_2 (True);
   Prec_Rec_3_Obj : Prec_Rec_3 (True, True);
   Prec_Rec_4_Obj : Prec_Rec_4;
   Prec_Rec_5_Obj : Prec_Rec_5;
   Prec_Rec_6_Obj : Prec_Rec_6;
   Prec_Rec_7_Obj : Prec_Rec_7;
   Prec_Rec_8_Obj : Prec_Rec_8;
   Prec_Rec_9_Obj : Prec_Rec_9;
   pragma Warnings (On);

begin
   Check (Acc_1_Obj'Valid_Scalars,  Valid,     "Acc_1_Obj");
   Check (Acc_2_Obj'Valid_Scalars,  Valid,     "Acc_2_Obj");
   Check (Acc_3_Obj'Valid_Scalars,  Valid,     "Acc_3_Obj");
   Check (Acc_4_Obj'Valid_Scalars,  Valid,     "Acc_4_Obj");
   Check (Arr_1_Obj'Valid_Scalars,  Not_Valid, "Arr_1_Obj");
   Check (Arr_2_Obj'Valid_Scalars,  Valid,     "Arr_2_Obj");
   Check (Arr_3_Obj'Valid_Scalars,  Not_Valid, "Arr_3_Obj");
   Check (Arr_4_Obj'Valid_Scalars,  Valid,     "Arr_4_Obj");
   Check (Bool_1_Obj'Valid_Scalars, Not_Valid, "Bool_1_Obj");
   Check (Bool_2_Obj'Valid_Scalars, Not_Valid, "Bool_2_Obj");
   Check (Cmpx_1_Obj'Valid_Scalars, Not_Valid, "Cmpx_1_Obj");
   Check (Cmpx_2_Obj'Valid_Scalars, Not_Valid, "Cmpx_2_Obj");
   Check (Cmpx_3_Obj'Valid_Scalars, Not_Valid, "Cmpx_3_Obj");
   Check (Cmpx_4_Obj'Valid_Scalars, Not_Valid, "Cmpx_4_Obj");
   Check (Enum_1_Obj'Valid_Scalars, Not_Valid, "Enum_1_Obj");
   Check (Enum_2_Obj'Valid_Scalars, Not_Valid, "Enum_2_Obj");
   Check (Enum_3_Obj'Valid_Scalars, Not_Valid, "Enum_3_Obj");
   Check (Enum_4_Obj'Valid_Scalars, Not_Valid, "Enum_4_Obj");
   Check (Fix_1_Obj'Valid_Scalars,  Not_Valid, "Fix_1_Obj");
   Check (Fix_2_Obj'Valid_Scalars,  Not_Valid, "Fix_2_Obj");
   Check (Fix_3_Obj'Valid_Scalars,  Not_Valid, "Fix_3_Obj");
   Check (Fix_4_Obj'Valid_Scalars,  Not_Valid, "Fix_4_Obj");
   Check (Flt_1_Obj'Valid_Scalars,  Not_Valid, "Flt_1_Obj");
   Check (Flt_2_Obj'Valid_Scalars,  Not_Valid, "Flt_2_Obj");
   Check (Flt_3_Obj'Valid_Scalars,  Not_Valid, "Flt_3_Obj");
   Check (Flt_4_Obj'Valid_Scalars,  Not_Valid, "Flt_4_Obj");
   Check (Modl_1_Obj'Valid_Scalars, Not_Valid, "Modl_1_Obj");
   Check (Modl_2_Obj'Valid_Scalars, Not_Valid, "Modl_2_Obj");
   Check (Prot_1_Obj'Valid_Scalars, Valid,     "Prot_1_Obj");
   Check (Prot_2_Obj'Valid_Scalars, Not_Valid, "Prot_2_Obj");
   Check (Prot_3_Obj'Valid_Scalars, Not_Valid, "Prot_3_Obj");
   Check (Prot_4_Obj'Valid_Scalars, Valid,     "Prot_4_Obj");
   Check (Prot_5_Obj'Valid_Scalars, Not_Valid, "Prot_5_Obj");
   Check (Rec_1_Obj'Valid_Scalars,  Valid,     "Rec_1_Obj");
   Check (Rec_2_Obj'Valid_Scalars,  Valid,     "Rec_2_Obj");
   Check (Rec_3_Obj'Valid_Scalars,  Not_Valid, "Rec_3_Obj");
   Check (Rec_4_Obj'Valid_Scalars,  Not_Valid, "Rec_4_Obj");
   Check (Rec_5_Obj'Valid_Scalars,  Not_Valid, "Rec_5_Obj");
   Check (Rec_6_Obj'Valid_Scalars,  Valid,     "Rec_6_Obj");
   Check (Rec_7_Obj'Valid_Scalars,  Valid,     "Rec_7_Obj");
   Check (Rec_8_Obj'Valid_Scalars,  Not_Valid, "Rec_8_Obj");
   Check (Rec_9_Obj'Valid_Scalars,  Not_Valid, "Rec_9_Obj");
   Check (Sign_1_Obj'Valid_Scalars, Not_Valid, "Sign_1_Obj");
   Check (Sign_2_Obj'Valid_Scalars, Not_Valid, "Sign_2_Obj");
   Check (Tag_1_Obj'Valid_Scalars,  Valid,     "Tag_1_Obj");
   Check (Task_1_Obj'Valid_Scalars, Valid,     "Task_1_Obj");
   Check (Task_2_Obj'Valid_Scalars, Valid,     "Task_2_Obj");
   Check (Task_3_Obj'Valid_Scalars, Valid,     "Task_3_Obj");

   Check (Prec_Arr_1_Obj'Valid_Scalars, Not_Valid, "Prec_Arr_1_Obj");
   Check (Prec_Arr_2_Obj'Valid_Scalars, Not_Valid, "Prec_Arr_2_Obj");
   Check (Prec_Arr_3_Obj'Valid_Scalars, Not_Valid, "Prec_Arr_3_Obj");
   Check (Prec_Arr_4_Obj'Valid_Scalars, Not_Valid, "Prec_Arr_4_Obj");
   Check (Prec_Arr_5_Obj'Valid_Scalars, Not_Valid, "Prec_Arr_5_Obj");

   Check (Prec_Rec_1_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_1_Obj");
   Check (Prec_Rec_2_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_2_Obj");
   Check (Prec_Rec_3_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_3_Obj");
   Check (Prec_Rec_4_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_4_Obj");
   Check (Prec_Rec_5_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_5_Obj");
   Check (Prec_Rec_6_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_6_Obj");
   Check (Prec_Rec_7_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_7_Obj");
   Check (Prec_Rec_8_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_8_Obj");
   Check (Prec_Rec_9_Obj'Valid_Scalars, Not_Valid, "Prec_Rec_9_Obj");
end Main;

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

$ gnatmake -q main.adb
$ ./main

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

gcc/ada/

* exp_attr.adb (Build_Array_VS_Func): Reimplemented.
(Build_Record_VS_Func): Reimplemented.
(Expand_N_Attribute): Reimplement the handling of attribute
'Valid_Scalars.
* sem_attr.adb (Analyze_Attribute): Reimplement the handling of
attribute 'Valid_Scalars.
* sem_util.adb (Scalar_Part_Present): Reimplemented.
(Validated_View): New routine.
* sem_util.ads (Scalar_Part_Present): Update the parameter profile and
comment on usage.
(Validated_View): New routine.
* doc/gnat_rm/implementation_defined_attributes.rst: Update the
documentation of attribute 'Valid_Scalars.
* gnat_rm.texi: Regenerate.

From-SVN: r260518

6 years ago[Ada] Ignore pragma Elaborate_Body in spec of a SAL_Interface package
Bob Duff [Tue, 22 May 2018 13:23:12 +0000 (13:23 +0000)]
[Ada] Ignore pragma Elaborate_Body in spec of a SAL_Interface package

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

gcc/ada/

* binde.adb: (Choose): Ignore a pragma Elaborate_Body that appears in
the spec of a SAL_Interface package.

From-SVN: r260517

6 years ago[Ada] Spurious visibility error on aspect in generic unit
Ed Schonberg [Tue, 22 May 2018 13:22:58 +0000 (13:22 +0000)]
[Ada] Spurious visibility error on aspect in generic unit

This patch fixes a spurious visiblity error on an instantiation of a generic
package that contains a type declaration with an aspect specification for
an aspect that must be delayed (i.e. an aspect whose value may be specified
at a later point).

The package g.ads must compile quietly:

----
with S;
generic
package G
is
   type Buffer_Type is record
      Data       : Integer;
   end record;

   package Buffer is new S (Buffer_Type => Buffer_Type);
end G;
----
generic
   type Buffer_Type is private;
package S
is
   Page_Size : constant := 4096;

   type Reader_Type is limited record
      Data   : Buffer_Type;
   end record
     with
        Alignment => Page_Size; -- Using a constant does not work
--      Alignment => 4096;      -- Using a number works

-- for Reader_Type'Alignment use Page_Size; -- so does an attribute.
   pragma Compile_Time_Error (Reader_Type'Size /= 12345, "Ooops");
   -- Note: We set 'Alignment and check for 'Size.
end S;

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

gcc/ada/

* freeze.adb (Freeze_Entity): When analyzing delayed aspects of an
entity E within a generic unit, indicate that there are no remaining
delayed aspects after invoking Analyze_Aspects_At_Freeze_Point. The
entity E is not frozen yet but the aspects should not be reanalyzed at
the freeze point, which may be outside of the generic and may not have
the proper visibility.

From-SVN: r260516

6 years ago[Ada] Document new switches for gnatpp
Bob Duff [Tue, 22 May 2018 13:22:44 +0000 (13:22 +0000)]
[Ada] Document new switches for gnatpp

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

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for
the new --split-line-before-record, --indent-named-statements and
--no-align-modes gnatpp switches.

From-SVN: r260515

6 years ago[Ada] Crash on pragma Compile_Time_Warning with declared string constant
Ed Schonberg [Tue, 22 May 2018 13:22:06 +0000 (13:22 +0000)]
[Ada] Crash on pragma Compile_Time_Warning with declared string constant

This patch fixes a compiler abort on a pragma Compile_Time_Warning when its
second argument is a reference to a constsant string (rather than a string
literal or an expression that evaluates to a string literal).

Compiling msain.adb must yield:

   main.adb:5:33: warning: Good
   main.adb:6:33: warning: VALLUE
   main.adb:7:33: warning: Test

----
procedure Main is
   Value : constant String := "Test";
   Switch : constant Boolean := True;
begin
   pragma Compile_Time_Warning (Switch, "Good");
   pragma Compile_Time_Warning (Switch, "VAL" & "LUE");
   pragma Compile_Time_Warning (Switch, value);
   null;
end Main;

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

gcc/ada/

* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Handle properly
a second argument that is a constant of a given string value.

From-SVN: r260514

6 years ago[Ada] Align stack to 128bits on VxWorks for AArch64
Doug Rupp [Tue, 22 May 2018 13:21:37 +0000 (13:21 +0000)]
[Ada] Align stack to 128bits on VxWorks for AArch64

Real board requires fat alignment of stack.

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

gcc/ada/

* sigtramp-vxworks-target.inc: Align stack to 128bits on AArch64.

From-SVN: r260513

6 years ago[Ada] Fix stack alignment issue in the signal trampoline on QNX
Jerome Lambourg [Tue, 22 May 2018 13:21:05 +0000 (13:21 +0000)]
[Ada] Fix stack alignment issue in the signal trampoline on QNX

The stack on AArch64 is 128-bit aligned to allow Neon and FPU operations.

2018-05-22  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* sigtramp-qnx.c: Fix stack alignment issue in the signal trampoline.

From-SVN: r260512

6 years ago[Ada] Spurious size error on fixed point type with aspect Small
Ed Schonberg [Tue, 22 May 2018 13:20:26 +0000 (13:20 +0000)]
[Ada] Spurious size error on fixed point type with aspect Small

This path fixes a spurious size error on a fixed point that carries an
aspect specification for the 'Small of the type, when there is a subsequent
derivation of that type before the type is frozen, the given 'Small is not
not a power of two, and the bounds of the type require its full size, also
given by an aspect specification.

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

gcc/ada/

* freeze.adb (Freeze_Fixed_Point_Type): If the first subtype has
delayed aspects, analyze them now, os that the representation of the
type (size, bounds) can be computed and validated.

gcc/testsuite/

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

From-SVN: r260511

6 years ago[Ada] Prevent caching of non-text symbols for symbolic tracebacks
Olivier Hainque [Tue, 22 May 2018 13:20:13 +0000 (13:20 +0000)]
[Ada] Prevent caching of non-text symbols for symbolic tracebacks

We now only have the executable code section boundaries at hand,
so can only infer offsets for symbols within those boundaries.

Symbols outside of this region are non-text symbols, pointless for
traceback symbolization anyway.

2018-05-22  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-dwalin.adb (Enable_Cache): Skip symbols outside of the
executable code section boundaries.

From-SVN: r260510

6 years ago[Ada] Adding support for Ada.Locales package
Javier Miranda [Tue, 22 May 2018 13:19:24 +0000 (13:19 +0000)]
[Ada] Adding support for Ada.Locales package

This patch adds generic support for the Ada.Locales package that
relies on the setlocale() C service.

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

gcc/ada/

* locales.c: New implementation for the Ada.Locales package.
* libgnat/a-locale.ads: Remove comment indicating that this is not
implemented.
* doc/gnat_rm/standard_library_routines.rst: Remove comment indicating
that this is not implemented.
* gnat_rm.texi: Regenerate.

From-SVN: r260509

6 years ago[Ada] Minor reformattings
Hristian Kirtchev [Tue, 22 May 2018 13:18:45 +0000 (13:18 +0000)]
[Ada] Minor reformattings

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

gcc/ada/

* exp_ch5.adb, freeze.adb, pprint.adb, sem_ch4.adb, sem_res.adb: Minor
reformattings.

From-SVN: r260508

6 years ago[Ada] No error on misplaced pragma Pure_Function
Justin Squirek [Tue, 22 May 2018 13:17:58 +0000 (13:17 +0000)]
[Ada] No error on misplaced pragma Pure_Function

This patch fixes an issue whereby placement of the pragma/aspect Pure_Function
was not verified to have been in the same declarative part as the function
declaration incorrectly allowing it to appear after a function body or in a
different region like a private section.

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

gcc/ada/

* sem_ch12.adb (In_Same_Declarative_Part): Moved to sem_util.
(Freeze_Subprogram_Body, Install_Body): Modify calls to
In_Same_Declarative_Part.
* sem_prag.adb (Analyze_Pragma-Pragma_Pure_Function): Add check to
verify pragma declaration is within the same declarative list with
corresponding error message.
* sem_util.adb, sem_util.ads (In_Same_Declarative_Part): Moved from
sem_ch12.adb and generalized to be useful outside the scope of
freezing.

gcc/testsuite/

* gnat.dg/pure_function1.adb, gnat.dg/pure_function1.ads,
gnat.dg/pure_function2.adb, gnat.dg/pure_function2.ads: New testcases.

From-SVN: r260507

6 years ago[Ada] Missing error on illegal categorization dependency
Hristian Kirtchev [Tue, 22 May 2018 13:17:22 +0000 (13:17 +0000)]
[Ada] Missing error on illegal categorization dependency

This patch modifies the analysis of subprogram declarations to ensure that an
aspect which is converted into a categorization pragma is properly taken into
account when verifying the dependencies of a subprogram unit.

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

--  pack.ads

package Pack is end Pack;

--  proc1.ads

with Pack;

procedure Proc1 with Pure;

--  proc2.ads

with Pack;

procedure Proc2;
pragma Pure (Proc2);

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

$ gcc -c proc1.ads
$ gcc -c proc2.ads
proc1.ads:1:06: cannot depend on "Pack" (wrong categorization)
proc1.ads:1:06: pure unit cannot depend on non-pure unit
proc2.ads:1:06: cannot depend on "Pack" (wrong categorization)
proc2.ads:1:06: pure unit cannot depend on non-pure unit

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

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Declaration): Set the proper
categorization of the unit after processing the aspects in case one of
its aspects is converted into a categorization pragma.

From-SVN: r260506

6 years agoHandle a null lhs in expand_direct_optab_fn (PR85862)
Richard Sandiford [Tue, 22 May 2018 12:25:44 +0000 (12:25 +0000)]
Handle a null lhs in expand_direct_optab_fn (PR85862)

This PR showed that the normal function for expanding directly-mapped
internal functions didn't handle the case in which the call was only
being kept for its side-effects.

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

gcc/
PR middle-end/85862
* internal-fn.c (expand_direct_optab_fn): Cope with a null lhs.

gcc/testsuite/
PR middle-end/85862
* gcc.dg/torture/pr85862.c: New test.

From-SVN: r260504

6 years agore PR tree-optimization/85834 (ice in set_ssa_val_to, at tree-ssa-sccvn.c:3396)
Richard Biener [Tue, 22 May 2018 11:25:14 +0000 (11:25 +0000)]
re PR tree-optimization/85834 (ice in set_ssa_val_to, at tree-ssa-sccvn.c:3396)

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

PR tree-optimization/85834
* tree-ssa-sccvn.c (vn_reference_lookup_3): Properly handle
non-constant and non-zero memset arguments.

* g++.dg/torture/pr85834.C: New testcase.
* gcc.dg/tree-ssa/ssa-fre-64.c: Likewise.

From-SVN: r260503

6 years agoDo not ICE for incomplete types in ICF (PR ipa/85607).
Martin Liska [Tue, 22 May 2018 10:50:43 +0000 (12:50 +0200)]
Do not ICE for incomplete types in ICF (PR ipa/85607).

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

PR ipa/85607
* ipa-icf.c (sem_item::add_type): Do not ICE for incomplete types.
2018-05-22  Martin Liska  <mliska@suse.cz>

PR ipa/85607
* g++.dg/ipa/pr85607.C: New test.

From-SVN: r260502

6 years agore PR tree-optimization/85863 (ICE in compiling spec2006 fortran test case solib...
Richard Biener [Tue, 22 May 2018 09:55:49 +0000 (09:55 +0000)]
re PR tree-optimization/85863 (ICE in compiling spec2006 fortran test case solib.fppized.f starting with r260283)

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

PR tree-optimization/85863
* tree-vect-stmts.c (vect_is_simple_cond): Only widen invariant
comparisons when vectype is specified.
(vectorizable_condition): Do not specify vectype for
vect_is_simple_cond when SLP vectorizing.

* gfortran.fortran-torture/compile/pr85863.f: New testcase.

From-SVN: r260501

6 years ago* MAINTAINERS (loop-optimizer): Add myself.
Bin Cheng [Tue, 22 May 2018 08:26:50 +0000 (08:26 +0000)]
* MAINTAINERS (loop-optimizer): Add myself.

From-SVN: r260500

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Tue, 22 May 2018 05:41:45 +0000 (07:41 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

2018-05-22  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85841
* libgfortran.h: Remove the macros GFC_STD_F2008_TS and
GFC_STD_OPT_F08TS.
* error.c (notify_std_msg): Remove GFC_STD_F2008_TS.
* options.c (set_default_std_flags): Ditto.
(gfc_handle_option): Make -std=f2008ts an alias for -std=f2018.
* array.c (gfc_match_array_spec): Replace GFC_STD_F2008_TS by
GFC_STD_F2018.
* check.c (gfc_check_atomic, gfc_check_event_query,
gfc_check_c_f_pointer, gfc_check_c_f_procpointer, gfc_check_c_funloc,
gfc_check_c_loc, gfc_check_num_images, gfc_check_this_image): Ditto.
* decl.c (gfc_verify_c_interop_param, gfc_match_decl_type_spec): Ditto.
* intrinsic.c (add_functions, add_subroutines,
gfc_check_intrinsic_standard): Ditto.
* iso-c-binding.def: Ditto.
* iso-fortran-env.def: Ditto.
* match.c (gfc_match_event_post, gfc_match_event_wait,
gfc_match_fail_image, gfc_match_form_team, gfc_match_change_team,
gfc_match_end_team, gfc_match_sync_team): Ditto.
* gfortran.texi: Remove mention of -std=f2008ts.
Move TSs into F2018 section.
* invoke.texi: Update documentation of -std=f2008ts.

2018-05-22  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85841
* gfortran.dg/assumed_rank_5.f90: Update error message.
* gfortran.dg/assumed_type_4.f90: Ditto.
* gfortran.dg/bind_c_array_params.f03: Ditto.
* gfortran.dg/bind_c_usage_28.f90: Ditto.
* gfortran.dg/c_funloc_tests_5.f03: Ditto.
* gfortran.dg/c_funloc_tests_6.f90: Ditto.
* gfortran.dg/c_loc_tests_11.f03: Ditto.
* gfortran.dg/coarray_atomic_2.f90: Ditto.
* gfortran.dg/coarray_collectives_2.f90: Ditto.
* gfortran.dg/coarray_collectives_10.f90: Ditto.
* gfortran.dg/coarray_collectives_13.f90: Ditto.
* gfortran.dg/rank_3.f90: Ditto.
* gfortran.dg/error_stop_4.f90: Replace -std=f2008ts by -std=f2008.
* gfortran.dg/implicit_14.f90: Ditto.

From-SVN: r260499

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

From-SVN: r260497

6 years ago* es.po: Update.
Joseph Myers [Mon, 21 May 2018 23:40:02 +0000 (00:40 +0100)]
* es.po: Update.

From-SVN: r260492

6 years agosimd-5.c: Fix comment.
Christian Groessler [Mon, 21 May 2018 22:42:35 +0000 (22:42 +0000)]
simd-5.c: Fix comment.

2018-05-21  Christian Groessler  <chris@groessler.org>

* gcc.c-torture/compile/simd-5.c: Fix comment.

From-SVN: r260491

6 years agore PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM...
Michael Meissner [Mon, 21 May 2018 22:25:03 +0000 (22:25 +0000)]
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)

2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128
as a distinct type with IEEE 128-bit floating point is supported.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.

[gcc/testsuite]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.

From-SVN: r260490

6 years agore PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM...
Michael Meissner [Mon, 21 May 2018 22:21:40 +0000 (22:21 +0000)]
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format)

[gcc]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Always create
__ibm128 as a distinct type.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.

[gcc/testsuite]
2018-05-21  Michael Meissner  <meissner@linux.ibm.com>

PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.

From-SVN: r260489

6 years agoFix tree-ssa-strlen handling of partial clobbers (PR85814)
Richard Sandiford [Mon, 21 May 2018 22:02:35 +0000 (22:02 +0000)]
Fix tree-ssa-strlen handling of partial clobbers (PR85814)

In this PR we have:

  c_5 = c_4(D) + 4;
  c_12 = c_5 + 1;
  *c_5 = 2;
  a = 2; // A
  c_21 = c_12 + 1;
  *c_12 = 2;
  a = 2; // B
  c_28 = c_21 + 1;
  *c_21 = 2;
  a = 2;
  c_7 = c_28 + 1;
  *c_28 = 2;

where a is a global int.  We decide that A can't clobber *c_5 == c_4[4]
because the latter implies that c_4 is an object of 5 bytes or more,
whereas a has exactly 4 bytes.

The assumption for B and *c_5 is the same, but when considering B and
*c_12, we only follow the definition of c_12 to c_5 + 1 (for good
reason) and so have *c_12 == c_5[1].  We then don't have the same
size guarantee and so assume that B could clobber *c_12.  This leads
to a situation in which the strinfo for c_5 is still valid but the
next strinfo (c_12) isn't.  We then segfaulted while trying to get
the strinfo for c_21 + 1 == c_5 + 3 because get_stridx_plus_constant
assumed that c_5's next strinfo (c_12) would be valid too.

And of course it should be valid really.  It doesn't make sense for the
string based at c_5 to be valid but a substring of it to be invalid.
I don't think we can guarantee that such weird corner cases never
happen though, even if we tried to avoid this one.

One possibility would be to mark c_12 as valid on the basis that c_5
is valid, but I'm not sure the complication is worth it given that it
seems to trigger very rarely.  A better optimisation would be to get
the unroller to clean up after itself a bit more...

Although this particular instance of the bug relies on r249880, I think
we could have similar problems in GCC 7.  It would be much harder to
trigger though, especially since it relies on unfolded IR like the above.

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

gcc/
PR tree-optimization/85814
* tree-ssa-strlen.c (get_stridx_plus_constant): Cope with
a null return from get_strinfo when unsharing the next
strinfo in the chain.

gcc/testsuite/
PR tree-optimization/85814
* gcc.dg/torture/pr85814.c: New test.

From-SVN: r260488

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Mon, 21 May 2018 20:48:59 +0000 (22:48 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

2018-05-21  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85841
PR testsuite/85865
* testsuite/libgomp.fortran/collapse2.f90: Add option "-std=legacy".
* testsuite/libgomp.fortran/omp_atomic2.f90: Ditto.
* testsuite/libgomp.fortran/omp_parse1.f90: Ditto.
* testsuite/libgomp.fortran/omp_parse3.f90: Ditto.
* testsuite/libgomp.fortran/task2.f90: Ditto.
* testsuite/libgomp.fortran/vla1.f90: Ditto.
* testsuite/libgomp.fortran/vla2.f90: Ditto.
* testsuite/libgomp.fortran/vla3.f90: Ditto.
* testsuite/libgomp.fortran/vla4.f90: Ditto.
* testsuite/libgomp.fortran/vla5.f90: Ditto.
* testsuite/libgomp.fortran/vla6.f90: Ditto.
* testsuite/libgomp.fortran/vla8.f90: Ditto.
* testsuite/libgomp.oacc-fortran/collapse-2.f90: Ditto.
* testsuite/libgomp.oacc-fortran/nested-function-1.f90: Ditto.

From-SVN: r260487

6 years agoparser.c (cp_parser_parameter_declaration_list): Remove bool* parameter.
Paolo Carlini [Mon, 21 May 2018 20:44:33 +0000 (20:44 +0000)]
parser.c (cp_parser_parameter_declaration_list): Remove bool* parameter.

2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

* parser.c (cp_parser_parameter_declaration_list): Remove
bool* parameter.
(cp_parser_parameter_declaration_clause): Adjust.
(cp_parser_cache_defarg): Likewise.

From-SVN: r260486

6 years agore PR target/84923 (gcc.dg/attr-weakref-1.c failed on aarch64)
Vladimir Mezentsev [Mon, 21 May 2018 20:30:00 +0000 (20:30 +0000)]
re PR target/84923 (gcc.dg/attr-weakref-1.c failed on aarch64)

        PR gcc/84923
        * varasm.c (weak_finish): Clean up weak_decls.

From-SVN: r260485

6 years agore PR c++/84588 (internal compiler error: Segmentation fault (contains_struct_check()))
Paolo Carlini [Mon, 21 May 2018 19:25:50 +0000 (19:25 +0000)]
re PR c++/84588 (internal compiler error: Segmentation fault (contains_struct_check()))

/cp
2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84588
* parser.c (cp_parser_maybe_commit_to_declaration,
cp_parser_check_condition_declarator): New.
(cp_parser_simple_declaration): Use the first above.
(cp_parser_condition): Use both the above; enforce
[stmt.stmt]/2 about the declarator not specifying
a function or an array; improve error-recovery.

/testsuite
2018-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/84588
* g++.dg/cpp0x/cond1.C: New.
* g++.dg/cpp1y/pr84588-1.C: Likewise.
* g++.dg/cpp1y/pr84588-2.C: Likewise.
* g++.dg/cpp1y/pr84588-3.C: Likewise.
* g++.dg/parse/cond6.C: Likewise.
* g++.dg/parse/cond7.C: Likewise.
* g++.dg/parse/cond8.C: Likewise.
* g++.dg/cpp1z/decomp16.C: Update.
* g++.old-deja/g++.jason/cond.C: Likewise.

From-SVN: r260482

6 years agoChangeLog for r260480
Steven G. Kargl [Mon, 21 May 2018 19:22:46 +0000 (19:22 +0000)]
ChangeLog for r260480

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

ChangeLog for r260480
        * gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
        warnings for deleted and obsolescent features.
        * gfortran.dg/graphite/id-19.f: Ditto.
        * gfortran.dg/graphite/id-20.f: Ditto.
        * gfortran.dg/graphite/id-27.f90: Ditto.
        * gfortran.dg/graphite/pr82449.f: Ditto.

From-SVN: r260481

6 years agoblock-2.f: Adjust testcase for new gfortran warnings for deleted and obsolescent...
Steven G. Kargl [Mon, 21 May 2018 19:19:25 +0000 (19:19 +0000)]
block-2.f: Adjust testcase for new gfortran warnings for deleted and obsolescent features.

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

* gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
    warnings for deleted and obsolescent features.
* gfortran.dg/graphite/id-19.f: Ditto.
* gfortran.dg/graphite/id-20.f: Ditto.
* gfortran.dg/graphite/id-27.f90: Ditto.
* gfortran.dg/graphite/pr82449.f: Ditto.

From-SVN: r260480

6 years agoAdd support for opening file streams from wide character strings
Jonathan Wakely [Mon, 21 May 2018 17:18:35 +0000 (18:18 +0100)]
Add support for opening file streams from wide character strings

C++17 added new overloads to <fstream> class templates to support
opening files from wide character strings "on systems where
filesystem::path::value_type is not char". This patch adds those
overloads conditional on _wfopen being available, and enables them for
pre-C++17 modes as well.

Add support for opening file streams from wide character strings.
* config/io/basic_file_stdio.cc [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* config/io/basic_file_stdio.h [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
* configure.ac: Check for _wfopen.
* crossconfig.m4: Likewise.
* configure: Regenerate.
* config.h.in: Regenerate.
* include/bits/fstream.tcc [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* include/std/fstream [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
[_GLIBCXX_HAVE__WFOPEN]
(basic_ifstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ifstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_open(const wchar_t*, openmode)): Define
new overloads.
* testsuite/27_io/basic_filebuf/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/open/wchar_t/1.cc: New.

From-SVN: r260479

6 years agore PR libstdc++/85845 (Many libstdc++ test failures)
François Dumont [Mon, 21 May 2018 16:51:47 +0000 (16:51 +0000)]
re PR libstdc++/85845 (Many libstdc++ test failures)

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

PR libstdc++/85845
* include/bits/stl_tree.h
(_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): Fix noexcept
qualification.

From-SVN: r260478

6 years ago[AArch64][committed] Fix gcc.target/aarch64/vec_init_1.c for tiny and large mcmodels
Kyrylo Tkachov [Mon, 21 May 2018 15:58:32 +0000 (15:58 +0000)]
[AArch64][committed] Fix gcc.target/aarch64/vec_init_1.c for tiny and large mcmodels

This recently-committed test fails the INS scan for tiny and large memory models.
That is because instead of the:
make_vector:
         adrp    x1, a
         adrp    x0, b
         movi    v0.4s, 0
         ldr     s2, [x1, #:lo12:a]
         ldr     s1, [x0, #:lo12:b]
         ins     v0.s[2], v2.s[0]
         ins     v0.s[3], v1.s[0]
         ret

That we generate for the default small model, we end up with a simple register
addressing mode with no addend/offset for the lane load:
make_vector:
         movi    v0.4s, 0
         adr     x1, a
         adr     x0, b
         ld1     {v0.s}[2], [x1]
         ld1     {v0.s}[3], [x0]
         ret

and

make_vector:
         movi    v0.4s, 0
         adrp    x0, .LC0
         ldr     x1, [x0, #:lo12:.LC0]
         adrp    x0, .LC1
         ldr     x0, [x0, #:lo12:.LC1]
         ld1     {v0.s}[2], [x1]
         ld1     {v0.s}[3], [x0]
         ret

So we end up merging the load and the lane insert.
This patch adjusts the testcase to scan for the right thing accordingly.
Checked that the testcase passes with -mcmodel=tiny, -mcmodel=small, -mcmodel=large.

* gcc.target/aarch64/vec_init_1.c: Scan for LD1 instead of INS for
tiny and large memory models.

From-SVN: r260474

6 years agoFix bogous dates in gcc/ada/ChangeLog
Pierre-Marie de Rodat [Mon, 21 May 2018 14:57:38 +0000 (14:57 +0000)]
Fix bogous dates in gcc/ada/ChangeLog

From-SVN: r260472

6 years ago[Ada] Spurious warning on object declaration with address clause
Ed Schonberg [Mon, 21 May 2018 14:52:36 +0000 (14:52 +0000)]
[Ada] Spurious warning on object declaration with address clause

The compiler warns on an object declaration with default initialization
and an address clause, to indicate that the overlay implied by the address
clause might affect a value elsewhere. The warning is suppressed if the type
carries the Suppress_Initialization aspect. With this patch the compiler
also inhibits the warning if the aspect is specified for the object itself.

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

gcc/ada/

* freeze.adb (Warn_Overlay): Do not emit a wawrning on an object
declaration with an explicit address clause and a type with default
initialization, if the declaration carries an aspect
Suppress_Initialization.

gcc/testsuite/

* gnat.dg/suppress_initialization.adb,
gnat.dg/suppress_initialization_pkg.ads: New testcase.

From-SVN: r260471

6 years ago[Ada] Pretty-print attribute names using mixed case
Daniel Mercier [Mon, 21 May 2018 14:52:31 +0000 (14:52 +0000)]
[Ada] Pretty-print attribute names using mixed case

2018-05-21  Daniel Mercier  <mercier@adacore.com>

gcc/ada/

* pprint.adb: Use mixed case for attribute names.

From-SVN: r260470

6 years ago[Ada] Aspects on stubs
Hristian Kirtchev [Mon, 21 May 2018 14:52:24 +0000 (14:52 +0000)]
[Ada] Aspects on stubs

This patch ensures that aspect specifications which appear on package,
protected, and task body stubs are properly analyzed.

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

--  pack.ads

package Pack
  with SPARK_Mode,
       Abstract_State => State
is
   -------------------------------------
   -- Refined_Depends, Refined_Global --
   -------------------------------------

   procedure Proc_1;
   procedure Proc_2
     with Global  => (In_Out => State),
          Depends => (State  => State);

   task Task_Obj_1;
   task Task_Obj_2
     with Global  => (In_Out => State),
          Depends => (State  => State);

   ------------------
   -- Refined_Post --
   ------------------

   function Func_1 (Formal : Integer) return Integer;
   function Func_2 (Formal : Integer) return Integer
     with Post => Func_2'Result > Formal;

   -------------------
   -- Refined_State --
   -------------------

   package Pack_1 is end Pack_1;
   package Pack_2 with Abstract_State => State_2 is end Pack_2;

   ----------------
   -- SPARK_Mode --
   ----------------

   package Pack_3 with SPARK_Mode => Off is end Pack_3;
   package Pack_4 with SPARK_Mode => Off is end Pack_4;
   package Pack_5 is end Pack_5;

   protected type Prot_Typ_1 with SPARK_Mode => Off is end Prot_Typ_1;
   protected type Prot_Typ_2 with SPARK_Mode => Off is end Prot_Typ_2;
   protected type Prot_Typ_3 is end Prot_Typ_3;

   procedure Proc_3 with SPARK_Mode => Off;
   procedure Proc_4 with SPARK_Mode => Off;
   procedure Proc_5;

   task type Task_Typ_1 with SPARK_Mode => Off;
   task type Task_Typ_2 with SPARK_Mode => Off;
   task type Task_Typ_3;
end Pack;

--  pack.adb

package body Pack
  with SPARK_Mode,
       Refined_State => (State => Constit)
is
   Constit : Integer := 0;

   -------------------------------------
   -- Refined_Depends, Refined_Global --
   -------------------------------------

   procedure Proc_1 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  Error
          Refined_Depends => (Constit => Constit);                   --  Error

   procedure Proc_2 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  OK
          Refined_Depends => (Constit => Constit);                   --  OK

   task body Task_Obj_1 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  Error
          Refined_Depends => (Constit => Constit);                   --  Error

   task body Task_Obj_2 is separate
     with Refined_Global  => (In_Out  => Constit),                   --  OK
          Refined_Depends => (Constit => Constit);                   --  OK

   ------------------
   -- Refined_Post --
   ------------------

   function Func_1 (Formal : Integer) return Integer is separate
     with Refined_Post => Func_1'Result > Formal;                    --  OK

   function Func_2 (Formal : Integer) return Integer is separate
     with Refined_Post => Func_2'Result > Formal;                    --  OK

   -------------------
   -- Refined_State --
   -------------------

   package body Pack_1 is separate
     with Refined_State => (State_1 => Constit_1);                   --  Error

   package body Pack_2 is separate
     with Refined_State => (State_2 => Constit_2);                   --  Error

   ----------------
   -- SPARK_Mode --
   ----------------

   package body Pack_3 is separate with SPARK_Mode => On;            --  Error
   package body Pack_4 is separate;
   package body Pack_5 is separate with SPARK_Mode => Off;           --  Error

   protected body Prot_Typ_1 is separate with SPARK_Mode => On;      --  Error
   protected body Prot_Typ_2 is separate;
   protected body Prot_Typ_3 is separate with SPARK_Mode => Off;     --  Error

   procedure Proc_3 is separate with SPARK_Mode => On;               --  Error
   procedure Proc_4 is separate;
   procedure Proc_5 is separate with SPARK_Mode => Off;              --  Error

   task body Task_Typ_1 is separate with SPARK_Mode => On;           --  Error
   task body Task_Typ_2 is separate;
   task body Task_Typ_3 is separate with SPARK_Mode => Off;          --  Error
end Pack;

--  pack-func_1.adb

separate (Pack)

function Func_1 (Formal : Integer) return Integer
  with Refined_Post => Func_1'Result > Formal                        --  Error
is
begin
   return Formal * 10;
end Func_1;

--  pack-func_2.adb

separate (Pack)

function Func_2 (Formal : Integer) return Integer
  with Refined_Post => Func_2'Result > Formal                        --  Error
is
begin
   return Formal * 10;
end Func_2;

--  pack-pack_1.adb

separate (Pack)

package body Pack_1
  with SPARK_Mode,
       Refined_State => (State_1 => Constit_1)                       --  Error
is
   Constit_1 : Integer := 1;
end Pack_1;

--  pack-pack_2.adb

separate (Pack)

package body Pack_2
  with SPARK_Mode,
       Refined_State => (State_2 => Constit_2)                       --  OK
is
   Constit_2 : Integer := 2;
end Pack_2;

--  pack-pack_3.adb

separate (Pack)

package body Pack_3 is end Pack_3;

--  pack-pack_4.adb

separate (Pack)

package body Pack_4 with SPARK_Mode => On is end Pack_4;             --  OK

--  pack-pack_5.adb

separate (Pack)

package body Pack_5 with SPARK_Mode => On is end Pack_5;             --  OK

--  pack-proc_1.adb

separate (Pack)

procedure Proc_1
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Proc_1;

--  pack-proc_2.adb

separate (Pack)

procedure Proc_2
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Proc_2;

--  pack-proc_3.adb

separate (Pack)

procedure Proc_3 is begin null; end Proc_3;

--  pack-proc_4.adb

separate (Pack)

procedure Proc_4 with SPARK_Mode => On is begin null; end Proc_4;    --  OK

--  pack-proc_5.adb

separate (Pack)

procedure Proc_5 with SPARK_Mode => On is begin null; end Proc_5;    --  OK

--  pack-prot_typ_1.adb

separate (Pack)

protected body Prot_Typ_1 is end Prot_Typ_1;

--  pack-prot_typ_2.adb

separate (Pack)

protected body Prot_Typ_2 with SPARK_Mode => On is end Prot_Typ_2;   --  OK

--  pack-prot_typ_3.adb

separate (Pack)

protected body Prot_Typ_3 with SPARK_Mode => On is end Prot_Typ_3;   --  OK

--  pack-task_obj_1.adb

separate (Pack)

task body Task_Obj_1
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Task_Obj_1;

--  pack-task_obj_2.adb

separate (Pack)

task body Task_Obj_2
  with Refined_Global  => (In_Out  => Constit),                      --  Error
       Refined_Depends => (Constit => Constit)                       --  Error
is begin null; end Task_Obj_2;

--  pack-task_typ_1.adb

separate (Pack)

task body Task_Typ_1 is begin null; end Task_Typ_1;

--  pack-task_typ_2.adb

separate (Pack)

task body Task_Typ_2 with SPARK_Mode => On is                        --  OK
begin null; end Task_Typ_2;

--  pack-task_typ_3.adb

separate (Pack)

task body Task_Typ_3 with SPARK_Mode => On is                        --  OK
begin null; end Task_Typ_3;

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

$ gcc -c pack.adb
pack.adb:12:11: useless refinement, declaration of subprogram "Proc_1" lacks
  aspect or pragma Global
pack.adb:13:11: useless refinement, declaration of subprogram "Proc_1" lacks
  aspect or pragma Depends
pack.adb:20:11: useless refinement, declaration of task type "Task_Obj_1" lacks
  aspect or pragma Global
pack.adb:21:11: useless refinement, declaration of task type "Task_Obj_1" lacks
  aspect or pragma Depends
pack.adb:42:11: aspect "Refined_State" must apply to a package body
pack.adb:45:11: aspect "Refined_State" must apply to a package body
pack.adb:51:41: incorrect placement of aspect "Spark_Mode"
pack.adb:53:41: incorrect placement of aspect "Spark_Mode"
pack.adb:55:47: incorrect placement of aspect "Spark_Mode"
pack.adb:57:47: incorrect placement of aspect "Spark_Mode"
pack.adb:59:38: incorrect placement of aspect "Spark_Mode"
pack.adb:61:38: incorrect placement of aspect "Spark_Mode"
pack.adb:63:42: incorrect placement of aspect "Spark_Mode"
pack.adb:65:42: incorrect placement of aspect "Spark_Mode"
pack-proc_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-proc_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-func_1.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-func_2.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-pack_1.adb:3:14: body of package "Pack_1" has unused hidden states
pack-pack_1.adb:3:14: variable "Constit_1" defined at line 7
pack-pack_1.adb:5:08: useless refinement, package "Pack_1" does not define
  abstract states
pack-pack_1.adb:5:26: "State_1" is undefined
pack-pack_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_3.adb:3:01: value Off was set for SPARK_Mode on "Pack_3" at
  pack.ads:38
pack-pack_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_4.adb:3:01: value Off was set for SPARK_Mode on "Pack_4" at
  pack.ads:39
pack-pack_4.adb:3:26: incorrect use of SPARK_Mode
pack-pack_4.adb:3:26: value Off was set for SPARK_Mode on "Pack_4" at
  pack.ads:39
pack-prot_typ_2.adb:3:32: incorrect use of SPARK_Mode
pack-prot_typ_2.adb:3:32: value Off was set for SPARK_Mode on "Prot_Typ_2" at
  pack.ads:43
pack-proc_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_3.adb:3:01: value Off was set for SPARK_Mode on "Proc_3" at
  pack.ads:46
pack-proc_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_4.adb:3:01: value Off was set for SPARK_Mode on "Proc_4" at
  pack.ads:47
pack-proc_4.adb:3:23: incorrect use of SPARK_Mode
pack-proc_4.adb:3:23: value Off was set for SPARK_Mode on "Proc_4" at
  pack.ads:47
pack-task_typ_2.adb:3:27: incorrect use of SPARK_Mode
pack-task_typ_2.adb:3:27: value Off was set for SPARK_Mode on "Task_Typ_2" at
  pack.ads:51

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

gcc/ada/

* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
(Analyze_Subprogram_Body_Helper): Rename the calls to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch9.adb (Analyze_Entry_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch10.adb: Add with and use clause for Sem_Ch13.
(Analyze_Package_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
(Analyze_Protected_Body_Stub): Add constant Id. Decorate the package
stub prior to analyzing its aspects. Save and restore the configuration
switches.
(Analyze_Task_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
* sem_ch13.adb (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_ch13.ads (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_prag.adb: Code reformatting.
(Analyze_Refined_Depends_Global_Post): Consider task body stubs.

From-SVN: r260469

6 years ago[Ada] Add g-soliop__qnx.ads to the runtime build
Jerome Lambourg [Mon, 21 May 2018 14:52:19 +0000 (14:52 +0000)]
[Ada] Add g-soliop__qnx.ads to the runtime build

This properly links with libsocket when needed by the user code.

2018-05-21  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* gcc-interface/Makefile.in: Add g-soliop__qnx.ads to the runtime build
for QNX.

From-SVN: r260468

6 years ago[Ada] Spurious error on early call region of tagged type
Hristian Kirtchev [Mon, 21 May 2018 14:52:11 +0000 (14:52 +0000)]
[Ada] Spurious error on early call region of tagged type

This patch corrects the part of the access-before-elaboration mechanism which
ensures that the freeze node of a tagged type is within the early call region
of all its overriding bodies to ignore predefined primitives.

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

--  pack.ads

package Pack with SPARK_Mode is
   type Parent_Typ is tagged null record;
   procedure Prim (Obj : Parent_Typ);

   type Deriv_Typ is new Parent_Typ with private;
   overriding procedure Prim (Obj : Deriv_Typ);

private
   type Deriv_Typ is new Parent_Typ with null record;
end Pack;

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

$ gcc -c pack.ads

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

gcc/ada/

* exp_cg.adb: Remove with and use clause for Exp_Disp.
* exp_ch9.adb: Remove with and use clause for Exp_Disp.
* exp_disp.adb (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_disp.ads (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_dist.adb: Remove with and use clause for Exp_Disp.
* freeze.adb: Remove with and use clause for Exp_Disp.
* sem_cat.adb: Remove with and use clause for Exp_Disp.
* sem_ch6.adb: Remove with and use clause for Exp_Disp.
* sem_ch12.adb: Remove with and use clause for Exp_Disp.
* sem_elab.adb (Check_Overriding_Primitive): Do not process predefined
primitives.
* sem_util.adb: Remove with and use clause for Exp_Disp.
(Is_Predefined_Dispatching_Operation): Moved from Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
* sem_util.ads (Is_Predefined_Dispatching_Operation): Moved from
Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.

From-SVN: r260467

6 years ago[Ada] Error message on invalid conversion involving limited views
Ed Schonberg [Mon, 21 May 2018 14:52:05 +0000 (14:52 +0000)]
[Ada] Error message on invalid conversion involving limited views

A type conversion may be illegal if the expression in the conversion has a
limited view of a type. This patch expands the error report to indicate the
presence of a limited view, and when the context is a package body it suggests
the addition of a regular with-clause to make the full view available.

Compiling client.adb must yield:

   client.adb:6:16: invalid conversion, not compatible with limited view
      of type "Map_Type" defined at maps.ads:2
   client.adb:6:16: add with_clause for "Maps" to current unit

----
package Maps is
  type Map_Type is null record;
end;
----
limited with Maps;
package Payloads is
  function Get_Map return access Maps.Map_Type;
end;
----
with Maps;
package Maps2 is
  type New_Map_Type is new Maps.Map_Type;
end;
----
with Maps2;
package Client is
  procedure Foo (Map : Maps2.New_Map_Type) is null;
  procedure Bar;
end;
----
with Payloads;
package body Client is
  procedure Bar is
  begin
     Foo (Maps2.New_Map_Type (Payloads.Get_Map.all));
  end;
end;

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

gcc/ada/

* sem_res.adb (Valid_Conversion): Improve error message on an illegal
type conversion whose expression has a limited view of a type.

From-SVN: r260466

6 years ago[Ada] Exit statement in loops over iterable objects
Ed Schonberg [Mon, 21 May 2018 14:52:00 +0000 (14:52 +0000)]
[Ada] Exit statement in loops over iterable objects

This patch fixes an omission in the expansion of loops over GNAT-specific
iterable objects. If the source includes an explicit name for the loop,
that name has to be preserved in the expanded code to allow exit statements
to mention it.

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

gcc/ada/

* exp_ch5.adb (Build_Formal_Container_Iteration): If source has
explicit name for iterator loop, preserve that name in expanded
construct, for possible use in exit statements.

gcc/testsuite/

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

From-SVN: r260465

6 years ago[Ada] Avoid compiler crash for body in non Ada 2012 mode
Javier Miranda [Mon, 21 May 2018 14:51:55 +0000 (14:51 +0000)]
[Ada] Avoid compiler crash for body in non Ada 2012 mode

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

gcc/ada/

* sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the
spec of a unit has Ada 2012 membership tests with multiple choices and
the unit body is not compiled under Ada 2012 mode.

From-SVN: r260464

6 years ago[Ada] Enhance stack unwinding on VxWorks for AArch64
Doug Rupp [Mon, 21 May 2018 14:51:48 +0000 (14:51 +0000)]
[Ada] Enhance stack unwinding on VxWorks for AArch64

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

gcc/ada/

* sigtramp-vxworks-target.inc: Set cfa_reg properly from sigcontext
pregs.
(CFI_COMMON_REGS): Restore LR jic probed from prologue.
(REGNO_PC_OFFSET): Change to correct value for Aarch64.

From-SVN: r260463

6 years ago[Ada] Minor typo fixes
Jose Ruiz [Mon, 21 May 2018 14:51:42 +0000 (14:51 +0000)]
[Ada] Minor typo fixes

2018-05-21  Jose Ruiz  <ruiz@adacore.com>

gcc/ada/

* doc/gnat_ugn/gnat_utility_programs.rst, exp_attr.adb,
libgnarl/s-tassta.adb: Minor typo fixes

From-SVN: r260462

6 years ago[Ada] Spurious error on indexed call as prefix of a call
Ed Schonberg [Mon, 21 May 2018 14:51:35 +0000 (14:51 +0000)]
[Ada] Spurious error on indexed call as prefix of a call

This patch refines the handling of the well-known syntactic ambiguity created
by a function with defaulted parameters that returns an array, so that F (X)
may designate a call to the function, or an indexing of a parameterless call.
This patch handles the case where such a call is itself the prefix of another
call, and the function is a primitive operation invoked in prefix form.

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

gcc/ada/

* sem_ch4.adb (Analyze_One_Call): Recognize complex cases where an
indexed call originally in prefix forn is itself the prefix of a
further call.

gcc/testsuite/

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

From-SVN: r260461

6 years ago[Ada] Clarify code for accessing full view of a type
Piotr Trojanek [Mon, 21 May 2018 14:51:30 +0000 (14:51 +0000)]
[Ada] Clarify code for accessing full view of a type

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

gcc/ada/

* sem_eval.adb (Is_Null_Range): Clarify access to the full view of a
type.
(Not_Null_Range): Same as above.

From-SVN: r260460

6 years ago[Ada] Minor reformatting
Hristian Kirtchev [Mon, 21 May 2018 14:51:25 +0000 (14:51 +0000)]
[Ada] Minor reformatting

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

gcc/ada/

* exp_ch3.adb: Minor reformatting.
* exp_ch6.adb: Likewise.
* freeze.adb: Likewise.
* inline.adb: Likewise.
* sem_util.adb: Likewise.

From-SVN: r260459

6 years ago[Ada] Use type conversion when inlining may trigger a run-time check
Yannick Moy [Mon, 21 May 2018 14:51:19 +0000 (14:51 +0000)]
[Ada] Use type conversion when inlining may trigger a run-time check

In the frontend inlining used in GNATprove, inlining of a return statement
was using an unchecked type conversion, which could cause a necessary
run-time check on the conversion to be skipped. Now fixed.

There is no impact on compilation.

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

gcc/ada/

* inline.adb (Expand_Inlined_Call.Process_Formals): Use a type
conversion instead of an unchecked type conversion when inlining a
return statement, unless type qualification is required (for character
and string literal) or no check can result from the conversion (for
access types).
* opt.ads: Update comment.

From-SVN: r260458

6 years ago[Ada] Placement of pragma Elaboration_Checks
Hristian Kirtchev [Mon, 21 May 2018 14:51:15 +0000 (14:51 +0000)]
[Ada] Placement of pragma Elaboration_Checks

This patch modifies the semantics of pragma Elaboration_Checks. The pragma
was intended to be a configuration pragma, however its placement was never
verified until now.

The pragma may appear in the following contexts:

   * Configuration pragmas file

   * Prior to the context clauses of a compilation unit's initial declaration

Any other placement of the pragma will result in a warning and the effects of
the offending pragma will be ignored.

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

--  elab_checks_1.adc

pragma Elaboration_Checks (Dynamic);

--  elab_checks_2.adc

pragma Elaboration_Checks (Dynamic);
pragma Elaboration_Checks (Static);                                  --  Error

--  pack_1.ads

pragma Elaboration_Checks (Static);                                  --  OK

package Pack_1 is
end Pack_1;

--  pack_2.ads

pragma Elaboration_Checks (Static);                                  --  OK
pragma Elaboration_Checks (Static);                                  --  Error

package Pack_2 is
end Pack_2;

--  pack_3.ads

package Pack_3 is
   procedure Proc;
end Pack_3;

--  pack_3.adb

pragma Elaboration_Checks (Static);                                  --  Error

package body Pack_3 is
   procedure Proc is begin null; end Proc;
end Pack_3;

--  pack_4.ads

package Pack_4 is
   procedure Proc;
end Pack_4;

--  pack_4.adb

package body Pack_4 is
   procedure Proc is separate;
end Pack_4;

--  pack_4-proc.adb

pragma Elaboration_Checks (Static);                                  --  Error

separate (Pack_4)
procedure Proc is begin null; end Proc;

--  gen.ads

generic
   with function Called_At_Elaboration return Boolean;

package Gen is
   procedure Proc;
end Gen;

--  gen.adb

package body Gen is
   procedure Proc is
      Obj : constant Boolean := Called_At_Elaboration;
   begin null; end Proc;
begin
   Proc;
end Gen;

--  abe_static.ads

pragma Elaboration_Checks (Static);

with Gen;

package ABE_Static is
   function ABE return Boolean;

   package Inst_1 is new Gen (ABE);
end ABE_Static;

--  abe_static.adb

package body ABE_Static is
   package Inst_2 is new Gen (ABE);

   package Subunit is
   end Subunit;

   package body Subunit is separate;

   function ABE return Boolean is
   begin
      return True;
   end ABE;
end ABE_Static;

--  abe_static-subunit.adb

separate (ABE_Static)

package body Subunit is
   package Inst_3 is new Gen (ABE);

   package Nested_Subunit is
   end Nested_Subunit;

   package body Nested_Subunit is separate;
end Subunit;

--  abe_static-subunit-nested_subunit.adb

separate (ABE_Static.Subunit)

package body Nested_Subunit is
   package Inst_4 is new Gen (ABE);
end Nested_Subunit;

--  abe_static_main.adb

with ABE_Static;

procedure ABE_Static_Main is begin null; end ABE_Static_Main;

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

$ gcc -c pack_1.ads -gnatec=elab_checks_1.adc
$ gcc -c pack_1.ads -gnatec=elab_checks_2.adc
$ gcc -c pack_1.ads
$ gcc -c pack_2.ads
$ gcc -c pack_3.adb
$ gcc -c pack_4.adb
$ gnatmake -q -gnatE abe_static_main.adb
elab_checks_2.adc:2:01: pragma "Elaboration_Checks" duplicates pragma declared
  at line 1
pack_2.ads:2:01: pragma "Elaboration_Checks" duplicates pragma declared at line
  1
pack_3.adb:1:01: warning: effects of pragma "Elaboration_Checks" are ignored
pack_3.adb:1:01: warning: place pragma on initial declaration of library unit
pack_4-proc.adb:1:01: warning: effects of pragma "Elaboration_Checks" are
  ignored
pack_4-proc.adb:1:01: warning: place pragma on initial declaration of library
  unit
abe_static.adb:2:04: warning: in instantiation at gen.adb:3
abe_static.adb:2:04: warning: cannot call "ABE" before body seen
abe_static.adb:2:04: warning: Program_Error may be raised at run time
abe_static.adb:2:04: warning:   body of unit "ABE_Static" elaborated
abe_static.adb:2:04: warning:   procedure "Proc" called at gen.adb:6, instance
  at line 2
abe_static.adb:2:04: warning:   function "ABE" called at gen.adb:3, instance at
  line 2
abe_static.ads:8:04: warning: in instantiation at gen.adb:3
abe_static.ads:8:04: warning: cannot call "ABE" before body seen
abe_static.ads:8:04: warning: Program_Error may be raised at run time
abe_static.ads:8:04: warning:   spec of unit "ABE_Static" elaborated
abe_static.ads:8:04: warning:   procedure "Proc" called at gen.adb:6, instance
  at line 8
abe_static.ads:8:04: warning:   function "ABE" called at gen.adb:3, instance at
  line 8
abe_static-subunit.adb:4:04: warning: in instantiation at gen.adb:3
abe_static-subunit.adb:4:04: warning: cannot call "ABE" before body seen
abe_static-subunit.adb:4:04: warning: Program_Error may be raised at run time
abe_static-subunit.adb:4:04: warning:   body of unit "ABE_Static" elaborated
abe_static-subunit.adb:4:04: warning:   procedure "Proc" called at gen.adb:6,
  instance at line 4
abe_static-subunit.adb:4:04: warning:   function "ABE" called at gen.adb:3,
  instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning: in instantiation at
  gen.adb:3
abe_static-subunit-nested_subunit.adb:4:04: warning: cannot call "ABE" before
  body seen
abe_static-subunit-nested_subunit.adb:4:04: warning: Program_Error may be
  raised at run time
abe_static-subunit-nested_subunit.adb:4:04: warning:   body of unit
  "ABE_Static" elaborated
abe_static-subunit-nested_subunit.adb:4:04: warning:   procedure "Proc" called
  at gen.adb:6, instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning:   function "ABE" called at
  gen.adb:3, instance at line 4
warning: "abe_static_main.adb" has dynamic elaboration checks and with's
warning:   "abe_static.ads" which has static elaboration checks

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

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch7.adb (Analyze_Package_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch10.adb (Analyze_Subunit): Install the elaboration model of the
parent compilation unit spec, if any.
* sem_elab.adb (Check_Elaboration_Scenarios): Restore the elaboration
model of the main unit.
(Is_Same_Unit): The routine now uses Unit_Entity.
(Is_Subunit): Removed.
(Normalize_Unit): Removed.
(Unit_Entity): New routine.
* sem_prag.adb (Analyze_Pragma): Reimplement the handling of pragma
Elaboration_Checks. The analysis now ensures that the pragma appears at
the configuration level, and on the initial declaration of a unit.
Other placements are either flagged as illegal, or ignored.
(Check_Duplicate_Elaboration_Checks_Pragma): New routine.
(Ignore_Elaboration_Checks_Pragma): New routine.
* sem_util.adb (Install_Elaboration_Model): New routine.
* sem_util.ads (Install_Elaboration_Model): New routine.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update the
documentation of pragma Elaboration_Checks.
* gnat_rm.texi: Regenerate.

From-SVN: r260457

6 years ago[Ada] Robustify traceback caching for executable in current dir
Olivier Hainque [Mon, 21 May 2018 14:51:09 +0000 (14:51 +0000)]
[Ada] Robustify traceback caching for executable in current dir

Any program calling Gnat.Traceback.Symbolic.Enable_Cache for
dwarf based symbolization fails with a segmentation violation
when spawned with an inaccurate argv[0] such that it couldn't
be found on PATH.

argv[0] is most often found on PATH. One plausible case where
it isn't is when argv[0] is a mere file name and . isn't on PATH,
which might happen out of imprecise exec calls.

This change robustifies the Traceback.Symbolic implementation
to work in this case as well, by just trying to work with argv[0]
untouched as the executable file to fetch dwarf info from.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-trasym__dwarf.adb (Executable_Name): Return argv[0] instead
of empty string when argv[0] couldn't be found on PATH.
(Enable_Cache): Raise Program_Error instead of attempting a null
pointer dereference when the Exec_Module initialization failed.

From-SVN: r260456

6 years ago[Ada] Remove External aspect from predefined abstract states
Piotr Trojanek [Mon, 21 May 2018 14:51:04 +0000 (14:51 +0000)]
[Ada] Remove External aspect from predefined abstract states

Explicit External aspect was an equivalant to an implicit default.  It was only
needed as a workaround for a frontend bug. (If it meant to serve as
documentation, there should be explicit Effective_Reads and Effective_Writes
set to False too.)

No test, because these changes are semantically neutral.

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

gcc/ada/

* libgnarl/a-reatim.ads (Clock_Time): Remove External aspect.
* libgnarl/a-taside.ads (Tasking_State): Likewise.
* libgnat/a-calend.ads (Clock_Time): Likewise.

From-SVN: r260455

6 years ago[Ada] Spurious error in inlining for GNATprove on prefix call notation
Yannick Moy [Mon, 21 May 2018 14:50:59 +0000 (14:50 +0000)]
[Ada] Spurious error in inlining for GNATprove on prefix call notation

During the special inlining done in GNATprove mode, a call in prefix
notation leads to a spurious error. Now fixed.

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

gcc/ada/

* sem_ch6.adb (Analyze_Procedure_Call): Refine test to recognize prefix
call notation in inlined call in GNATprove mode.

From-SVN: r260454

6 years ago[Ada] Spurious error on synchronous refinement
Hristian Kirtchev [Mon, 21 May 2018 14:50:54 +0000 (14:50 +0000)]
[Ada] Spurious error on synchronous refinement

This patch ensures that an abstract state declared with simple option
"synchronous" is automatically considered "external".

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

gcc/ada/

* einfo.adb (Is_External_State): An abstract state is also external
when it is declared with option "synchronous".
* einfo.ads: Update the documentation of synthesized attribute
Is_External_State.
* sem_util.adb (Find_Simple_Properties): New routine.
(Is_Enabled_External_Property): New routine.
(State_Has_Enabled_Property): Reimplemented. The two flavors of option
External have precedence over option Synchronous when determining
whether a property is in effect.

gcc/testsuite/

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

From-SVN: r260453

6 years ago[Ada] Crash on incorrect frontend inlining in GNATprove mode
Yannick Moy [Mon, 21 May 2018 14:50:49 +0000 (14:50 +0000)]
[Ada] Crash on incorrect frontend inlining in GNATprove mode

In some cases, the inlining performed in GNATprove mode leads to a crash,
when inlining a call where a return statement of the inlined function
returns a string literal. Now fixed.

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

gcc/ada/

* sem_eval.adb (Static_Length): Take into account case of variable of
subtype string literal.

From-SVN: r260452

6 years ago[Ada] Tighten Object_Reader.Get_Memory_Bounds
Olivier Hainque [Mon, 21 May 2018 14:50:44 +0000 (14:50 +0000)]
[Ada] Tighten Object_Reader.Get_Memory_Bounds

Symbolization of traceback entries from dwarf info was
failing in some cases with shared libraries on ELF targets,
from unexpected overlapping of what we believed were code
regions for distinct modules.

This is caused by the inclusion of all SHF_ALLOC sections in
the set of sections of possible relevance to determine the span
of possible code addresses for a module.

This change renames the Get_memory_Bound subprogram to better
convey that we really care about sections hosting executable code
in particular, matching what the spec comments already claims.

It also renames the boolean flag conveying the info of relevance
in the Object_Section record, and adjusts the ELF implementation
of Get_Section to feed this flag from SHF_EXECINSTR instead of
SHF_ALLOC.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-objrea.ads (Get_Memory_Bounds): Rename as Get_Xcode_Bounds.
(Object_Section): Rename Flag_Alloc component as Flag_Xcode.
* libgnat/s-objrea.adb (Get_Xcode_Bounds): Adjust to new subprogram and
component name.
(Get_Section, ELF case): Set Flag_Xcode from SHF_EXECINSTR.
* libgnat/s-dwalin.adb (Open): Adjust to the Get_Memory_Bounds name
change.

From-SVN: r260451

6 years ago[Ada] Robustify traceback symbolization from dwarf info
Olivier Hainque [Mon, 21 May 2018 14:50:38 +0000 (14:50 +0000)]
[Ada] Robustify traceback symbolization from dwarf info

Symbolization of traceback entries from dwarf info is
failing in multiple cases for addresses originating from
shared libraries.

Part of the problem is a confusion across different functions
regarding the kind of "address" at hand, sometimes full process
runtime addresses (e.g. in traceback entries), sometimes module
relative (e.g. in dwarf info segments).

This change fixes this by introducing the use of distinct types
for the two kinds of addresses, resorting to System.Address
for runtime addresses and to Storage_Elements.Storage_Offset
for module relative values. The accompanying code changes
tidy a few places where we can now use standard operators
to combine offets & addresses, and include a few corrections
of consistency problems at spots where comparisons were done
between runtime addresses and relative offsets.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-dwalin.ads (Dwarf_Context): Change type of Load_Address to
Address, and type of Low, High to Storage_Offset.
(Low): Rename as Low_Address and convey that the return value is a
runtime reference accounting for a load address.
* libgnat/s-dwalin.adb (Read_Aranges_Entry): Adjust to the
address/offset type changes.
(Aranges_Lookup): Likewise.
(Symbolic_Address): Likewise.
(Symbolic_Traceback): Likewise.
(Dump_Cache): Likewise.
(Is_Inside): Likewise.
(Open): Likewise.
(Set_Load_Address): Likewise.
(Low_Address): Likewise, and account for C.Load_Address.
* libgnat/s-trasym__dwarf.adb (Lt): Use Low_Address instead of Low.
(Multi_Module_Symbolic_Traceback): Compare address in traceback
with module Low_Address instead of Low.

From-SVN: r260450

6 years ago[Ada] Rename Load_Slide internal runtime component as Load_Address
Olivier Hainque [Mon, 21 May 2018 14:50:33 +0000 (14:50 +0000)]
[Ada] Rename Load_Slide internal runtime component as Load_Address

Load_Address is just more consistent with the overall use of the component.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-dwalin.ads (Dwarf_Context): Rename Load_Slide as
Load_Address.
* libgnat/s-dwalin.adb (Is_Inside): Adjust accordingly.
(Set_Load_Address): Likewise.
(Symbolic_Traceback): Likewise.

From-SVN: r260449

6 years ago[Ada] Propagate load addresses for traceback cache on Linux
Olivier Hainque [Mon, 21 May 2018 14:50:28 +0000 (14:50 +0000)]
[Ada] Propagate load addresses for traceback cache on Linux

Symbolization of traceback addresses through shared libraries
requires information on the shared libraries load addresses, which
was at hand on Linuxbut not propagated through the runtime when
caching is enabled.  This change fixes this.

2018-05-21  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-trasym__dwarf.adb (Add_Module_To_Cache): Expect a
Load_Address argument and pass it down to Init_Module.
* libgnat/s-tsmona__linux.adb (Build_Cache_For_All_Modules): Pass
lm.l_addr as the Load_Address to Add_Module_To_Cache.

From-SVN: r260448

6 years ago[Ada] Only allow Has_Discriminants on type entities
Piotr Trojanek [Mon, 21 May 2018 14:50:23 +0000 (14:50 +0000)]
[Ada] Only allow Has_Discriminants on type entities

This patch enforces what the comment for Has_Discriminant says:

--    Has_Discriminants (Flag5)
--       Defined in all types and subtypes.

to avoid semantically undefined calls on non-type entities. It also adapts
other routines to respect this comment.

No user-visible impact.

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

gcc/ada/

* einfo.adb (Has_Discriminants): Stronger assertion.
(Set_Has_Discriminants): Stronger assertion.
* sem_ch13.adb (Push_Scope_And_Install_Discriminants): Adapt to respect
the stronger assertion on Has_Discriminant.
(Uninstall_Discriminants_And_Pop_Scope): Same as above.
* sem_util.adb (New_Copy_Tree): Same as above.
* sem_ch7.adb (Generate_Parent_References): Prevent calls to
Has_Discriminant on non-type entities that might happen when the
compiled code has errors.
* sem_ch3.adb (Derived_Type_Declaration): Only call
Set_Has_Discriminant on type entities.

From-SVN: r260447

6 years ago[Ada] Unnest all subprograms relevant for code generation
Arnaud Charlet [Mon, 21 May 2018 14:50:17 +0000 (14:50 +0000)]
[Ada] Unnest all subprograms relevant for code generation

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

gcc/ada/

* exp_unst.adb (Unnest_Subprogram): Unnest all subprograms relevant for
code generation.

From-SVN: r260446

6 years ago[Ada] Typo in lib.ads comment
Piotr Trojanek [Mon, 21 May 2018 14:50:13 +0000 (14:50 +0000)]
[Ada] Typo in lib.ads comment

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

gcc/ada/

* lib.ads: Fix typo in enumeration in comment.

From-SVN: r260445

6 years ago[Ada] Extend legality of Scalar_Storage_Order to formal types
Ed Schonberg [Mon, 21 May 2018 14:50:06 +0000 (14:50 +0000)]
[Ada] Extend legality of Scalar_Storage_Order to formal types

This patch extends the legality of the GNAT attribute Scalar_Storage_Order,
to apply to formal private types. Previously this extension applied only
in GNAT_Mode, to support instantiations of Ada.Sequential_IO, but it is more
generally useful.

The following must compile quietly:

----
with Memory_View_Generic;
procedure Main is
   type T is array (1..10) of integer;
   package OK is new Memory_View_Generic (T);

   type T2 is new Long_Float;
   package Wrong is new Memory_View_Generic (T2);
begin
   null;
end;
----
with System;
generic
   type Source_Type is private;
package Memory_View_Generic is
   -- various declarations ...
   SSO : System.Bit_Order := Source_Type'Scalar_Storage_Order;
end Memory_View_Generic;

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

gcc/ada/

* sem_attr.adb (Analyze_Attribute, case Scalar_Storage_Order): The
attribute reference is legal within a generic unit when the prefix is a
formal private type.

From-SVN: r260444

6 years ago[Ada] Premature secondary stack reclamation
Hristian Kirtchev [Mon, 21 May 2018 14:49:52 +0000 (14:49 +0000)]
[Ada] Premature secondary stack reclamation

This patch modifies the creation of transient scopes to eliminate potential
premature secondary stack reclamations when there is no suitable transient
context and the scope was intended to manage the secondary stack. Instead,
the logic was changed to accommodate a special case where an assignment with
suppressed controlled actions that appears within a type initialization
procedure requires secondary stack reclamation.

The patch also corrects the handling of function calls which utilize the
secondary stack in loop parameter specifications. Previously the predicate
which determined whether the function will utilize the secondary stack was
not accurate enough, and in certain cases could lead to leaks.

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

--  iterators.ads

package Iterators is
   type Iterator is limited interface;
   type Iterator_Access is access all Iterator'Class;

   function Next
     (I       : in out Iterator;
      Element : out Character) return Boolean is abstract;

   procedure Iterate
     (I    : in out Iterator'Class;
      Proc : access procedure (Element : Character));
end Iterators;

--  iterators.adb

package body Iterators is
   procedure Iterate
     (I    : in out Iterator'Class;
      Proc : access procedure (Element : Character))
   is
      Element : Character;
   begin
      while I.Next (Element) loop
         Proc (Element);
      end loop;
   end Iterate;
end Iterators;

--  base.ads

with Iterators; use Iterators;

package Base is
   type String_Access is access all String;
   type Node is tagged record
      S : String_Access;
   end record;

   type Node_Access is access all Node'Class;
   type Node_Array is array (Positive range <>) of Node_Access;

   function As_Array (N : Node_Access) return Node_Array;
   function Get_String (C : Character) return String;

   type Node_Iterator is limited new Iterator with record
      Node : Node_Access;
      I    : Positive;
   end record;

   overriding function Next
     (It      : in out Node_Iterator;
      Element : out Character) return Boolean;

   function Constructor_1 (N : Node_Access) return Node_Iterator;
   function Constructor_2 (N : Node_Access) return Node_Iterator;
end Base;

--  base.adb

package body Base is
   function As_Array (N : Node_Access) return Node_Array is
   begin
      return (1 => N);
   end As_Array;

   function Get_String (C : Character) return String is
   begin
      return (1 .. 40 => C);
   end Get_String;

   function Next
     (It      : in out Node_Iterator;
      Element : out Character) return Boolean
   is
   begin
      if It.I > It.Node.S'Last then
         return False;
      else
         It.I := It.I + 1;
         Element := It.Node.S (It.I - 1);
         return True;
      end if;
   end Next;

   function Constructor_1 (N : Node_Access) return Node_Iterator is
   begin
      return Node_Iterator'(N, 1);
   end Constructor_1;

   function Constructor_2 (N : Node_Access) return Node_Iterator is
   begin
      return Constructor_1 (As_Array (N) (1));
   end Constructor_2;
end Base;

--  main.adb

with Ada.Text_IO; use Ada.Text_IO;
with Base;        use Base;
with Iterators;   use Iterators;

procedure Main is
   N : constant Node_Access := new Node'(S => new String'("hello world"));

   procedure Process (C : Character) is
   begin
      Put_Line (Get_String (C));
   end Process;

   C : Iterator'Class := Constructor_2 (N);

begin
   C.Iterate (Process'Access);
end Main;

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

$ gnatmake -q main.adb
$ ./main
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
llllllllllllllllllllllllllllllllllllllll
llllllllllllllllllllllllllllllllllllllll
oooooooooooooooooooooooooooooooooooooooo

wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
oooooooooooooooooooooooooooooooooooooooo
rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
llllllllllllllllllllllllllllllllllllllll
dddddddddddddddddddddddddddddddddddddddd

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

gcc/ada/

* exp_ch7.adb (Establish_Transient_Scope): Code cleanup. Do not
delegate the secondary stack management when there is no suitable
transient context, and the transient scope was intended to manage the
secondary stack because this causes premature reclamation. Change the
transient scope creation logic by special casing assignment statements
of controlled components for type initialization procedures.
(Find_Node_To_Be_Wrapped): Renamed to Find_Transient_Context. Update
the comment on usage.
(Find_Transient_Context): Change the initinte loop into a while loop.
Iterations schemes and iterator specifications are not valid transient
contexts because they rely on special processing. Assignment statements
are now treated as a normal transient context, special cases are
handled by the caller. Add special processing for pragma Check.
(Is_OK_Construct): Removed. Its functionality has been merged in
routine Find_Transient_Context.
* sem_ch5.adb (Check_Call): Reimplemented. Add code to properly
retrieve the subprogram being invoked. Use a more accurate predicate
(Requires_Transient_Scope) to determine that the function will emply
the secondary stack.

From-SVN: r260443

6 years ago[Ada] Fix inconstent subprogram body headers
Piotr Trojanek [Mon, 21 May 2018 14:49:46 +0000 (14:49 +0000)]
[Ada] Fix inconstent subprogram body headers

These are GNAT style violations detected with a trivial Libadalang checker.

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

gcc/ada/

* ada_get_targ.adb: Fix subprogram body headers.
* adabkend.adb: Likewise.
* checks.adb: Likewise.
* exp_ch3.adb: Likewise.
* exp_ch5.adb: Likewise.
* exp_ch9.adb: Likewise.
* exp_dist.adb: Likewise.
* exp_tss.adb: Likewise.
* inline.adb: Likewise.
* lib-writ.adb: Likewise.
* lib-xref-spark_specific.adb: Likewise.
* libgnarl/s-osinte__darwin.adb: Likewise.
* libgnarl/s-stusta.adb: Likewise.
* libgnarl/s-taprop__solaris.adb: Likewise.
* libgnarl/s-tposen.adb: Likewise.
* libgnarl/s-vxwext__kernel-smp.adb: Likewise.
* libgnarl/s-vxwext__kernel.adb: Likewise.
* libgnat/a-btgbso.adb: Likewise.
* libgnat/a-cfdlli.adb: Likewise.
* libgnat/a-cfhama.adb: Likewise.
* libgnat/a-cfinve.adb: Likewise.
* libgnat/a-cimutr.adb: Likewise.
* libgnat/a-coboho.adb: Likewise.
* libgnat/a-cofove.adb: Likewise.
* libgnat/a-cofuve.adb: Likewise.
* libgnat/a-comutr.adb: Likewise.
* libgnat/a-exexda.adb: Likewise.
* libgnat/a-tags.adb: Likewise.
* libgnat/a-tideau.adb: Likewise.
* libgnat/a-wtdeau.adb: Likewise.
* libgnat/a-ztdeau.adb: Likewise.
* libgnat/g-alleve.adb: Likewise.
* libgnat/s-excdeb.adb: Likewise.
* libgnat/s-parint.adb: Likewise.
* libgnat/s-shasto.adb: Likewise.
* libgnat/s-traceb__hpux.adb: Likewise.
* prepcomp.adb: Likewise.
* sem_ch4.adb: Likewise.
* sem_ch6.adb: Likewise.
* sem_dist.adb: Likewise.
* sem_prag.adb: Likewise.
* sem_util.adb: Likewise.
* sinfo.adb: Likewise.
* switch.adb: Likewise.

From-SVN: r260442

6 years agoFix std::filesystem::absolute for empty paths
Jonathan Wakely [Mon, 21 May 2018 12:52:44 +0000 (13:52 +0100)]
Fix std::filesystem::absolute for empty paths

* src/filesystem/std-ops.cc (absolute): Report an error for empty
paths.
(weakly_canonical(const path&)): Do not call canonical on empty path.
(weakly_canonical(const path&, error_code&)): Likewise.
* testsuite/27_io/filesystem/operations/absolute.cc: Check for errors.

From-SVN: r260441

6 years agoPR libstdc++/85818 make new test require Filesystem support
Jonathan Wakely [Mon, 21 May 2018 12:27:00 +0000 (13:27 +0100)]
PR libstdc++/85818 make new test require Filesystem support

PR libstdc++/85818
* testsuite/experimental/filesystem/path/preferred_separator.cc: Add
dg-require-filesystem-ts.

From-SVN: r260439

6 years agosvn rm files missed out from "[arm][2/2] Remove support for -march=armv3 and older"
Kyrylo Tkachov [Mon, 21 May 2018 11:27:41 +0000 (11:27 +0000)]
svn rm files missed out from "[arm][2/2] Remove support for -march=armv3 and older"

From-SVN: r260438

6 years ago[AArch64] Implement usadv16qi and ssadv16qi standard names
Kyrylo Tkachov [Mon, 21 May 2018 11:21:07 +0000 (11:21 +0000)]
[AArch64] Implement usadv16qi and ssadv16qi standard names

This patch implements the usadv16qi and ssadv16qi standard names.
See the thread at on gcc@gcc.gnu.org [1] for background.

The V16QImode variant is important to get right as it is the most commonly used pattern:
reducing vectors of bytes into an int.
The midend expects the optab to compute the absolute differences of operands 1 and 2 and
reduce them while widening along the way up to SImode. So the inputs are V16QImode and
the output is V4SImode.

I've tried out a few different strategies for that, the one I settled with is to emit:
UABDL2    tmp.8h, op1.16b, op2.16b
UABAL    tmp.8h, op1.16b, op2.16b
UADALP    op3.4s, tmp.8h

To work through the semantics let's say operands 1 and 2 are:
op1 { a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15 }
op2 { b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }
op3 { c0, c1, c2, c3 }

The UABDL2 takes the upper V8QI elements, computes their absolute differences, widens them and stores them into the V8HImode tmp:

tmp { ABS(a[8]-b[8]), ABS(a[9]-b[9]), ABS(a[10]-b[10]), ABS(a[11]-b[11]), ABS(a[12]-b[12]), ABS(a[13]-b[13]), ABS(a[14]-b[14]), ABS(a[15]-b[15]) }

The UABAL after that takes the lower V8QI elements, computes their absolute differences, widens them and accumulates them into the V8HImode tmp from the previous step:

tmp { ABS(a[8]-b[8])+ABS (a[0]-b[0]), ABS(a[9]-b[9])+ABS(a[1]-b[1]), ABS(a[10]-b[10])+ABS(a[2]-b[2]), ABS(a[11]-b[11])+ABS(a[3]-b[3]), ABS(a[12]-b[12])+ABS(a[4]-b[4]), ABS(a[13]-b[13])+ABS(a[5]-b[5]), ABS(a[14]-b[14])+ABS(a[6]-b[6]), ABS(a[15]-b[15])+ABS(a[7]-b[7]) }

Finally the UADALP does a pairwise widening reduction and accumulation into the V4SImode op3:
op3 { c0+ABS(a[8]-b[8])+ABS(a[0]-b[0])+ABS(a[9]-b[9])+ABS(a[1]-b[1]), c1+ABS(a[10]-b[10])+ABS(a[2]-b[2])+ABS(a[11]-b[11])+ABS(a[3]-b[3]), c2+ABS(a[12]-b[12])+ABS(a[4]-b[4])+ABS(a[13]-b[13])+ABS(a[5]-b[5]), c3+ABS(a[14]-b[14])+ABS(a[6]-b[6])+ABS(a[15]-b[15])+ABS(a[7]-b[7]) }

(sorry for the text dump)

Remember, according to [1] the exact reduction sequence doesn't matter (for integer arithmetic at least).
I've considered other sequences as well (thanks Wilco), for example
* UABD + UADDLP + UADALP
* UABLD2 + UABDL + UADALP + UADALP

I ended up settling in the sequence in this patch as it's short (3 instructions) and in the future we can potentially
look to optimise multiple occurrences of these into something even faster (for example accumulating into H registers for longer
before doing a single UADALP in the end to accumulate into the final S register).

If your microarchitecture has some some strong preferences for a particular sequence, please let me know or, even better, propose a patch
to parametrise the generation sequence by code (or the appropriate RTX cost).

This expansion allows the vectoriser to avoid unpacking the bytes in two steps and performing V4SI arithmetic on them.
So, for the code:

unsigned char pix1[N], pix2[N];

int foo (void)
{
  int i_sum = 0;
  int i;

  for (i = 0; i < 16; i++)
    i_sum += __builtin_abs (pix1[i] - pix2[i]);

  return i_sum;
}

we now generate on aarch64:
foo:
        adrp    x1, pix1
        add     x1, x1, :lo12:pix1
        movi    v0.4s, 0
        adrp    x0, pix2
        add     x0, x0, :lo12:pix2
        ldr     q2, [x1]
        ldr     q3, [x0]
        uabdl2  v1.8h, v2.16b, v3.16b
        uabal   v1.8h, v2.8b, v3.8b
        uadalp  v0.4s, v1.8h
        addv    s0, v0.4s
        umov    w0, v0.s[0]
        ret

instead of:
foo:
        adrp    x1, pix1
        adrp    x0, pix2
        add     x1, x1, :lo12:pix1
        add     x0, x0, :lo12:pix2
        ldr     q0, [x1]
        ldr     q4, [x0]
        ushll   v1.8h, v0.8b, 0
        ushll2  v0.8h, v0.16b, 0
        ushll   v2.8h, v4.8b, 0
        ushll2  v4.8h, v4.16b, 0
        usubl   v3.4s, v1.4h, v2.4h
        usubl2  v1.4s, v1.8h, v2.8h
        usubl   v2.4s, v0.4h, v4.4h
        usubl2  v0.4s, v0.8h, v4.8h
        abs     v3.4s, v3.4s
        abs     v1.4s, v1.4s
        abs     v2.4s, v2.4s
        abs     v0.4s, v0.4s
        add     v1.4s, v3.4s, v1.4s
        add     v1.4s, v2.4s, v1.4s
        add     v0.4s, v0.4s, v1.4s
        addv    s0, v0.4s
        umov    w0, v0.s[0]
        ret

So I expect this new expansion to be better than the status quo in any case.
Bootstrapped and tested on aarch64-none-linux-gnu.
This gives about 8% on 525.x264_r from SPEC2017 on a Cortex-A72.

* config/aarch64/aarch64.md ("unspec"): Define UNSPEC_SABAL,
UNSPEC_SABDL2, UNSPEC_SADALP, UNSPEC_UABAL, UNSPEC_UABDL2,
UNSPEC_UADALP values.
* config/aarch64/iterators.md (ABAL): New int iterator.
(ABDL2): Likewise.
(ADALP): Likewise.
(sur): Add mappings for the above.
* config/aarch64/aarch64-simd.md (aarch64_<sur>abdl2<mode>_3):
New define_insn.
(aarch64_<sur>abal<mode>_4): Likewise.
(aarch64_<sur>adalp<mode>_3): Likewise.
(<sur>sadv16qi): New define_expand.

* gcc.c-torture/execute/ssad-run.c: New test.
* gcc.c-torture/execute/usad-run.c: Likewise.
* gcc.target/aarch64/ssadv16qi.c: Likewise.
* gcc.target/aarch64/usadv16qi.c: Likewise.

From-SVN: r260437

6 years agoi386.md (*movsf_internal): AVX falsedep fix.
Alexander Nesterovskiy [Mon, 21 May 2018 11:14:14 +0000 (11:14 +0000)]
i386.md (*movsf_internal): AVX falsedep fix.

2018-05-21  Alexander Nesterovskiy  <alexander.nesterovskiy@intel.com>

gcc/
        * config/i386/i386.md (*movsf_internal): AVX falsedep fix.
        (*movdf_internal): Ditto.
        (*rcpsf2_sse): Ditto.
        (*rsqrtsf2_sse): Ditto.
        (*sqrt<mode>2_sse): Ditto.

From-SVN: r260436

6 years agoAdd missing AArch64 NEON instrinctics for Armv8.2-a to Armv8.4-a
Tamar Christina [Mon, 21 May 2018 10:33:30 +0000 (10:33 +0000)]
Add missing AArch64 NEON instrinctics for Armv8.2-a to Armv8.4-a

This patch adds the missing neon intrinsics for all 128 bit vector Integer modes for the
three-way XOR and negate and xor instructions for Arm8.2-a to Armv8.4-a.

gcc/
2018-05-21  Tamar Christina  <tamar.christina@arm.com>

* config/aarch64/aarch64-simd.md (aarch64_eor3qv8hi): Change to
eor3q<mode>4.
(aarch64_bcaxqv8hi): Change to bcaxq<mode>4.
* config/aarch64/aarch64-simd-builtins.def (veor3q_u8, veor3q_u32,
veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
vbcaxq_s64): New.
* config/aarch64/arm_neon.h: Likewise.
* config/aarch64/iterators.md (VQ_I): New.

gcc/testsuite/
2018-05-21  Tamar Christina  <tamar.christina@arm.com>

* gcc.target/gcc.target/aarch64/sha3.h (veor3q_u8, veor3q_u32,
veor3q_u64, veor3q_s8, veor3q_s16, veor3q_s32, veor3q_s64, vbcaxq_u8,
vbcaxq_u32, vbcaxq_u64, vbcaxq_s8, vbcaxq_s16, vbcaxq_s32,
vbcaxq_s64): New.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.
* gcc.target/gcc.target/aarch64/sha3_1.c: Likewise.

From-SVN: r260435

6 years ago[ARC] Add multilib support for linux targets
Alexey Brodkin [Mon, 21 May 2018 09:56:57 +0000 (09:56 +0000)]
[ARC] Add multilib support for linux targets

We used to build baremetal (AKA Elf32) multilibbed toolchains for years
now but never made that for Linux targets since there were problems with
uClibc n multilib setup. Now with help of Crosstool-NG it is finally
possible to create uClibc-based multilibbed toolchains and so we add
relevant CPUs for multilib in case of configuration for "arc*-*-linux*".

This will be essentially useful for glibc-based multilibbbed toolchains
in the future.

gcc/
2018-05-16  Alexey Brodkin <abrodkin@synopsys.com>

        * config.gcc: Add arc/t-multilib-linux to tmake_file for
        arc*-*-linux*.
        * config/arc/t-multilib-linux: Specify MULTILIB_OPTIONS and
        MULTILIB_DIRNAMES

From-SVN: r260434

6 years agore PR fortran/85841 ([F2018] reject deleted features)
Janus Weil [Mon, 21 May 2018 06:45:55 +0000 (08:45 +0200)]
re PR fortran/85841 ([F2018] reject deleted features)

2018-05-21  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85841
* libgfortran.h: New macros GFC_STD_OPT_*.
* error.c (notify_std_msg): New function.
(gfc_notify_std): Adjust such that it can handle combinations of
GFC_STD_* flags in the 'std' argument, not just a single one.
* match.c (match_arithmetic_if, gfc_match_if): Reject arithmetic if
in Fortran 2018.
(gfc_match_stopcode): Use GFC_STD_OPT_* macros.
* options.c (set_default_std_flags): Warn for F2018 deleted features
by default.
(gfc_handle_option): F2018 deleted features are allowed in earlier
standards.
* symbol.c (gfc_define_st_label, gfc_reference_st_label): Reject
nonblock do constructs in Fortran 2018.

2018-05-21  Janus Weil  <janus@gcc.gnu.org>

PR fortran/85841
* gfortran.dg/g77/19990826-3.f: Add option "-std=legacy".
* gfortran.dg/g77/20020307-1.f: Ditto.
* gfortran.dg/g77/980310-3.f: Ditto.
* gfortran.dg/goacc/loop-1-2.f95: Ditto.
* gfortran.dg/goacc/loop-1.f95: Ditto.
* gfortran.dg/gomp/appendix-a/a.6.1.f90: Ditto.
* gfortran.dg/gomp/appendix-a/a.6.2.f90: Ditto.
* gfortran.dg/gomp/do-1.f90: Ditto.
* gfortran.dg/gomp/omp_do1.f90: Ditto.
* gfortran.dg/pr17229.f: Ditto.
* gfortran.dg/pr37243.f: Ditto.
* gfortran.dg/pr49721-1.f: Ditto.
* gfortran.dg/pr58484.f: Ditto.
* gfortran.dg/pr81175.f: Ditto.
* gfortran.dg/pr81723.f: Ditto.
* gfortran.dg/predcom-2.f: Ditto.
* gfortran.dg/vect/Ofast-pr50414.f90: Ditto.
* gfortran.dg/vect/cost-model-pr34445a.f: Ditto.
* gfortran.dg/vect/fast-math-mgrid-resid.f: Ditto.
* gfortran.dg/vect/pr52580.f: Ditto.

From-SVN: r260433

6 years agoPR libstdc++/85843 - warning in logic_error copy constructor.
Jason Merrill [Mon, 21 May 2018 03:53:00 +0000 (23:53 -0400)]
PR libstdc++/85843 - warning in logic_error copy constructor.

* class.c (type_has_user_nondefault_constructor): Check for a
user-provided ctor, not user-declared.

From-SVN: r260432

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

From-SVN: r260431

6 years agoPR libstdc++/85843 fix "should be explicitly initialized" warnings
Jonathan Wakely [Sun, 20 May 2018 23:50:08 +0000 (00:50 +0100)]
PR libstdc++/85843 fix "should be explicitly initialized" warnings

PR libstdc++/85843
* src/c++11/cow-stdexcept.cc (logic_error, runtime_error): Explicitly
initialize base class to avoid warnings.

From-SVN: r260427

6 years ago[NDS32] Set call address constraint.
Chung-Ju Wu [Sun, 20 May 2018 16:03:45 +0000 (16:03 +0000)]
[NDS32] Set call address constraint.

gcc/
* config/nds32/constraints.md (S): New constraint.
* config/nds32/nds32.md (call_internal): Use constraint S.
(call_value_internal): Likewise.
(sibcall_internal): Likewise.
(sibcall_value_internal): Likewise.

From-SVN: r260422

6 years agore PR fortran/82275 (gfortran rejects valid & accepts invalid reference to dimension...
Paul Thomas [Sun, 20 May 2018 10:54:24 +0000 (10:54 +0000)]
re PR fortran/82275 (gfortran rejects valid & accepts invalid reference to dimension-remapped type SELECT TYPE selector)

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82275
Correcting ChangeLogs
* match.c (gfc_match_type_spec): Go through the array ref and
decrement 'rank' for every dimension that is an element.

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82275
Correcting ChangeLogs
* gfortran.dg/select_type_42.f90: New test.

From-SVN: r260416

6 years agore PR fortran/80657 (Loop in character function declaration)
Paul Thomas [Sun, 20 May 2018 10:08:24 +0000 (10:08 +0000)]
re PR fortran/80657 (Loop in character function declaration)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80657
* resolve.c (flag_fn_result_spec): Use the 'sym' argument to
test for self refs to the function result in the character len
expression. If a self reference is found, emit an error and
return true.
(resolve_fntype): Use the function symbol in the calls to the
above.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/80657
* gfortran.dg/char_result_18.f90: New test.

From-SVN: r260415

6 years agore PR fortran/49636 ([F03] ASSOCIATE construct confused with slightly complicated...
Paul Thomas [Sun, 20 May 2018 10:04:46 +0000 (10:04 +0000)]
re PR fortran/49636 ([F03] ASSOCIATE construct confused with slightly complicated case)

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/49636
* trans-array.c (gfc_get_array_span): Renamed from
'get_array_span'.
(gfc_conv_expr_descriptor): Change references to above.
* trans-array.h : Add prototype for 'gfc_get_array_span'.
* trans-stmt.c (trans_associate_var): If the associate name is
a subref array pointer, use gfc_get_array_span for the span.

2018-05-20  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/49636
* gfortran.dg/associate_38.f90: New test.

From-SVN: r260414

6 years agore PR fortran/82923 (Automatic allocation of deferred length character using function...
Paul Thomas [Sun, 20 May 2018 09:59:54 +0000 (09:59 +0000)]
re PR fortran/82923 (Automatic allocation of deferred length character using function result)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
PR fortran/66694
PR fortran/82617
* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
charlen backend_decl of the rhs expr to ss->info->string_length
so that the value in the current scope is used.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
that the patch fixes PR66694 & PR82617, although the testcases
are not explicitly included.

From-SVN: r260413

6 years ago[NDS32] Adjust register move cost for graywolf cpu.
Kito Cheng [Sun, 20 May 2018 07:31:55 +0000 (07:31 +0000)]
[NDS32] Adjust register move cost for graywolf cpu.

gcc/
* config/nds32/nds32.c (nds32_register_move_cost): Take garywolf cpu
into consideration.

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

6 years ago[NDS32] Rewrite cost model.
Kito Cheng [Sun, 20 May 2018 07:23:39 +0000 (07:23 +0000)]
[NDS32] Rewrite cost model.

gcc/
* config/nds32/nds32-cost.c (rtx_cost_model_t): New structure.
(insn_size_16bit, insn_size_32bit): New variables for cost evaluation.
(nds32_rtx_costs_impl): Simplify.
(nds32_address_cost_impl): Simplify.
(nds32_init_rtx_costs): New function.
(nds32_rtx_costs_speed_prefer): Likewise.
(nds32_rtx_costs_size_prefer): Likewise.
(nds32_address_cost_speed_prefer): Likewise.
(nds32_address_cost_speed_fwprop): Likewise.
(nds32_address_cost_size_prefer): Likewise.
* config/nds32/nds32-protos.h (nds32_init_rtx_costs): Declare.
* config/nds32/nds32.c (nds32_option_override): Use
nds32_init_rtx_costs function.

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

6 years ago[NDS32] Fix date in gcc/ChangeLog file.
Chung-Ju Wu [Sun, 20 May 2018 07:09:09 +0000 (07:09 +0000)]
[NDS32] Fix date in gcc/ChangeLog file.

From-SVN: r260410

6 years ago[NDS32] Print pipeline model in asm header.
Chung-Ju Wu [Sun, 20 May 2018 05:09:49 +0000 (05:09 +0000)]
[NDS32] Print pipeline model in asm header.

gcc/
* config/nds32/nds32.c (nds32_asm_file_start): Output pipeline model.
* config/nds32/nds32.h (TARGET_PIPELINE_N7): Define.
(TARGET_PIPELINE_N8): Likewise.
(TARGET_PIPELINE_N10): Likewise.
(TARGET_PIPELINE_N13): Likewise.
(TARGET_PIPELINE_GRAYWOLF): Likewise.

From-SVN: r260409

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

From-SVN: r260408

6 years agoAvoid ICE on unsupported use of __integer_pack.
Jason Merrill [Sat, 19 May 2018 22:57:53 +0000 (18:57 -0400)]
Avoid ICE on unsupported use of __integer_pack.

* pt.c (tsubst_pack_expansion): Sorry rather than abort
on __integer_pack as subexpression of pattern.

From-SVN: r260404

6 years ago[NDS32] Update copyright year in nds32-fpu.md.
Monk Chiang [Sat, 19 May 2018 15:23:45 +0000 (15:23 +0000)]
[NDS32] Update copyright year in nds32-fpu.md.

gcc/
* config/nds32/nds32-fpu.md: Update copyright year.

From-SVN: r260402

6 years ago[NDS32] Adjust ASM spec.
Chung-Ju Wu [Sat, 19 May 2018 15:16:53 +0000 (15:16 +0000)]
[NDS32] Adjust ASM spec.

gcc/
* config/nds32/nds32.h (ASM_SPEC): Adjust spec rule.

From-SVN: r260401

6 years ago[NDS32] New option -minline-asm-r15.
Chung-Ju Wu [Sat, 19 May 2018 15:10:08 +0000 (15:10 +0000)]
[NDS32] New option -minline-asm-r15.

gcc/
* config/nds32/nds32.c
(nds32_md_asm_adjust): Consider flag_inline_asm_r15 variable.
* config/nds32/nds32.opt (minline-asm-r15): New option.

From-SVN: r260400

6 years ago[NDS32] Add abssi2 pattern.
Chung-Ju Wu [Sat, 19 May 2018 14:51:09 +0000 (14:51 +0000)]
[NDS32] Add abssi2 pattern.

gcc/
* common/config/nds32/nds32-common.c (TARGET_DEFAULT_TARGET_FLAGS): Add
MASK_HW_ABS.
* config/nds32/nds32.md (abssi2): New pattern.

From-SVN: r260398

6 years agoi386.md (rex64namesuffix): New mode attribute.
Uros Bizjak [Sat, 19 May 2018 13:43:06 +0000 (15:43 +0200)]
i386.md (rex64namesuffix): New mode attribute.

* config/i386/i386.md (rex64namesuffix): New mode attribute.
* config/i386/sse.md (sse_cvtsi2ss<rex64namesuffix><round_name>):
Merge insn pattern from sse_cvtsi2ss<round_name> and
sse_cvtsi2ssq<round_name> using SWI48 mode iterator.
(sse_cvtss2si<rex64namesuffix><round_name>): Merge insn pattern
from sse_cvtss2si<round_name> and sse_cvtss2siq<round_name>
using SWI48 mode iterator.
(sse_cvtss2si<rex64namesuffix>_2): Merge insn pattern from
sse_cvtss2si_2 and sse_cvtss2siq_2 using SWI48 mode iterator.
(sse_cvttss2si<rex64namesuffix><round_saeonly_name>): Merge insn
pattern from sse_cvttss2si<round_saeonly_name>
and sse_cvttss2siq<round_saeonly_name> using SWI48 mode iterator.
(avx512f_vcvtss2usi<rex64namesuffix><round_name>): Merge insn pattern
from avx512f_vcvtss2usi<round_name> and avx512f_vcvtss2usiq<round_name>
using SWI48 mode iterator.
(avx512f_vcvttss2usi<rex64namesuffix><round_saeonly_name>): Merge
insn pattern from avx512f_vcvttss2usi<round_saeonly_name> and
avx512f_vcvttss2usiq<round_saeonly_name> using SWI48 mode iterator.
(avx512f_vcvtsd2usi<rex64namesuffix><round_name>): Merge insn pattern
from avx512f_vcvtsd2usi<round_name> and avx512f_vcvtsd2usiq<round_name>
using SWI48 mode iterator.
(avx512f_vcvttsd2usi<rex64namesuffix><round_saeonly_name>): Merge
insn pattern from avx512f_vcvttsd2usi<round_saeonly_name> and
avx512f_vcvttsd2usiq<round_saeonly_name> using SWI48 mode iterator.
(sse2_cvtsd2si<rex64namesuffix><round_name>): Merge insn pattern from
sse2_cvtsd2si<round_name> and sse2_cvtsd2siq<round_name> using
SWI48 mode iterator.
(sse2_cvtsd2si<rex64namesuffix>_2): Merge insn pattern from
sse2_cvtsd2si_2 and sse2_cvtsd2siq_2 using SWI48 mode iterator.
(sse_cvttsd2si<rex64namesuffix><round_saeonly_name>): Merge insn
pattern from sse_cvttsd2si<round_saeonly_name>
and sse_cvttsd2siq<round_saeonly_name> using SWI48 mode iterator.

From-SVN: r260397

6 years ago[NDS32] Refine functions that deal with lwm and smw operations.
Chung-Ju Wu [Sat, 19 May 2018 12:01:11 +0000 (12:01 +0000)]
[NDS32] Refine functions that deal with lwm and smw operations.

gcc/
* config/nds32/nds32-md-auxiliary.c
(nds32_valid_smw_lwm_base_p): Refine.
(nds32_output_smw_single_word): Refine.
(nds32_output_smw_double_word): New.
* config/nds32/nds32-protos.h (nds32_output_smw_double_word): New.

From-SVN: r260396

6 years ago[NDS32] Refine nds32-md-auxiliary.c.
Chung-Ju Wu [Sat, 19 May 2018 11:31:53 +0000 (11:31 +0000)]
[NDS32] Refine nds32-md-auxiliary.c.

gcc/
* config/nds32/nds32-md-auxiliary.c (nds32_output_stack_push): Refine.
(nds32_output_stack_pop): Refine.
(nds32_expand_unaligned_load): Refine.
(nds32_expand_unaligned_store): Refine.

From-SVN: r260394

6 years ago[NDS32] Support PIC and TLS.
Kuan-Lin Chen [Sat, 19 May 2018 11:03:20 +0000 (11:03 +0000)]
[NDS32] Support PIC and TLS.

gcc/
* config/nds32/constants.md: Add TP_REGNUM constant.
(unspec_element): Add UNSPEC_GOTINIT, UNSPEC_GOT, UNSPEC_GOTOFF,
UNSPEC_PLT, UNSPEC_TLSGD, UNSPEC_TLSLD, UNSPEC_TLSIE, UNSPEC_TLSLE and
UNSPEC_ADD32.
* config/nds32/nds32-doubleword.md: Consider flag_pic.
* config/nds32/nds32-dspext.md (mov<mode>): Expand TLS and PIC cases.
* config/nds32/nds32-predicates.c (nds32_const_unspec_p): New.
* config/nds32/nds32-md-auxiliary.c: Implementation that support TLS
and PIC code generation.
* config/nds32/nds32-protos.h: Declarations that support TLS and PIC
code generation.
* config/nds32/nds32-relax-opt.c: Consider TLS and PIC for relax
optimization.
* config/nds32/nds32.md: Support TLS and PIC.
* config/nds32/nds32.c: Support TLS and PIC.
* config/nds32/nds32.h (nds32_relax_insn_type): New enum type.
* config/nds32/predicates.md (nds32_nonunspec_symbolic_operand): New
predicate.

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

6 years agore PR fortran/82923 (Automatic allocation of deferred length character using function...
Paul Thomas [Sat, 19 May 2018 10:49:50 +0000 (10:49 +0000)]
re PR fortran/82923 (Automatic allocation of deferred length character using function result)

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
PR fortran/66694
PR fortran/82617
* trans-array.c (gfc_alloc_allocatable_for_assignment): Set the
charlen backend_decl of the rhs expr to ss->info->string_length
so that the value in the current scope is used.

2018-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/82923
* gfortran.dg/allocate_assumed_charlen_4.f90: New test. Note
that the patch fixes PR66694 & PR82617, although the testcases
are not explicitly included.

From-SVN: r260392

6 years ago[NDS32] Use machine mode with E_ prefix.
Chung-Ju Wu [Sat, 19 May 2018 10:18:23 +0000 (10:18 +0000)]
[NDS32] Use machine mode with E_ prefix.

gcc/
* config/nds32/nds32-predicates.c (const_vector_to_hwint): Use machine
mode with E_ prefix.

From-SVN: r260391

6 years ago[NDS32] Implment indirect funciton call attribute.
Kuan-Lin Chen [Sat, 19 May 2018 08:57:57 +0000 (08:57 +0000)]
[NDS32] Implment indirect funciton call attribute.

* config/nds32/constants.md (unspec_element): Add UNSPEC_ICT.
* config/nds32/nds32-md-auxiliary.c
(symbolic_reference_mentioned_p): New.
(nds32_legitimize_ict_address): New.
(nds32_expand_ict_move): New.
(nds32_indirect_call_referenced_p): New.
(nds32_symbol_binds_local_p): Delete.
(nds32_long_call_p): Modify.
* config/nds32/nds32-opts.h (nds32_ict_model_type): New enum type.
* config/nds32/nds32-protos.h
(symbolic_reference_mentioned_p): Declare.
(nds32_legitimize_ict_address): Declare.
(nds32_expand_ict_move): Declare.
(nds32_indirect_call_referenced_p): Declare.
* config/nds32/nds32-relax-opt.c (nds32_ict_const_p): New.
(nds32_relax_group): Use nds32_ict_const_p as condition.
* config/nds32/nds32.c (nds32_attribute_table): Add "indirect_call".
(nds32_asm_file_start): Output ict_model directive in asm code.
(nds32_legitimate_address_p): Consider indirect call.
(nds32_print_operand): Consider indirect call.
(nds32_print_operand_address): Consider indirect call.
(nds32_insert_attributes): Handle "indirect_call" attribute.
(TARGET_LEGITIMATE_ADDRESS_P): Define.
(TARGET_LEGITIMATE_CONSTANT_P): Define.
(TARGET_CANNOT_FORCE_CONST_MEM): Define.
(TARGET_DELEGITIMIZE_ADDRESS): Define.
(TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA): Define.
* config/nds32/nds32.h (SYMBOLIC_CONST_P): Define.
(TARGET_ICT_MODEL_SMALL): Define.
(TARGET_ICT_MODEL_LARGE): Define.
* config/nds32/nds32.md (movsi): Consider ict model.
(call, call_value): Consider ict model.
(sibcall, sibcall_value): Consider ict model.
* config/nds32/nds32.opt (mict-model): New option.
* config/nds32/predicates.md (nds32_symbolic_operand): Consider ict
model.

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