[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 20 Nov 2014 10:46:08 +0000 (11:46 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 20 Nov 2014 10:46:08 +0000 (11:46 +0100)
2014-11-20  Eric Botcazou  <ebotcazou@adacore.com>

* inline.adb (Analyze_Inlined_Bodies): Iterate between loading
of the inlined bodies and instantiation of the generic bodies
until no more bodies need to be loaded.

2014-11-20  Vincent Celier  <celier@adacore.com>

* prj.adb, prj.ads, prj-conf.adb: Minor change of procedure name:
Update_Ignore_Missing_With becomes Set_Ignore_Missing_With.

From-SVN: r217831

gcc/ada/ChangeLog
gcc/ada/inline.adb
gcc/ada/prj-conf.adb
gcc/ada/prj.adb
gcc/ada/prj.ads

index 1dee651f977fe7ff389d21b35398209dd3539199..610203b6066b45ee2ff6ee1a85d47528ae42c3eb 100644 (file)
@@ -1,3 +1,14 @@
+2014-11-20  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * inline.adb (Analyze_Inlined_Bodies): Iterate between loading
+       of the inlined bodies and instantiation of the generic bodies
+       until no more bodies need to be loaded.
+
+2014-11-20  Vincent Celier  <celier@adacore.com>
+
+       * prj.adb, prj.ads, prj-conf.adb: Minor change of procedure name:
+       Update_Ignore_Missing_With becomes Set_Ignore_Missing_With.
+
 2014-11-20  Robert Dewar  <dewar@adacore.com>
 
        * exp_ch7.adb, sem_ch5.adb, sem_ch7.adb, sem_util.adb,
index 3bd9b9357e18780d85f3ad8f6d33fac741aac6a5..13d0f918b366f515b53c8a9939d6ca1ff407c0b4 100644 (file)
@@ -774,15 +774,20 @@ package body Inline is
             end if;
 
             J := J + 1;
-         end loop;
 
-         --  The analysis of required bodies may have produced additional
-         --  generic instantiations. To obtain further inlining, we perform
-         --  another round of generic body instantiations. Establishing a
-         --  fully recursive loop between inlining and generic instantiations
-         --  is unlikely to yield more than this one additional pass.
+            if J > Inlined_Bodies.Last then
+
+               --  The analysis of required bodies may have produced additional
+               --  generic instantiations. To obtain further inlining, we need
+               --  to perform another round of generic body instantiations.
+
+               Instantiate_Bodies;
 
-         Instantiate_Bodies;
+               --  Symmetrically, the instantiation of required generic bodies
+               --  may have caused additional bodies to be inlined. To obtain
+               --  further inlining, we keep looping over the inlined bodies.
+            end if;
+         end loop;
 
          --  The list of inlined subprograms is an overestimate, because it
          --  includes inlined functions called from functions that are compiled
index 623cf17060c16fc0d182ae8538fe9c65e2a2d3ae..84c3dd64aae936c86b7076e1716607efaa333e34 100644 (file)
@@ -1630,7 +1630,7 @@ package body Prj.Conf is
 
       --  Start with ignoring missing withed projects
 
-      Update_Ignore_Missing_With (Env.Flags, True);
+      Set_Ignore_Missing_With (Env.Flags, True);
 
       --  Note: If in fact the config file is automatically generated, then
       --  Automatically_Generated will be set to True after invocation of
@@ -1751,7 +1751,7 @@ package body Prj.Conf is
       --  update the project path and try again.
 
       if Main_Project /= No_Project and then Config_Try_Again then
-         Update_Ignore_Missing_With (Env.Flags, False);
+         Set_Ignore_Missing_With (Env.Flags, False);
 
          if Config_File_Path /= null then
             Conf_File_Name := new String'(Config_File_Path.all);
index 8a267cf476fa646e142280293953d01be2c1e797..b696e2a7f485c4e883e5e67e696aae444bbb3875 100644 (file)
@@ -2147,16 +2147,17 @@ package body Prj is
         (Root_Project, Root_Tree, Project_Context'(False, False));
    end For_Project_And_Aggregated_Context;
 
-   --------------------------------
-   -- Update_Ignore_Missing_With --
-   --------------------------------
+   -----------------------------
+   -- Set_Ignore_Missing_With --
+   -----------------------------
 
-   procedure Update_Ignore_Missing_With
-     (Flags : in out Processing_Flags; Value : Boolean)
+   procedure Set_Ignore_Missing_With
+     (Flags : in out Processing_Flags;
+      Value : Boolean)
    is
    begin
       Flags.Ignore_Missing_With := Value;
-   end Update_Ignore_Missing_With;
+   end Set_Ignore_Missing_With;
 
 --  Package initialization for Prj
 
index 4ba3fac3bcaffd38101ec4c5877fa09338a7701b..6266a0ad012a6b483a2c5855e5593d89f39beffa 100644 (file)
@@ -1893,9 +1893,10 @@ package Prj is
    --       * user project also includes a "with" that can only be resolved
    --         once we have found the gnatls
 
-   procedure Update_Ignore_Missing_With
-     (Flags : in out Processing_Flags; Value : Boolean);
-   --  Update the value of component Ignore_Missing_With in Flags with Value
+   procedure Set_Ignore_Missing_With
+     (Flags : in out Processing_Flags;
+      Value : Boolean);
+   --  Set the value of component Ignore_Missing_With in Flags to Value
 
    Gprbuild_Flags   : constant Processing_Flags;
    Gprinstall_Flags : constant Processing_Flags;