summaryrefslogtreecommitdiff
path: root/gcc/ada/par-prag.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-03 15:32:19 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-01-03 15:32:19 +0000
commite0521a36726eeeabf7bf46626f1b9a27a27fe373 (patch)
treeb913840c88dfad71cc2715a06794206e2889a7a3 /gcc/ada/par-prag.adb
parent05c3e0e9708795d88a1f0b2f7e653f5bd16dc17c (diff)
downloadgcc-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.adb86
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 |