diff options
author | Javier Miranda <miranda@adacore.com> | 2005-06-16 10:42:20 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-06-16 10:42:20 +0200 |
commit | e9437007b8d68b91b2d1ac803f8938c54b6c4188 (patch) | |
tree | 394b0f483b526345d7b13eec1043d26e3b4ee815 /gcc/ada/lib-load.adb | |
parent | d37209bffbef004f2de1040b938ae0d1eeb493aa (diff) | |
download | gcc-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.adb | 37 |
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); |