aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib.adb
diff options
context:
space:
mode:
authorGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-22 17:43:43 -0300
committerGiuliano Belinassi <giuliano.belinassi@usp.br>2020-08-22 17:43:43 -0300
commita926878ddbd5a98b272c22171ce58663fc04c3e0 (patch)
tree86af256e5d9a9c06263c00adc90e5fe348008c43 /gcc/ada/lib.adb
parent542730f087133690b47e036dfd43eb0db8a650ce (diff)
parent07cbaed8ba7d1b6e4ab3a9f44175502a4e1ecdb1 (diff)
downloadgcc-devel/autopar_devel.zip
gcc-devel/autopar_devel.tar.gz
gcc-devel/autopar_devel.tar.bz2
Merge branch 'autopar_rebase2' into autopar_develdevel/autopar_devel
Quickly commit changes in the rebase branch.
Diffstat (limited to 'gcc/ada/lib.adb')
-rw-r--r--gcc/ada/lib.adb92
1 files changed, 36 insertions, 56 deletions
diff --git a/gcc/ada/lib.adb b/gcc/ada/lib.adb
index d04f0a4..806f939 100644
--- a/gcc/ada/lib.adb
+++ b/gcc/ada/lib.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2019, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2020, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -43,7 +43,6 @@ with Sinfo; use Sinfo;
with Sinput; use Sinput;
with Stand; use Stand;
with Stringt; use Stringt;
-with Tree_IO; use Tree_IO;
with Uname; use Uname;
with Widechar; use Widechar;
@@ -363,6 +362,12 @@ package body Lib is
-- Step 2: Check subunits. If a subunit is instantiated, follow the
-- instantiation chain rather than the stub chain.
+ -- Note that we must handle the case where the subunit exists in the
+ -- same body as the main unit (which may happen when Naming gets
+ -- manually specified within a project file or through tools like
+ -- gprname). Otherwise, we will have an infinite loop jumping around
+ -- the same file.
+
Unit1 := Unit (Cunit (Unum1));
Unit2 := Unit (Cunit (Unum2));
Inst1 := Instantiation (Sind1);
@@ -385,21 +390,35 @@ package body Lib is
Length_Of_Name (Unit_Name (Unum2))
then
Sloc2 := Sloc (Corresponding_Stub (Unit2));
- Unum2 := Get_Source_Unit (Sloc2);
- goto Continue;
+ if Unum2 /= Get_Source_Unit (Sloc2) then
+ Unum2 := Get_Source_Unit (Sloc2);
+ goto Continue;
+ else
+ null; -- Unum2 already designates the correct unit
+ end if;
else
Sloc1 := Sloc (Corresponding_Stub (Unit1));
- Unum1 := Get_Source_Unit (Sloc1);
- goto Continue;
+
+ if Unum1 /= Get_Source_Unit (Sloc1) then
+ Unum1 := Get_Source_Unit (Sloc1);
+ goto Continue;
+ else
+ null; -- Unum1 already designates the correct unit
+ end if;
end if;
-- Sloc1 in subunit, Sloc2 not
else
Sloc1 := Sloc (Corresponding_Stub (Unit1));
- Unum1 := Get_Source_Unit (Sloc1);
- goto Continue;
+
+ if Unum1 /= Get_Source_Unit (Sloc1) then
+ Unum1 := Get_Source_Unit (Sloc1);
+ goto Continue;
+ else
+ null; -- Unum1 already designates the correct unit
+ end if;
end if;
-- Sloc2 in subunit, Sloc1 not
@@ -409,8 +428,13 @@ package body Lib is
and then Inst2 = No_Location
then
Sloc2 := Sloc (Corresponding_Stub (Unit2));
- Unum2 := Get_Source_Unit (Sloc2);
- goto Continue;
+
+ if Unum2 /= Get_Source_Unit (Sloc2) then
+ Unum2 := Get_Source_Unit (Sloc2);
+ goto Continue;
+ else
+ null; -- Unum2 already designates the correct unit
+ end if;
end if;
-- Step 3: Check instances. The two locations may yield a common
@@ -1254,50 +1278,6 @@ package body Lib is
TSN := TSN + 1;
end Synchronize_Serial_Number;
- ---------------
- -- Tree_Read --
- ---------------
-
- procedure Tree_Read is
- N : Nat;
- S : String_Ptr;
-
- begin
- Units.Tree_Read;
-
- -- Read Compilation_Switches table. First release the memory occupied
- -- by the previously loaded switches.
-
- for J in Compilation_Switches.First .. Compilation_Switches.Last loop
- Free (Compilation_Switches.Table (J));
- end loop;
-
- Tree_Read_Int (N);
- Compilation_Switches.Set_Last (N);
-
- for J in 1 .. N loop
- Tree_Read_Str (S);
- Compilation_Switches.Table (J) := S;
- end loop;
- end Tree_Read;
-
- ----------------
- -- Tree_Write --
- ----------------
-
- procedure Tree_Write is
- begin
- Units.Tree_Write;
-
- -- Write Compilation_Switches table
-
- Tree_Write_Int (Compilation_Switches.Last);
-
- for J in 1 .. Compilation_Switches.Last loop
- Tree_Write_Str (Compilation_Switches.Table (J));
- end loop;
- end Tree_Write;
-
--------------------
-- Unit_Name_Hash --
--------------------
@@ -1380,7 +1360,7 @@ package body Lib is
and then (Nkind (Context_Item) /= N_With_Clause
or else Limited_Present (Context_Item))
loop
- Context_Item := Next (Context_Item);
+ Next (Context_Item);
end loop;
if Present (Context_Item) then
@@ -1404,7 +1384,7 @@ package body Lib is
Write_Eol;
end if;
- Context_Item := Next (Context_Item);
+ Next (Context_Item);
end loop;
Outdent;