Hi, On Wed, 3 Jul 2019, pmdero...@gcc.gnu.org wrote:
> Author: pmderodat > Date: Wed Jul 3 08:14:57 2019 > New Revision: 272976 > > URL: https://gcc.gnu.org/viewcvs?rev=272976&root=gcc&view=rev > Log: > [Ada] ABE checks v3.0, foundations of Elaboration order v4.0 > > ------------------------ > -- Elaboration checks -- > ------------------------ > > The dynamic ABE checks model now emits the same diagnostics as those of the > static ABE checks model. > > The ABE checks mechanism has been redesigned and refactored in the face of > increasing requirements. Most of the functionality can now be toggled, thus > allowing for various combinations of behavior. The combinations are defined > as "initial states" and may be further altered. > > Scenarios and targets have been distinctly separated at the higher level, > instead of directly working with nodes and entitites. Scenarios and targets > now carry a representation which removes the need to constantly recompute > relevant attributes, and offers a common interface for the various processors. > > Most processing has now been refactored into "services" which perform a single > ABE-related function. > > ----------------------- > -- Elaboration order -- > ----------------------- > > A new elaboration order mechanism based on the use of an invocation graph to > provide extra information about the flow of execution at elaboration time has > been introduced. > > The ABE checks mechanism has been altered to encode pieces of the invocation > graph in the associated ALI files of units. > > The new elaboration order mechanism reconstructs the full invocation graph at > bind time, and coupled with the library item graph, determines the elaboration > order of units. > > The new elaboration order mechanism is currently inaccessible. This change (not posted to `gcc-patches' for some reason) has caused a regression in the form of a build failure with the `riscv-linux-gnu' target (and for the record the `x86_64-linux-gnu' build/host running GCC 8.3.0): ali.adb:34:28: warning: use clause for package "GNAT" has no effect ali.adb:35:28: warning: use clause for package "Dynamic_HTables" has no effect ali.adb:155:52: "Bucket_Range_Type" is undefined (more references follow) ali.adb:158:27: "Dynamic_Hash_Tables" is undefined ali.adb:173:30: "Sig_Map" is undefined (more references follow) gnatmake: ".../gcc/ada/ali.adb" compilation error make[3]: *** [../gcc-interface/Makefile:469: gnatmake-re] Error 4 make[3]: Leaving directory '.../gcc/ada/tools' make[2]: *** [Makefile:216: gnattools-cross] Error 2 make[2]: Leaving directory '.../gnattools' make[1]: *** [Makefile:11224: all-gnattools] Error 2 -- that has persisted ever since. I have noticed that the `Bucket_Range_Type' data type has only been added after GCC 8 has branched, so I tried GCC 9 instead, Debian 9.2.1 20190821 specifically, but that still fails: ali.adb:35:28: warning: use clause for package "Dynamic_HTables" has no effect ali.adb:158:27: "Dynamic_Hash_Tables" is undefined ali.adb:173:30: "Sig_Map" is undefined (more references follow) gnatmake: ".../gcc/ada/ali.adb" compilation error ../gcc-interface/Makefile:468: recipe for target 'gnatmake-re' failed -- likely due to r272860, which renamed the `Dynamic_HTable' package to `Dynamic_Hash_Tables' (r272860 is earlier than r272976, but it is only r272976 that has made GNAT proper use `Dynamic_Hash_Tables'; previously only `libgnat' used that package). This means that no released GCC version can be used to build trunk GNAT, which would provide a clean upgrade path, and there is only a narrow window between r272860 and r272975 inclusive that lets one move on to GNAT 10. I find this rather unfortunate. Can you please look into it? Maciej