+2019-07-23 Yannick Moy <moy@adacore.com>
+
+ * exp_ch7.adb (Create_Finalizer): Force finalizer not to be
+ Ghost enabled.
+ * exp_dbug.adb (Get_External_Name): Explain special case of
+ Ghost finalizer.
+
2019-07-22 Eric Botcazou <ebotcazou@adacore.com>
* repinfo.adb (List_Entities): Also list compiled-generated
Analyze (Fin_Body, Suppress => All_Checks);
end if;
+
+ -- Never consider that the finalizer procedure is enabled Ghost, even
+ -- when the corresponding unit is Ghost, as this would lead to an
+ -- an external name with a ___ghost_ prefix that the binder cannot
+ -- generate, as it has no knowledge of the Ghost status of units.
+
+ Set_Is_Checked_Ghost_Entity (Fin_Id, False);
end Create_Finalizer;
--------------------------
-- names produced for Ghost entities, while "__ghost_" can appear in
-- names of entities inside a child/local package called "Ghost".
+ -- The compiler-generated finalizer for an enabled Ghost unit is treated
+ -- specially, as its name must be known to the binder, which has no
+ -- knowledge of Ghost status. In that case, the finalizer is not marked
+ -- as Ghost so that no prefix is added. Note that the special ___ghost_
+ -- prefix is retained when the Ghost unit is ignored, which still allows
+ -- inspecting the final executable for the presence of an ignored Ghost
+ -- finalizer procedure.
+
if Is_Ghost_Entity (E)
and then not Is_Compilation_Unit (E)
and then (Name_Len < 9
+2019-07-23 Yannick Moy <moy@adacore.com>
+
+ * gnat.dg/ghost6.adb, gnat.dg/ghost6_pkg.ads: New testcase.
+
2019-07-22 Sylvia Taylor <sylvia.taylor@arm.com>
* gcc.target/aarch64/simd/ssra.c: New test.
--- /dev/null
+-- { dg-do link }
+-- { dg-options "-gnata -g" }
+
+with Ghost6_Pkg;
+
+procedure Ghost6 is
+ X : Ghost6_Pkg.T with Ghost;
+begin
+ null;
+end Ghost6;
--- /dev/null
+with Ada.Finalization;
+
+package Ghost6_Pkg with
+ Ghost
+is
+ type T is new Ada.Finalization.Controlled with null record;
+end Ghost6_Pkg;