Comments
Patch
===================================================================
@@ -5523,7 +5523,9 @@
GNAT features that have been provided in past versions but which
have been superseded (typically by features in the new Ada standard).
For example, @code{pragma Ravenscar} will be flagged since its
-function is replaced by @code{pragma Profile(Ravenscar)}.
+function is replaced by @code{pragma Profile(Ravenscar)}, and
+@code{pragma Interface_Name} will be flagged since its function
+is replaced by @code{pragma Import}.
Note that this warning option functions differently from the
restriction @code{No_Obsolescent_Features} in two respects.
===================================================================
@@ -11095,11 +11095,19 @@
Process_Import_Or_Interface;
-- In Ada 2005, the permission to use Interface (a reserved word)
- -- as a pragma name is considered an obsolescent feature.
+ -- as a pragma name is considered an obsolescent feature, and this
+ -- pragma was already obsolescent in Ada 95.
- if Ada_Version >= Ada_2005 then
+ if Ada_Version >= Ada_95 then
Check_Restriction
(No_Obsolescent_Features, Pragma_Identifier (N));
+
+ if Warn_On_Obsolescent_Feature then
+ Error_Msg_N
+ ("pragma Interface is an obsolescent feature?j?", N);
+ Error_Msg_N
+ ("|use pragma Import instead?j?", N);
+ end if;
end if;
--------------------
@@ -11126,6 +11134,19 @@
Id := Get_Pragma_Arg (Arg1);
Analyze (Id);
+ -- This is obsolete from Ada 95 on, but it is an implementation
+ -- defined pragma, so we do not consider that it violates the
+ -- restriction (No_Obsolescent_Features).
+
+ if Ada_Version >= Ada_95 then
+ if Warn_On_Obsolescent_Feature then
+ Error_Msg_N
+ ("pragma Interface_Name is an obsolescent feature?j?", N);
+ Error_Msg_N
+ ("|use pragma Import instead?j?", N);
+ end if;
+ end if;
+
if not Is_Entity_Name (Id) then
Error_Pragma_Arg
("first argument for pragma% must be entity name", Arg1);
Interface is now flagged as violating restriction No_Obsolescent_Features even in Ada 95 mode. Both Interface and Interface_Name cause warnings to be issued with -gnatwj (but we don't consider that Interface_Name violates the restriction, since Interface_Name is a GNAT defined pragma that is not in the RM, and in particular not in Annex J). The following is compiled with -gnatwj 1. pragma Restrictions (No_Obsolescent_Features); 2. package ObsInter is 3. procedure q; 4. pragma Interface (C, q); 1 3 >>> warning: pragma Interface is an obsolescent feature >>> warning: use pragma Import instead >>> violation of restriction "no_obsolescent_features" at line 1 5. pragma Interface_Name (q, "qroutine"); | >>> warning: pragma Interface_Name is an obsolescent feature >>> warning: use pragma Import instead 6. end; Tested on x86_64-pc-linux-gnu, committed on trunk 2013-01-29 Robert Dewar <dewar@adacore.com> * sem_prag.adb (Analyze_Pragma, case Interface): Consider to be a violation of No_Obsolescent_Features even in Ada 95. Also generates a warning in -gnatwj mode. (Analyze_Pragma, case Interface_Name): Generates a warning in -gnatwj mode. * gnat_ugn.texi: Additional documentation on -gnatwj and pragma Interface[_Name].