[Ada] Compiler hangs on evaluation of use-clause within package context

Pierre-Marie de Rodat derodat@adacore.com
Fri Sep 29 13:24:00 GMT 2017


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  <squirek@adacore.com>

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

-------------- next part --------------
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;


More information about the Gcc-patches mailing list