diff options
author | Steve Baird <baird@adacore.com> | 2019-12-12 10:03:26 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-12-12 10:03:26 +0000 |
commit | fbb076f4dab3541351e4b5ffd5a79099873adae0 (patch) | |
tree | 979e827d646061542a5db0d5423a336dfc9836f4 | |
parent | 4cdd4a33f42e0b3373bf74564d036a277dfc0dc1 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/sem_ch10.adb | 14 |
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 |