[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 20 Feb 2015 09:53:22 +0000 (10:53 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 20 Feb 2015 09:53:22 +0000 (10:53 +0100)
2015-02-20  Eric Botcazou  <ebotcazou@adacore.com>

* inline.adb (Expand_Inlined_Call): Skip again calls to subprogram
renamings.
* exp_ch6.adb (Expand_Call): Use back-end inlining
instead of expansion for simple subprogram renamings.

2015-02-20  Robert Dewar  <dewar@adacore.com>

* exp_util.adb: Minor reformatting.

From-SVN: r220844

gcc/ada/ChangeLog
gcc/ada/exp_ch6.adb
gcc/ada/exp_util.adb
gcc/ada/inline.adb

index 72d2a655f3cacf7fc53d8123ef3d2dbc68d747b2..e50d195412429a4433e4aeb8c6636199f8ec16d3 100644 (file)
@@ -1,3 +1,14 @@
+2015-02-20  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * inline.adb (Expand_Inlined_Call): Skip again calls to subprogram
+       renamings.
+       * exp_ch6.adb (Expand_Call): Use back-end inlining
+       instead of expansion for simple subprogram renamings.
+
+2015-02-20  Robert Dewar  <dewar@adacore.com>
+
+       * exp_util.adb: Minor reformatting.
+
 2015-02-20  Vincent Celier  <celier@adacore.com>
 
        * switch-c.adb (Scan_Front_End_Switches): Do not fail when --RTS=
index 870e5f8b1311d060d5f68b1b9f1c9d40b891d036..8b2278f2bab89bef65edf39684e7ec24bfc85f47 100644 (file)
@@ -3778,12 +3778,17 @@ package body Exp_Ch6 is
            or else Nkind (Unit_Declaration_Node (Subp)) /=
                                                  N_Subprogram_Declaration
            or else No (Body_To_Inline (Unit_Declaration_Node (Subp)))
+           or else Nkind (Body_To_Inline (Unit_Declaration_Node (Subp))) in
+                                                                      N_Entity
          then
             Add_Inlined_Body (Subp, Call_Node);
 
          --  Front end expansion of simple functions returning unconstrained
-         --  types (see Check_And_Split_Unconstrained_Function) and simple
-         --  renamings inlined by the front end (see Build_Renamed_Body).
+         --  types (see Check_And_Split_Unconstrained_Function). Note that the
+         --  case of a simple renaming (Body_To_Inline in N_Entity above, see
+         --  also Build_Renamed_Body) cannot be expanded here because this may
+         --  give rise to order-of-elaboration issues for the types of the
+         --  parameters of the subprogram, if any.
 
          else
             Expand_Inlined_Call (Call_Node, Subp, Orig_Subp);
index ef463c28e8df5b6db1dc8ed7387af4a09364d27b..aa835adf6320153d96a49e7c90eeffea13faa31f 100644 (file)
@@ -7315,8 +7315,9 @@ package body Exp_Util is
         (Loc         : Source_Ptr;
          Id          : Character;
          Related_Nod : Node_Id := Empty) return Entity_Id;
-      --  Create an external symbol of the form xxx_FIRST/_LAST if Related_Id
-      --  is present, otherwise it generates an internal temporary.
+      --  Create an external symbol of the form xxx_FIRST/_LAST if Related_Nod
+      --  is present (xxx is taken from the Chars field of Related_Nod),
+      --  otherwise it generates an internal temporary.
 
       ---------------------
       -- Build_Temporary --
index 74b39710a1d5aa238d0cc9cecf66fb91920318b0..9a60befa0bf969102bd9a89ebfa7dce16f3cddff 100644 (file)
@@ -2694,12 +2694,11 @@ package body Inline is
          return;
 
       --  Skip inlining if this is not a true inlining since the attribute
-      --  Body_To_Inline is also set for renamings (see sinfo.ads)
+      --  Body_To_Inline is also set for renamings (see sinfo.ads). For a
+      --  true inlining, Orig_Bod has code rather than being an entity.
 
       elsif Nkind (Orig_Bod) in N_Entity then
-         if not Has_Pragma_Inline (Subp) then
-            return;
-         end if;
+         return;
 
       --  Skip inlining if the function returns an unconstrained type using
       --  an extended return statement since this part of the new inlining