[Ada] Elaboration order v4.0 and generic instantiations

Programming / Compilers / GCC - pmderodat [138bc75d-0d04-0410-961f-82ee72b054a4] - 9 July 2019 07:55 EDT

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


- 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(-)

Upstream: gcc.gnu.org

  • Share