This patch prevents spurious visibility errors due to use_clauses being ignored when analyzing entities within a generic instance's template.
------------ -- Source -- ------------ -- gnatcoll-json-support-test-test_vectors-integer_vectors-json.ads with GNATCOLL.JSON.Support.Ada.Containers.Vectors; with GNATCOLL.JSON.Support.Test.Test_Vectors.Integer_Vectors; package GNATCOLL.JSON.Support.Test.Test_Vectors.Integer_Vectors.JSON is new GNATCOLL.JSON.Support.Ada.Containers.Vectors (V => GNATCOLL.JSON.Support.Test.Test_Vectors.Integer_Vectors, Create => GNATCOLL.JSON.Create, Get => GNATCOLL.JSON.Get); -- gnatcoll-json-support-ada-containers-vectors.ads with Ada.Containers.Vectors; generic with package V is new Standard.Ada.Containers.Vectors (<>); use V; -- Ignored in instance leaving Element_Type invisible with function Create (Val : Element_Type) return JSON_Value is <>; with function Get (Val : JSON_Value) return Element_Type is <>; package GNATCOLL.JSON.Support.Ada.Containers.Vectors is end; -- ... Additional files required ---------------------------- -- Compilation and output -- ---------------------------- & gnatmake -q gnatcoll-json-support-test-test_vectors-integer_vectors-json.ads cannot generate code for file gnatcoll-atomic.ads (package spec) gnatmake: "gnatcoll-atomic.ads" compilation error Tested on x86_64-pc-linux-gnu, committed on trunk 2017-11-09 Justin Squirek <squi...@adacore.com> * sem_ch8.adb (Analyze_Use_Package): Force installation of use_clauses when processing generic instances.
Index: sem_ch8.adb =================================================================== --- sem_ch8.adb (revision 254563) +++ sem_ch8.adb (working copy) @@ -3821,8 +3821,11 @@ Check_In_Previous_With_Clause (N, Name (N)); end if; - Use_One_Package (N, Name (N)); + -- Force the use_clause when we are in a generic instance because the + -- scope of the package has changed and we must ensure visibility. + Use_One_Package (N, Name (N), Force => In_Instance); + -- Capture the first Ghost package and the first living package if Is_Entity_Name (Name (N)) then