Building the limited view of a package does not perform a semantic analysis of the package. Nevertheless the limited-with clause must carry the entity of the unit, so that warnings on unused with_clauses can be properly supported.
No short reproducer available. Tested on x86_64-pc-linux-gnu, committed on trunk 2012-12-05 Ed Schonberg <schonb...@adacore.com> * sem_ch10.adb (Build_Limited_Views): Even though the unit is not analyzed, place its entity on the name in the with clause, so that warnings on unused with-clause are properly supported for limited withs.
Index: sem_ch10.adb =================================================================== --- sem_ch10.adb (revision 194188) +++ sem_ch10.adb (working copy) @@ -5716,6 +5716,17 @@ raise Program_Error; end case; + -- The limited unit is not analyzed but the with clause must be + -- minimally decorated so that checks on unused with clause also work + -- with limited with clauses. + + if Is_Entity_Name (Name (N)) then + Set_Entity (Name (N), P); + + elsif Nkind (Name (N)) = N_Selected_Component then + Set_Entity (Selector_Name (Name (N)), P); + end if; + -- Check if the chain is already built Spec := Specification (Unit (Library_Unit (N))); Index: sem_ch3.adb =================================================================== --- sem_ch3.adb (revision 194190) +++ sem_ch3.adb (working copy) @@ -6512,23 +6512,27 @@ then Append_Elmt (Derived_Type, Private_Dependents (Parent_Type)); + -- Check for unusual case where a type completed by a private + -- derivation occurs within a package nested in a child unit, and + -- the parent is declared in an ancestor. + if Is_Child_Unit (Scope (Current_Scope)) and then Is_Completion and then In_Private_Part (Current_Scope) and then Scope (Parent_Type) /= Current_Scope + + -- Note that if the parent has a completion in the private part, + -- (which is itself a derivation from some other private type) + -- it is that completion that is visible, there is no full view + -- available, and no special processing is needed. + and then Present (Full_View (Parent_Type)) then - -- This is the unusual case where a type completed by a private - -- derivation occurs within a package nested in a child unit, and - -- the parent is declared in an ancestor. In this case, the full - -- view of the parent type will become visible in the body of - -- the enclosing child, and only then will the current type be - -- possibly non-private. We build a underlying full view that - -- will be installed when the enclosing child body is compiled. - -- Note that if the parent has a completion in the private part, - -- (which is itself a derivation from some other private type) - -- it is that completion that is visible, there is no full view - -- view available, and no special processing is needed. + -- In this case, the full view of the parent type will become + -- visible in the body of the enclosing child, and only then will + -- the current type be possibly non-private. We build an + -- underlying full view that will be installed when the enclosing + -- child body is compiled. Full_Der := Make_Defining_Identifier