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 --
generic type Element_Type is private;
package Gen_Pack1 is procedure Read; end Gen_Pack1;
package body Gen_Pack1 is procedure Read is null; end Gen_Pack1;
package Types1 is procedure Read;
package Optional_Numbers is new Gen_Pack1 (Positive); end Types1;
procedure Main1 is begin Types1.Optional_Numbers.Read; end Main1;
-- Compilation --
$ gnatmake -q main1.adb
2019-07-09 Hristian Kirtchev
- 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.
7389bee5f19 [Ada] Elaboration order v4.0 and generic instantiations
gcc/ada/ChangeLog | 16 ++++++++++++++++
gcc/ada/bindo-augmentors.adb | 11 +++++++++++
gcc/ada/bindo-graphs.adb | 30 +++++++++++++++++++++++-------
gcc/ada/bindo-graphs.ads | 7 +++++++
gcc/ada/bindo-units.adb | 13 +++++++++++++
gcc/ada/bindo-units.ads | 4 ++++
6 files changed, 74 insertions(+), 7 deletions(-)