Due to the installation order of packages within a context clause it is
possible to create circularities within the Prev_Use_Clause clain. This patch
corrects this issue by identifying this case through the use of an extra check.

Tested on x86_64-pc-linux-gnu, committed on trunk

2017-09-29  Justin Squirek  <squi...@adacore.com>

        * sem_ch8.adb (Analyze_Use_Package): Add sanity check to avoid
        circularities in the use-clause chain.

Index: sem_ch8.adb
===================================================================
--- sem_ch8.adb (revision 253285)
+++ sem_ch8.adb (working copy)
@@ -3782,9 +3782,10 @@
       --  before setting its previous use clause.
 
       if Ekind (Pack) = E_Package
-         and then Present (Current_Use_Clause (Pack))
-         and then Current_Use_Clause (Pack) /= N
-         and then No (Prev_Use_Clause (N))
+        and then Present (Current_Use_Clause (Pack))
+        and then Current_Use_Clause (Pack) /= N
+        and then No (Prev_Use_Clause (N))
+        and then Prev_Use_Clause (Current_Use_Clause (Pack)) /= N
       then
          Set_Prev_Use_Clause (N, Current_Use_Clause (Pack));
       end if;

Reply via email to