[Ada] Forced elaboration order in Elaboration order v4.0

Programming / Compilers / GCC - pmderodat [138bc75d-0d04-0410-961f-82ee72b054a4] - 3 July 2019 08:16 EDT

This patch refactors the forced elaboration order functionality, reintegrates it in Binde, and impelements it in Bindo.


-- Source --


-- server.ads

package Server is end Server;

-- client.ads

with Server;

package Client is end Client;

-- main.adb

with Client;

procedure Main is begin null; end Main;

-- duplicate_1.txt

server (spec) client (spec) server (spec)

-- error_unit_1.txt

no such unit client (spec)

-- error_unit_2.txt

no such unit client (spec)

-- error_unit_3.txt

no such unit -- comment client (spec)

-- error_unit_4.txt

no such unit -- comment

client (spec)

-- error_unit_5.txt

no such unit (body) client (spec)

-- error_unit_6.txt

no such unit (body) client (spec)

-- error_unit_7.txt

no such unit (body) -- comment client (spec)

-- error_unit_8.txt

no such unit (body)-- comment client (spec)

-- error_unit_9.txt

no such unit-- comment client (spec)

-- no_unit_1.txt

-- no_unit_2.txt

-- no_unit_3.txt

-- comment

-- no_unit_4.txt

-- no_unit_5.txt

-- no_unit_6.txt

-- comment

-- no_unit_7.txt

-- no_unit_8.txt

-- comment-- comment

-- ok_unit_1.txt

server (spec) client (spec)

-- ok_unit_2.txt

server (spec) client (spec)

-- ok_unit_3.txt

server (spec) client (spec)

-- ok_unit_4.txt

server (spec) -- comment client (spec)

-- ok_unit_5.txt

server (spec) client (spec)

-- ok_unit_6.txt

server (spec) client (spec) -- comment

-- ok_unit_7.txt

server (spec) client (spec) -- comment

-- ok_unit_8.txt

-- comment-- comment server (spec)

-- comment-- comment

client (spec) -- comment

-- ok_unit_9.txt

server (spec)-- comment client (spec)


-- Compilation and output --

$ gnatmake -q main.adb $ gnatbind -fno_unit_1.txt main.ali $ gnatbind -fno_unit_2.txt main.ali $ gnatbind -fno_unit_3.txt main.ali $ gnatbind -fno_unit_4.txt main.ali $ gnatbind -fno_unit_5.txt main.ali $ gnatbind -fno_unit_6.txt main.ali $ gnatbind -fno_unit_7.txt main.ali $ gnatbind -fno_unit_8.txt main.ali $ gnatbind -ferror_unit_1.txt main.ali $ gnatbind -ferror_unit_2.txt main.ali $ gnatbind -ferror_unit_3.txt main.ali $ gnatbind -ferror_unit_4.txt main.ali $ gnatbind -ferror_unit_5.txt main.ali $ gnatbind -ferror_unit_6.txt main.ali $ gnatbind -ferror_unit_7.txt main.ali $ gnatbind -ferror_unit_8.txt main.ali $ gnatbind -ferror_unit_9.txt main.ali $ gnatbind -fduplicate_1.txt main.ali $ gnatbind -fok_unit_1.txt main.ali $ gnatbind -fok_unit_2.txt main.ali $ gnatbind -fok_unit_3.txt main.ali $ gnatbind -fok_unit_4.txt main.ali $ gnatbind -fok_unit_5.txt main.ali $ gnatbind -fok_unit_6.txt main.ali $ gnatbind -fok_unit_7.txt main.ali $ gnatbind -fok_unit_8.txt main.ali $ gnatbind -fok_unit_9.txt main.ali "no such unit": not present; ignored "no such unit": not present; ignored "no such unit": not present; ignored "no such unit": not present; ignored "no such unit%b": not present; ignored "no such unit%b": not present; ignored "no such unit%b": not present; ignored "no such unit%b": not present; ignored "no such unit": not present; ignored server (spec) <-- client (spec) error: duplicate_1.txt:3: duplicate unit name "server (spec)" from line 1 server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec) server (spec) <-- client (spec)

2019-07-03 Hristian Kirtchev

gcc/ada/

- binde.adb: Remove with clause for System.OS_Lib. (Force_Elab_Order): Refactor the majority of the code in Butil. Use the new forced units iterator to obtain unit names.
- bindo-builders.adb: Add with and use clauses for Binderr, Butil, Opt, Output, Types, GNAT, and GNAT.Dynamic_HTables. Add a hash table which maps units to line number in the forced elaboration order file. (Add_Unit): New routine. (Build_Library_Graph): Create forced edges between pairs of units listed in the forced elaboration order file. (Create_Forced_Edge, Create_Forced_Edges, Destroy_Line_Number, Duplicate_Unit_Error, Hash_Unit, Internal_Unit_Info, Is_Duplicate_Unit, Missing_Unit_Info): New routines.
- bindo-graphs.adb (Is_Internal_Unit, Is_Predefined_Unit): Refactor some of the behavior to Bindo-Units.
- bindo-graphs.ads: Enable the enumeration literal for forced edges.
- bindo-units.adb, bindo-units.ads (Is_Internal_Unit, Is_Predefined_Unit): New routines.
- butil.adb: Add with and use clauses for Opt, GNAT, and System.OS_Lib. Add with clause for Unchecked_Deallocation. (Has_Next, Iterate_Forced_Units, Next, Parse_Next_Unit_Name, Read_Forced_Elab_Order_File): New routines.
- butil.ads: Add with and use clauses for Types. Add new iterator over the units listed in the forced elaboration order file. (Has_Next, Iterate_Forced_Units, Next): New routine.
- namet.adb, namet.ads (Present): New routine.

877ad320723 [Ada] Forced elaboration order in Elaboration order v4.0
gcc/ada/ChangeLog | 31 +++
gcc/ada/binde.adb | 292 ++++++-------------------
gcc/ada/bindo-builders.adb | 260 ++++++++++++++++++++++
gcc/ada/bindo-graphs.adb | 8 +-
gcc/ada/bindo-graphs.ads | 2 +-
gcc/ada/bindo-units.adb | 26 +++
gcc/ada/bindo-units.ads | 8 +
gcc/ada/butil.adb | 521 +++++++++++++++++++++++++++++++++++++++++++++
gcc/ada/butil.ads | 53 ++++-
gcc/ada/namet.adb | 9 +
gcc/ada/namet.ads | 4 +
11 files changed, 976 insertions(+), 238 deletions(-)

Upstream: gcc.gnu.org


  • Share