[Ada] Elaboration order v4.0 and generic instantiations
This patch updates the library graph augmentation mechanism of the
elaboration order v4.0 to emulate a particular behavior of the v3.0
scheme involving generic instantiations. If a unit without any
elaboration code instantiates a generic without any elaboration code,
the invocation edge from the instance to the generic body is not
considered for library graph augmentation.
------------
-- Source --
------------
-- gen_pack1.ads
generic
type Element_Type is private;
package Gen_Pack1 is
procedure Read;
end Gen_Pack1;
-- gen_pack1.adb
with Types1;
package body Gen_Pack1 is
procedure Read is null;
end Gen_Pack1;
-- types1.ads
with Gen_Pack1;
package Types1 is
procedure Read;
package Optional_Numbers is new Gen_Pack1 (Positive);
end Types1;
-- main1.adb
with Types1;
procedure Main1 is
begin
Types1.Optional_Numbers.Read;
end Main1;
-----------------
-- Compilation --
-----------------
$ gnatmake -q main1.adb
2019-07-09 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* bindo-augmentors.adb (Visit_Elaboration_Root): Do not start a
DFS from an elaboration root whose corresponding unit lacks
elaboration code. This behavior mimics that of the old
elaboration order mechanism.
* bindo-graphs.adb (Find_All_Cycles_Through_Vertex): Move the
vertex tracing within the functional branches of the routine.
This prevents spurious trace output.
(Has_No_Elaboration_Code): New routine.
(Trace_Cycle, Trace_Edge): Update the various Ids to use the
"standard" trace format.
* bindo-graphs.ads (Has_No_Elaboration_Code): New routine.
* bindo-units.ads, bindo-units.adb (Has_No_Elaboration_Code):
New routine.
From-SVN: r273288