aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2021-05-18 14:54:24 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-07 16:23:12 +0000
commit05435609367c0ae1398ac1b4becfae06d217552c (patch)
treeb0f112d482fd0b2c389dbafb6b87245d1037ae65
parentf3ff72939e52a381d28f3c4879f2eaa1d154ff73 (diff)
downloadgcc-05435609367c0ae1398ac1b4becfae06d217552c.zip
gcc-05435609367c0ae1398ac1b4becfae06d217552c.tar.gz
gcc-05435609367c0ae1398ac1b4becfae06d217552c.tar.bz2
[Ada] Simplify handling of Generate_Code flag for compilation units
gcc/ada/ * gnat1drv.adb (Gnat1drv): Remove flagging of main unit and its corresponding spec as requiring code generation; now the flags are set much earlier. * lib-load.adb (Load_Main_Source): Set Generate_Code flag on the main unit source. (Make_Instance_Unit): Copy Generate_Code flag from the main unit to instance units. * lib-writ.adb (Write_ALI): Remove redundant condition; Generate_Code flag is always set for the main unit. * par-load.adb (Load): Set Generate_Code flag on the main unit's corresponding spec, if any.
-rw-r--r--gcc/ada/gnat1drv.adb23
-rw-r--r--gcc/ada/lib-load.adb11
-rw-r--r--gcc/ada/lib-writ.adb2
-rw-r--r--gcc/ada/par-load.adb6
4 files changed, 12 insertions, 30 deletions
diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb
index 22c9311..6f65d74 100644
--- a/gcc/ada/gnat1drv.adb
+++ b/gcc/ada/gnat1drv.adb
@@ -1287,29 +1287,6 @@ begin
Exit_Program (E_Errors);
end if;
- -- Set Generate_Code on main unit and its spec. We do this even if are
- -- not generating code, since Lib-Writ uses this to determine which
- -- units get written in the ali file.
-
- Set_Generate_Code (Main_Unit);
-
- -- If we have a corresponding spec, and it comes from source or it is
- -- not a generated spec for a child subprogram body, then we need object
- -- code for the spec unit as well.
-
- if Nkind (Unit (Main_Unit_Node)) in N_Unit_Body
- and then not Acts_As_Spec (Main_Unit_Node)
- then
- if Nkind (Unit (Main_Unit_Node)) = N_Subprogram_Body
- and then not Comes_From_Source (Library_Unit (Main_Unit_Node))
- then
- null;
- else
- Set_Generate_Code
- (Get_Cunit_Unit_Number (Library_Unit (Main_Unit_Node)));
- end if;
- end if;
-
-- Case of no code required to be generated, exit indicating no error
if Original_Operating_Mode = Check_Syntax then
diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb
index 75b52e2..19afe26 100644
--- a/gcc/ada/lib-load.adb
+++ b/gcc/ada/lib-load.adb
@@ -364,7 +364,7 @@ package body Lib.Load is
Error_Location => No_Location,
Expected_Unit => No_Unit_Name,
Fatal_Error => None,
- Generate_Code => False,
+ Generate_Code => True,
Has_RACW => False,
Filler => False,
Ident_String => Empty,
@@ -964,13 +964,12 @@ package body Lib.Load is
Units.Increment_Last;
if In_Main then
- Units.Table (Units.Last) := Units.Table (Main_Unit);
- Units.Table (Units.Last).Cunit := Library_Unit (N);
- Units.Table (Units.Last).Generate_Code := True;
+ Units.Table (Units.Last) := Units.Table (Main_Unit);
+ Units.Table (Units.Last).Cunit := Library_Unit (N);
Init_Unit_Name (Units.Last, Unit_Name (Main_Unit));
- Units.Table (Main_Unit).Cunit := N;
- Units.Table (Main_Unit).Version := Source_Checksum (Sind);
+ Units.Table (Main_Unit).Cunit := N;
+ Units.Table (Main_Unit).Version := Source_Checksum (Sind);
Init_Unit_Name (Main_Unit,
Get_Body_Name
(Unit_Name (Get_Cunit_Unit_Number (Library_Unit (N)))));
diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb
index 3564f0f..416052c 100644
--- a/gcc/ada/lib-writ.adb
+++ b/gcc/ada/lib-writ.adb
@@ -1253,7 +1253,7 @@ package body Lib.Writ is
-- for which we have generated code
for Unit in Units.First .. Last_Unit loop
- if Units.Table (Unit).Generate_Code or else Unit = Main_Unit then
+ if Units.Table (Unit).Generate_Code then
if not Has_No_Elaboration_Code (Cunit (Unit)) then
Main_Restrictions.Violated (No_Elaboration_Code) := True;
exit;
diff --git a/gcc/ada/par-load.adb b/gcc/ada/par-load.adb
index 39c445e..0773f369 100644
--- a/gcc/ada/par-load.adb
+++ b/gcc/ada/par-load.adb
@@ -265,6 +265,12 @@ begin
-- and this is also where we generate the SCO's for this spec.
if Cur_Unum = Main_Unit then
+
+ -- We generate code for the main unit body, so we need to generate
+ -- code for its spec too.
+
+ Set_Generate_Code (Unum, True);
+
Main_Unit_Entity := Cunit_Entity (Unum);
if Generate_SCO then