diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-03 15:32:19 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-03 15:32:19 +0000 |
commit | e0521a36726eeeabf7bf46626f1b9a27a27fe373 (patch) | |
tree | b913840c88dfad71cc2715a06794206e2889a7a3 /gcc/ada/par-prag.adb | |
parent | 05c3e0e9708795d88a1f0b2f7e653f5bd16dc17c (diff) | |
download | gcc-e0521a36726eeeabf7bf46626f1b9a27a27fe373.tar.gz |
* s-atacco.ads, a-direio.adb: Protect use of 'Constrained by warnings
on/off, since this is an obsolescent feature, for which we now generate
a warning.
* sem_attr.adb (Analyze_Attribute, case Constrained): Issue warning if
warning mode is set and obsolescent usage of this attribute occurs.
(Resolve_Access, case 'Access): Note that GNAT uses the context type to
disambiguate overloaded prefixes, in accordance with AI-235. GNAT code
predates, and partly motivates, the adoption of the AI.
Implement new Ada 2005 attribute Mod
* exp_attr.adb (Expand_N_Attribute_Reference): Implement Ada 2005
attribute Mod.
* par-ch4.adb (P_Name): In Ada 2005 mode, recognize new attribute Mod
* snames.h, snames.ads, snames.adb: Add entry for No_Dependence for
pragma restrictions.
New entry for Ada 2005 attribute Mod.
* par-prag.adb:
Add recognition of new pragma Restrictions No_Dependence
Recognize restriction No_Obsolescent_Features at parse time
* bcheck.adb: Add circuitry for checking for consistency of
No_Dependence restrictions.
* lib-writ.ads, lib-writ.adb: Output new R lines for No_Dependence
restrictions.
* restrict.ads, restrict.adb: Add subprograms to deal with
No_Dependence restrictions.
* rtsfind.adb: Check that implicit with's do not violate No_Dependence
restrictions.
* sem_ch3.adb, sem_ch11.adb, sem_ch13.adb, lib-xref.adb,
sem_attr.adb: Add check for new restriction No_Obsolescent_Features
* scn.ads, prj-err.ads, prj-err.adb, ali-util.adb, gprep.adb: Add new
dummy parameter to scng instantiation.
Needed for new restriction No_Obsolescent_Features
* scn.adb: (Obsolescent_Check): New procedure
Needed for new restriction No_Obsolescent_Features
* scng.ads, scng.adb: Always allow wide characters in Ada 2005 mode, as
specified by AI-285, needed for implementation of AI-388 (adding greek
pi to Ada.Numerics).
Add new generic formal to scng, needed for new restriction
No_Obsolescent_Features.
* s-rident.ads: Add new restriction No_Obsolescent_Features.
* ali.ads, ali.adb: Adjustments for reading new No_Dependence
restrictions lines.
(Scan_ALI): When finding an unexpected character on an R line, raise
exception Bad_R_Line, instead of calling Fatal_Error, so that, when
Ignore_Errors is True, default restrictions are set and scanning of the
ALI file continues with the next line. Also, when Bad_R_Line is raised
and Ignore_Errors is True, skip to the end of le line.
* sem_ch10.adb: Check that explicit with's do not violate
No_Dependence restrictions.
(Install_Withed_Unit): Add code to implement AI-377 and diagnose
illegal context clauses containing child units of instance.
* sem_prag.adb: Processing and checking for new No_Dependence
restrictions.
(Analyze_Pragma, case Psect_Object): Call Check_Arg_Is_External_Name to
analyze and check the External argument.
* a-numeri.ads: Add greek letter pi as alternative spelling of Pi
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92829 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/par-prag.adb')
-rw-r--r-- | gcc/ada/par-prag.adb | 86 |
1 files changed, 79 insertions, 7 deletions
diff --git a/gcc/ada/par-prag.adb b/gcc/ada/par-prag.adb index c07c39b7882..d22c5243cee 100644 --- a/gcc/ada/par-prag.adb +++ b/gcc/ada/par-prag.adb @@ -32,6 +32,8 @@ with Fname.UF; use Fname.UF; with Osint; use Osint; +with Rident; use Rident; +with Restrict; use Restrict; with Stringt; use Stringt; with Stylesw; use Stylesw; with Uintp; use Uintp; @@ -41,6 +43,7 @@ separate (Par) function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is Pragma_Name : constant Name_Id := Chars (Pragma_Node); + Prag_Id : constant Pragma_Id := Get_Pragma_Id (Pragma_Name); Pragma_Sloc : constant Source_Ptr := Sloc (Pragma_Node); Arg_Count : Nat; Arg_Node : Node_Id; @@ -83,6 +86,14 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is -- Same as Check_Optional_Identifier, except that the name is required -- to be present and to match the given Id value. + procedure Process_Restrictions_Or_Restriction_Warnings; + -- Common processing for Restrictions and Restriction_Warnings pragmas. + -- This routine only processes the case of No_Obsolescent_Features, + -- which is the only restriction that has syntactic effects. No general + -- error checking is done, since this will be done in Sem_Prag. The + -- other case processed is pragma Restrictions No_Dependence, since + -- otherwise this is done too late. + ---------- -- Arg1 -- ---------- @@ -196,9 +207,40 @@ function Prag (Pragma_Node : Node_Id; Semi : Source_Ptr) return Node_Id is end if; end Check_Required_Identifier; - ---------- - -- Prag -- - ---------- + -------------------------------------------------- + -- Process_Restrictions_Or_Restriction_Warnings -- + -------------------------------------------------- + + procedure Process_Restrictions_Or_Restriction_Warnings is + Arg : Node_Id; + Id : Name_Id; + Expr : Node_Id; + + begin + Arg := Arg1; + while Present (Arg) loop + Id := Chars (Arg); + Expr := Expression (Arg); + + if Id = No_Name + and then Nkind (Expr) = N_Identifier + and then Get_Restriction_Id (Chars (Expr)) = No_Obsolescent_Features + then + Set_Restriction (No_Obsolescent_Features, Pragma_Node); + Restriction_Warnings (No_Obsolescent_Features) := + Prag_Id = Pragma_Restriction_Warnings; + + elsif Id = Name_No_Dependence then + Set_Restriction_No_Dependence + (Unit => Expr, + Warn => Prag_Id = Pragma_Restriction_Warnings); + end if; + + Next (Arg); + end loop; + end Process_Restrictions_Or_Restriction_Warnings; + +-- Start if processing for Prag begin Error_Msg_Name_1 := Pragma_Name; @@ -207,7 +249,7 @@ begin -- it is a semantic error, not a syntactic one (we have already checked -- the syntax for the unrecognized pragma as required by (RM 2.8(11)). - if not Is_Pragma_Name (Chars (Pragma_Node)) then + if Prag_Id = Unknown_Pragma then return Pragma_Node; end if; @@ -234,7 +276,7 @@ begin -- Remaining processing is pragma dependent - case Get_Pragma_Id (Pragma_Name) is + case Prag_Id is ------------ -- Ada_83 -- @@ -369,6 +411,38 @@ begin List_Pragmas.Increment_Last; List_Pragmas.Table (List_Pragmas.Last) := (Page, Semi); + ------------------ + -- Restrictions -- + ------------------ + + -- pragma Restrictions (RESTRICTION {, RESTRICTION}); + + -- RESTRICTION ::= + -- restriction_IDENTIFIER + -- | restriction_parameter_IDENTIFIER => EXPRESSION + + -- We process the case of No_Obsolescent_Features, since this has + -- a syntactic effect that we need to detect at parse time (the use + -- of replacement characters such as colon for pound sign). + + when Pragma_Restrictions => + Process_Restrictions_Or_Restriction_Warnings; + + -------------------------- + -- Restriction_Warnings -- + -------------------------- + + -- pragma Restriction_Warnings (RESTRICTION {, RESTRICTION}); + + -- RESTRICTION ::= + -- restriction_IDENTIFIER + -- | restriction_parameter_IDENTIFIER => EXPRESSION + + -- See above comment for pragma Restrictions + + when Pragma_Restriction_Warnings => + Process_Restrictions_Or_Restriction_Warnings; + ---------------------------------------------------------- -- Source_File_Name and Source_File_Name_Project (GNAT) -- ---------------------------------------------------------- @@ -1003,8 +1077,6 @@ begin Pragma_Queuing_Policy | Pragma_Remote_Call_Interface | Pragma_Remote_Types | - Pragma_Restrictions | - Pragma_Restriction_Warnings | Pragma_Restricted_Run_Time | Pragma_Ravenscar | Pragma_Reviewable | |