[Ada] Improved handling of circular compilation dependencies
authorSteve Baird <baird@adacore.com>
Thu, 12 Dec 2019 10:03:26 +0000 (10:03 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 12 Dec 2019 10:03:26 +0000 (10:03 +0000)
2019-12-12  Steve Baird  <baird@adacore.com>

gcc/ada/

* sem_ch10.adb (Install_With_Clause): Check for the case of a
circular dependency involving a predefined (or GNAT-defined)
unit and handle that case by generating an appropropriate error
message.

From-SVN: r279299

gcc/ada/ChangeLog
gcc/ada/sem_ch10.adb

index 6396ee6a5c8f2f98989e09e12c08d91ceeb60cfa..d14f7e3709a8850a1951b3a3e8ed35d26f964d1e 100644 (file)
@@ -1,3 +1,10 @@
+2019-12-12  Steve Baird  <baird@adacore.com>
+
+       * sem_ch10.adb (Install_With_Clause): Check for the case of a
+       circular dependency involving a predefined (or GNAT-defined)
+       unit and handle that case by generating an appropropriate error
+       message.
+
 2019-12-12  Gary Dismukes  <dismukes@adacore.com>
 
        * sem_ch4.adb, sem_res.adb: Minor reformatting.
index 16f0807fc865cd6b055450ea2ee184309c23d5f5..37518df84d6100a9b14cbb150dd51df07adf7acc 100644 (file)
@@ -5336,6 +5336,20 @@ package body Sem_Ch10 is
             Error_Msg_N
               ("instantiation depends on itself", Name (With_Clause));
 
+         elsif not Analyzed (Uname)
+           and then Is_Internal_Unit (Current_Sem_Unit)
+           and then not Is_Visible_Lib_Unit (Uname)
+           and then No (Scope (Uname))
+         then
+            if Is_Predefined_Unit (Current_Sem_Unit) then
+               Error_Msg_N
+                 ("predefined unit depends on itself", Name (With_Clause));
+            else
+               Error_Msg_N
+                 ("GNAT-defined unit depends on itself", Name (With_Clause));
+            end if;
+            return;
+
          elsif not Is_Visible_Lib_Unit (Uname) then
 
             --  Abandon processing in case of previous errors