aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib-load.adb
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada/lib-load.adb')
-rw-r--r--gcc/ada/lib-load.adb20
1 files changed, 18 insertions, 2 deletions
diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb
index 0ac729e..be4c537 100644
--- a/gcc/ada/lib-load.adb
+++ b/gcc/ada/lib-load.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2012, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -406,9 +406,25 @@ package body Lib.Load is
New_Child
(Load_Name, Get_Unit_Name (Name (Unit (Cunit (Unump)))));
+ -- If the load is for a with_clause, for visibility purposes both
+ -- the renamed entity and renaming one must be available in the
+ -- current unit: the renamed one in order to retrieve the child
+ -- unit, and the original one because it may be used as a prefix
+ -- in the body of the current unit. We add an explicit with_clause
+ -- for the original parent so that the renaming declaration is
+ -- properly loaded and analyzed.
+
+ if Present (With_Node) then
+ Insert_After (With_Node,
+ Make_With_Clause (Sloc (With_Node),
+ Name => Copy_Separate_Tree (Prefix (Name (With_Node)))));
+ end if;
+
-- Save the renaming entity, to establish its visibility when
-- installing the context. The implicit with is on this entity,
- -- not on the package it renames.
+ -- not on the package it renames. This is somewhat redundant given
+ -- the with_clause just created, but it simplifies subsequent
+ -- expansion of the current with_clause. Optimizable ???
if Nkind (Error_Node) = N_With_Clause
and then Nkind (Name (Error_Node)) = N_Selected_Component