aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2019-12-12 10:03:26 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-12-12 10:03:26 +0000
commitfbb076f4dab3541351e4b5ffd5a79099873adae0 (patch)
tree979e827d646061542a5db0d5423a336dfc9836f4 /gcc
parent4cdd4a33f42e0b3373bf74564d036a277dfc0dc1 (diff)
downloadgcc-fbb076f4dab3541351e4b5ffd5a79099873adae0.zip
gcc-fbb076f4dab3541351e4b5ffd5a79099873adae0.tar.gz
gcc-fbb076f4dab3541351e4b5ffd5a79099873adae0.tar.bz2
[Ada] Improved handling of circular compilation dependencies
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog7
-rw-r--r--gcc/ada/sem_ch10.adb14
2 files changed, 21 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6396ee6..d14f7e3 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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.
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 16f0807..37518df 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -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