From 04e9213da79a04f1f87f1b15ed141a065b3d0185 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Thu, 20 Nov 2014 11:46:08 +0100 Subject: [PATCH] [multiple changes] 2014-11-20 Eric Botcazou * 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 * 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 | 11 +++++++++++ gcc/ada/inline.adb | 21 +++++++++++++-------- gcc/ada/prj-conf.adb | 4 ++-- gcc/ada/prj.adb | 13 +++++++------ gcc/ada/prj.ads | 7 ++++--- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1dee651f977..610203b6066 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,14 @@ +2014-11-20 Eric Botcazou + + * 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 + + * 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 * exp_ch7.adb, sem_ch5.adb, sem_ch7.adb, sem_util.adb, diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index 3bd9b9357e1..13d0f918b36 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -774,16 +774,21 @@ package body Inline is end if; J := J + 1; + + 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; + + -- 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 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. - - Instantiate_Bodies; - -- The list of inlined subprograms is an overestimate, because it -- includes inlined functions called from functions that are compiled -- as part of an inlined package, but are not themselves called. An diff --git a/gcc/ada/prj-conf.adb b/gcc/ada/prj-conf.adb index 623cf17060c..84c3dd64aae 100644 --- a/gcc/ada/prj-conf.adb +++ b/gcc/ada/prj-conf.adb @@ -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); diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb index 8a267cf476f..b696e2a7f48 100644 --- a/gcc/ada/prj.adb +++ b/gcc/ada/prj.adb @@ -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 diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads index 4ba3fac3bca..6266a0ad012 100644 --- a/gcc/ada/prj.ads +++ b/gcc/ada/prj.ads @@ -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;