[multiple changes]

2009-04-08  Ed Schonberg  <schonberg@adacore.com>

	* sem_util.adb (Is_Protected_Self_Reference): Add guard to check for
	presence of entity.

	* usage.adb, gnat_ugn.texi: add info on -gnatyO: overriding indicators

2009-04-08  Vincent Celier  <celier@adacore.com>

	* vms_data.ads: Add VMS equivalent for -gnatyO (OVERRIDING_INDICATORS)

2009-04-08  Thomas Quinot  <quinot@adacore.com>

	* checks.ads: Minor reformatting

2009-04-08  Robert Dewar  <dewar@adacore.com>

	* gnat_rm.texi: Update documentation of pragma Obsolescent
	
	* sem_prag.adb (Analyze_Pragma, case Obsolescent): Allow identifiers to
	be omitted, and allow Entity parameter to be omitted.

From-SVN: r145745
This commit is contained in:
Arnaud Charlet 2009-04-08 16:54:32 +02:00
parent ef7c5692f1
commit ed57136d4a
8 changed files with 88 additions and 47 deletions

View File

@ -1,3 +1,25 @@
2009-04-08 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Is_Protected_Self_Reference): Add guard to check for
presence of entity.
* usage.adb, gnat_ugn.texi: add info on -gnatyO: overriding indicators
2009-04-08 Vincent Celier <celier@adacore.com>
* vms_data.ads: Add VMS equivalent for -gnatyO (OVERRIDING_INDICATORS)
2009-04-08 Thomas Quinot <quinot@adacore.com>
* checks.ads: Minor reformatting
2009-04-08 Robert Dewar <dewar@adacore.com>
* gnat_rm.texi: Update documentation of pragma Obsolescent
* sem_prag.adb (Analyze_Pragma, case Obsolescent): Allow identifiers to
be omitted, and allow Entity parameter to be omitted.
2009-04-08 Thomas Quinot <quinot@adacore.com>
* exp_util.adb: Minor comment fix

View File

@ -32,7 +32,7 @@
-- checks, is to attempt to detect at compilation time that a constraint
-- error will occur. If this is detected a warning or error is issued and the
-- offending expression or statement replaced with a constraint error node.
-- This always occurs whether checks are suppressed or not. Dynamic range
-- This always occurs whether checks are suppressed or not. Dynamic range
-- checks are, of course, not inserted if checks are suppressed.
with Namet; use Namet;
@ -233,9 +233,9 @@ package Checks is
-- First this routine determines if an overflow check is needed by doing
-- an appropriate range check. If a check is not needed, then the call
-- has no effect. If a check is needed then this routine sets the flag
-- Set Do_Overflow_Check in node N to True, unless it can be determined
-- that the check is not needed. The only condition under which this is
-- the case is if there was an identical check earlier on.
-- Do_Overflow_Check in node N to True, unless it can be determined that
-- the check is not needed. The only condition under which this is the
-- case is if there was an identical check earlier on.
procedure Enable_Range_Check (N : Node_Id);
-- Set Do_Range_Check flag in node N True, unless it can be determined
@ -445,7 +445,7 @@ package Checks is
-- Some of the earlier processing for checks results in temporarily setting
-- the Do_Range_Check flag rather than actually generating checks. Now we
-- are moving the generation of such checks into the front end for reasons
-- of efficiency and simplicity (there were difficutlies in handling this
-- of efficiency and simplicity (there were difficulties in handling this
-- in the back end when side effects were present in the expressions being
-- checked).

View File

@ -3463,19 +3463,26 @@ will always generate an invalid value if one exists.
Syntax:
@smallexample @c ada
pragma Obsolescent
[([Entity =>] NAME
[,[Message =>] static_string_EXPRESSION
[,[Version =>] Ada_05]])];
pragma Obsolescent;
pragma Obsolescent (
[Message =>] static_string_EXPRESSION
[,[Version =>] Ada_05]]);
pragma Obsolescent (
[Entity =>] NAME
[,[Message =>] static_string_EXPRESSION
[,[Version =>] Ada_05]] );
@end smallexample
@noindent
This pragma can occur immediately following a declaration of an entity,
including the case of a record component, and usually the Entity name
must match the name of the entity declared by this declaration.
Alternatively, the pragma can immediately follow an
enumeration type declaration, where the entity argument names one of the
enumeration literals.
including the case of a record component. If no Entity argument is present,
then this declaration is the one to which the pragma applies. If an Entity
parameter is present, it must either match the name of the entity in this
declaration, or alternatively, the pragma can immediately follow an enumeration
type declaration, where the Entity argument names one of the enumeration
literals.
This pragma is used to indicate that the named entity
is considered obsolescent and should not be used. Typically this is
@ -3484,13 +3491,12 @@ existing subprograms or other entities. The pragma can be used at an
intermediate stage when the entity is still present, but will be
removed later.
The effect of this pragma is to output a warning message on
a call to a program thus marked that the
subprogram is obsolescent if the appropriate warning option in the
compiler is activated. If the string parameter is present, then a second
warning message is given containing this text.
In addition, a call to such a program is considered a violation of
pragma Restrictions (No_Obsolescent_Features).
The effect of this pragma is to output a warning message on a reference to
an entity thus marked that the subprogram is obsolescent if the appropriate
warning option in the compiler is activated. If the Message parameter is
present, then a second warning message is given containing this text. In
addition, a reference to the eneity is considered to be a violation of pragma
Restrictions (No_Obsolescent_Features).
This pragma can also be used as a program unit pragma for a package,
in which case the entity name is the name of the package, and the
@ -3499,7 +3505,7 @@ obsolescent. In this case a client @code{with}'ing such a package
violates the restriction, and the @code{with} statement is
flagged with warnings if the warning option is set.
If the optional third parameter is present (which must be exactly
If the Version parameter is present (which must be exactly
the identifier Ada_05, no other argument is allowed), then the
indication of obsolescence applies only when compiling in Ada 2005
mode. This is primarily intended for dealing with the situations
@ -3511,15 +3517,12 @@ The following examples show typical uses of this pragma:
@smallexample @c ada
package p is
pragma Obsolescent
(Entity => p, Message => "use pp instead of p");
pragma Obsolescent (p, Message => "use pp instead of p");
end p;
package q is
procedure q2;
pragma Obsolescent
(Entity => q2,
Message => "use q2new instead");
pragma Obsolescent ("use q2new instead");
type R is new integer;
pragma Obsolescent
@ -3530,7 +3533,7 @@ package q is
type M is record
F1 : Integer;
F2 : Integer;
pragma Obsolescent (Entity => F2);
pragma Obsolescent;
F3 : Integer;
end record;
@ -3545,11 +3548,10 @@ end;
@end smallexample
@noindent
In an earlier version of GNAT, the Entity parameter was not required,
and this form is still accepted for compatibility purposes. If the
Entity parameter is omitted, then the pragma applies to the declaration
immediately preceding the pragma (this form cannot be used for the
enumeration literal case).
Note that, as for all pragmas, if you use a pragma argument identifier,
then all subsequent parameters must also use a pragma argument identifier.
So if you specify "Entity =>" for the Entity argument, and a Message
argument is present, it must be preceded by "Message =>".
@node Pragma Optimize_Alignment
@unnumberedsec Pragma Optimize_Alignment

View File

@ -6059,6 +6059,11 @@ of letters, except that if there is a trailing numeric suffix, then
the value of this suffix is used in the ordering (e.g.@: Junk2 comes
before Junk10).
@item ^O^OVERRIDING_INDICATORS^
@emph{Check that overriding subprograms are explicitly marked as such.}
The declaration of a primitive operation of a type extension that overrides
an inherited operation must carry an overriding indicator.
@item ^p^PRAGMA^
@emph{Check pragma casing.}
Pragma names must be written in mixed case, that is, the

View File

@ -9058,10 +9058,16 @@ package body Sem_Prag is
-- Obsolescent --
-----------------
-- pragma Obsolescent [(
-- [Entity => NAME,]
-- [Message => static_string_EXPRESSION
-- [,[Version => Ada_05]] )];
-- pragma Obsolescent;
-- pragma Obsolescent (
-- [Message =>] static_string_EXPRESSION
-- [,[Version =>] Ada_05]]);
-- pragma Obsolescent (
-- [Entity =>] NAME
-- [,[Message =>] static_string_EXPRESSION
-- [,[Version =>] Ada_05]] );
when Pragma_Obsolescent => Obsolescent : declare
Ename : Node_Id;
@ -9186,19 +9192,15 @@ package body Sem_Prag is
-- See if first argument specifies an entity name
if Arg_Count >= 1
and then Chars (Arg1) = Name_Entity
and then
(Chars (Arg1) = Name_Entity
or else
Nkind_In (Get_Pragma_Arg (Arg1), N_Character_Literal,
N_Identifier,
N_Operator_Symbol))
then
Ename := Get_Pragma_Arg (Arg1);
if Nkind (Ename) /= N_Character_Literal
and then
Nkind (Ename) /= N_Identifier
and then
Nkind (Ename) /= N_Operator_Symbol
then
Error_Pragma_Arg ("entity name expected for pragma%", Arg1);
end if;
-- Eliminate first argument, so we can share processing
Arg1 := Arg2;

View File

@ -6411,8 +6411,15 @@ package body Sem_Util is
-- Start of processing for Is_Protected_Self_Reference
begin
-- Verify that prefix is analyzed and has the proper form. Note that
-- the attributes Elab_Spec, Elab_Body, and UET_Address, which also
-- produce the address of an entity, do not analyze their prefix
-- because they denote entities that are not necessarily visible.
-- Neither of them can apply to a protected type.
return Ada_Version >= Ada_05
and then Is_Entity_Name (N)
and then Present (Entity (N))
and then Is_Protected_Type (Entity (N))
and then In_Open_Scopes (Entity (N))
and then not In_Access_Definition (N);

View File

@ -525,6 +525,7 @@ begin
Write_Line (" Mnn check line length <= nn characters");
Write_Line (" N turn off all checks");
Write_Line (" o check subprogram bodies in alphabetical order");
Write_Line (" O check overriding indicators");
Write_Line (" p check pragma casing");
Write_Line (" r check casing for identifier references");
Write_Line (" s check separate subprogram specs present");

View File

@ -2242,6 +2242,8 @@ package VMS_Data is
"-gnaty-n " &
"ORDERED_SUBPROGRAMS " &
"-gnatyo " &
"OVERRIDING_INDICATORS " &
"-gnatyO " &
"NOORDERED_SUBPROGRAMS " &
"-gnaty-o " &
"PRAGMA " &