In some cases, a node designating a compilation unit may be empty, which was
not considered in the code generating Alfa sections in ALI files. Now corrected.
Tested on x86_64-pc-linux-gnu, committed on trunk
2012-03-30 Yannick Moy <m...@adacore.com>
* lib-xref-alfa.adb (Add_Alfa_File): Take into account possible absence
of compilation unit for unit in Sdep_Table.
--- lib-xref-alfa.adb (revision 185995)
+++ lib-xref-alfa.adb (working copy)
@@ -226,9 +226,15 @@
From := Alfa_Scope_Table.Last + 1;
- Traverse_Compilation_Unit (Cunit (U), Detect_And_Add_Alfa_Scope'Access,
- Inside_Stubs => False);
+ -- Unit U might not have an associated compilation unit, as seen in code
+ -- filling Sdep_Table in Write_ALI.
+ if Present (Cunit (U)) then
+ Traverse_Compilation_Unit (Cunit (U),
+ Inside_Stubs => False);
+ end if;
-- Update scope numbers
@@ -279,9 +285,11 @@
Get_Name_String (Reference_Name (S));
File_Name := new String'(Name_Buffer (1 .. Name_Len));
- -- For subunits, also retrieve the file name of the unit
+ -- For subunits, also retrieve the file name of the unit. Only do so if
+ -- unit U has an associated compilation unit.
- if Present (Cunit (Unit (S)))
+ if Present (Cunit (U))
+ and then Present (Cunit (Unit (S)))
and then Nkind (Unit (Cunit (Unit (S)))) = N_Subunit
Get_Name_String (Reference_Name (Main_Source_File));