aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib-load.adb
diff options
context:
space:
mode:
authorJavier Miranda <miranda@adacore.com>2005-06-16 10:42:20 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2005-06-16 10:42:20 +0200
commite9437007b8d68b91b2d1ac803f8938c54b6c4188 (patch)
tree394b0f483b526345d7b13eec1043d26e3b4ee815 /gcc/ada/lib-load.adb
parentd37209bffbef004f2de1040b938ae0d1eeb493aa (diff)
downloadgcc-e9437007b8d68b91b2d1ac803f8938c54b6c4188.zip
gcc-e9437007b8d68b91b2d1ac803f8938c54b6c4188.tar.gz
gcc-e9437007b8d68b91b2d1ac803f8938c54b6c4188.tar.bz2
lib-load.ads, [...] (Load_Unit): Addition of a new parameter that indicates if...
2005-06-14 Javier Miranda <miranda@adacore.com> Jose Ruiz <ruiz@adacore.com> Robert Dewar <dewar@adacore.com> Ed Schonberg <schonberg@adacore.com> * lib-load.ads, lib-load.adb (Load_Unit): Addition of a new parameter that indicates if we are parsing a compilation unit found in a limited-with clause. It is use to avoid the circularity check. * par.ads, par.adb (Par): Addition of a new parameter to indicate if we are parsing a compilation unit found in a limited-with clause. This is use to avoid the circularity check. * par-load.adb (Load): Indicate Lib.Load_Unit if we are loading the unit as a consequence of parsing a limited-with clause. This is used to avoid the circularity check. * sem_ch10.adb: Suppress Ada 2005 unit warning if -gnatwY used (Analyze_Context): Limited-with clauses are now allowed in more compilation units. (Analyze_Subunit_Context, Check_Parent): Protect the frontend againts previously reported critical errors in context clauses (Install_Limited_Withed_Unit): Code cleanup plus static detection of two further errors: renamed subprograms and renamed packages are not allowed in limited with clauses. (Install_Siblings): Do not install private_with_clauses on the package declaration for a non-private child unit. (Re_Install_Parents): When a parent of the subunit is reinstalled, reset visibility of child units properly. (Install_Withed_Unit): When a child unit appears in a with_clause of its parent, it is immediately visible. From-SVN: r101045
Diffstat (limited to 'gcc/ada/lib-load.adb')
-rw-r--r--gcc/ada/lib-load.adb37
1 files changed, 27 insertions, 10 deletions
diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb
index 59879f0..16d610a 100644
--- a/gcc/ada/lib-load.adb
+++ b/gcc/ada/lib-load.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2004 Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2005 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- --
@@ -38,6 +38,7 @@ with Osint; use Osint;
with Osint.C; use Osint.C;
with Output; use Output;
with Par;
+with Restrict; use Restrict;
with Scn; use Scn;
with Sinfo; use Sinfo;
with Sinput; use Sinput;
@@ -236,12 +237,13 @@ package body Lib.Load is
---------------
function Load_Unit
- (Load_Name : Unit_Name_Type;
- Required : Boolean;
- Error_Node : Node_Id;
- Subunit : Boolean;
- Corr_Body : Unit_Number_Type := No_Unit;
- Renamings : Boolean := False) return Unit_Number_Type
+ (Load_Name : Unit_Name_Type;
+ Required : Boolean;
+ Error_Node : Node_Id;
+ Subunit : Boolean;
+ Corr_Body : Unit_Number_Type := No_Unit;
+ Renamings : Boolean := False;
+ From_Limited_With : Boolean := False) return Unit_Number_Type
is
Calling_Unit : Unit_Number_Type;
Uname_Actual : Unit_Name_Type;
@@ -487,7 +489,7 @@ package body Lib.Load is
or else Acts_As_Spec (Units.Table (Unum).Cunit))
and then (Nkind (Error_Node) /= N_With_Clause
or else not Limited_Present (Error_Node))
-
+ and then not From_Limited_With
then
if Debug_Flag_L then
Write_Str (" circular dependency encountered");
@@ -561,7 +563,8 @@ package body Lib.Load is
Multiple_Unit_Index := Get_Unit_Index (Uname_Actual);
Units.Table (Unum).Munit_Index := Multiple_Unit_Index;
Initialize_Scanner (Unum, Source_Index (Unum));
- Discard_List (Par (Configuration_Pragmas => False));
+ Discard_List (Par (Configuration_Pragmas => False,
+ From_Limited_With => From_Limited_With));
Multiple_Unit_Index := Save_Index;
Set_Loading (Unum, False);
end;
@@ -606,8 +609,22 @@ package body Lib.Load is
-- Generate message if unit required
if Required and then Present (Error_Node) then
-
if Is_Predefined_File_Name (Fname) then
+
+ -- This is a predefined library unit which is not present
+ -- in the run time. If a predefined unit is not available
+ -- it may very likely be the case that there is also pragma
+ -- Restriction forbidding its usage. This is typically the
+ -- case when building a configurable run time, where the
+ -- usage of certain run-time units units is restricted by
+ -- means of both the corresponding pragma Restriction (such
+ -- as No_Calendar), and by not including the unit. Hence,
+ -- we check whether this predefined unit is forbidden, so
+ -- that the message about the restriction violation is
+ -- generated, if needed.
+
+ Check_Restricted_Unit (Load_Name, Error_Node);
+
Error_Msg_Name_1 := Uname_Actual;
Error_Msg
("% is not a predefined library unit", Load_Msg_Sloc);