2010-09-09 Ben Brosgol <brosgol@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Sep 2010 12:34:06 +0000 (12:34 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Sep 2010 12:34:06 +0000 (12:34 +0000)
* gnat_rm.texi: Minor wordsmithing of section on pragma Ordered.

2010-09-09  Arnaud Charlet  <charlet@adacore.com>

* par-ch2.adb (Scan_Pragma_Argument_Association): In CodePeer mode,
do not generate an error for compatibility with legacy code.
ignored when generating SCIL.
* sem_attr.adb (Resolve_Attribute): Ignore AI-229 in CodePeer mode.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164082 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gnat_rm.texi
gcc/ada/gnat_ugn.texi
gcc/ada/par-ch2.adb
gcc/ada/sem_attr.adb

index 0d2bd8e..2b99056 100644 (file)
@@ -1,3 +1,14 @@
+2010-09-09  Ben Brosgol  <brosgol@adacore.com>
+
+       * gnat_rm.texi: Minor wordsmithing of section on pragma Ordered.
+
+2010-09-09  Arnaud Charlet  <charlet@adacore.com>
+
+       * par-ch2.adb (Scan_Pragma_Argument_Association): In CodePeer mode,
+       do not generate an error for compatibility with legacy code.
+       ignored when generating SCIL.
+       * sem_attr.adb (Resolve_Attribute): Ignore AI-229 in CodePeer mode.
+
 2010-09-09  Thomas Quinot  <quinot@adacore.com>
 
        * s-strxdr.adb, gnat_rm.texi, s-stratt-xdr.adb, s-stratt.ads: Rename
index 0905f1c..09fcb14 100644 (file)
@@ -3731,6 +3731,7 @@ pragma appears at the start of the file.
 @node Pragma Ordered
 @unnumberedsec Pragma Ordered
 @findex Ordered
+@findex pragma @code{Ordered}
 @noindent
 Syntax:
 
@@ -3740,84 +3741,88 @@ pragma Ordered (enumeration_first_subtype_LOCAL_NAME);
 
 @noindent
 Most enumeration types are from a conceptual point of view unordered.
-For example, if we write:
+For example, consider:
 
 @smallexample @c ada
 type Color is (Red, Blue, Green, Yellow);
 @end smallexample
 
 @noindent
-Then Ada semantics says that Blue > Red, and Green > Blue, but really
-these relations make no sense, the enumeration type merely specifies
-a set of possible colors, and the order is unimportant.
+By Ada semantics @code{Blue > Red} and @code{Green > Blue},
+but really these relations make no sense; the enumeration type merely
+specifies a set of possible colors, and the order is unimportant.
 
-@noindent
-For such unordered enumeration types, it is generally a good idea if
-clients avoid comparisons (other than equality or inequality), or
-explicit ranges. For example, if we have code buried in some client
-that says:
+For unordered enumeration types, it is generally a good idea if
+clients avoid comparisons (other than equality or inequality) and
+explicit ranges. (A @emph{client} is a unit where the type is referenced,
+other than the unit where the type is declared, its body, and its subunits.)
+For example, if code buried in some client says:
 
 @smallexample @c ada
-if Current_Color < Yellow ....
-if Current_Color in Blue .. Green
+if Current_Color < Yellow then ...
+if Current_Color in Blue .. Green then ...
 @end smallexample
 
 @noindent
-Then the code is relying on the order, which is undesriable in this case.
+then the client code is relying on the order, which is undesirable.
 It makes the code hard to read and creates maintenance difficulties if
-entries have to be added to the enumeration type. In cases like this,
-we prefer if the code in the client lists the possibilities, or an
-appropriate subtype is declared in the parent package, e.g. for the
-above case, we might have in the parent package:
+entries have to be added to the enumeration type. Instead,
+the code in the client should list the possibilities, or an
+appropriate subtype should be declared in the unit that declares
+the original enumeration type. E.g., the following subtype could
+be declared along with the type @code{Color}:
 
 @smallexample @c ada
 subtype RBG is Color range Red .. Green;
 @end smallexample
 
 @noindent
-and then in the client we could write:
+and then the client could write:
 
 @smallexample @c ada
-if Current_Color in RBG ....
-if Current_Color = Blue or Current_Color = Green ...
+if Current_Color in RBG then ...
+if Current_Color = Blue or Current_Color = Green then ...
 @end smallexample
 
 @noindent
-
-However some enumeration types are legitimately ordered from a conceptual
-point of view. For example, if you have:
+However, some enumeration types are legitimately ordered from a conceptual
+point of view. For example, if you declare:
 
 @smallexample @c ada
 type Day is (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
 @end smallexample
 
 @noindent
-then the ordering imposed by the language is reasonable, and it
-is fine for clients to depend on this, writing for example:
+then the ordering imposed by the language is reasonable, and 
+clients can depend on it, writing for example:
 
 @smallexample @c ada
-if D in Mon .. Fri then
-if D < Wed
+if D in Mon .. Fri then ...
+if D < Wed then ...
 @end smallexample
 
 @noindent
-pragma @option{Order} is provided to mark enumeration types that
-are conceptually ordered, warning the reader that clients may depend
-on the ordering. We provide a pragma to mark enumerations as Ordered
-rather than one to mark them as Unordered, since in our experience,
-the great majority of enumeration types are conceptually Unordered.
+The pragma @option{Ordered} is provided to mark enumeration types that
+are conceptually ordered, alerting the reader that clients may depend
+on the ordering. GNAT provides a pragma to mark enumerations as ordered
+rather than one to mark them as unordered, since in our experience,
+the great majority of enumeration types are conceptually unordered.
 
-The types Boolean, Character, Wide_Character, and Wide_Wide_Character
-are considered to be ordered types, so there is a pragma Ordered
-present in Standard for these types.
+The types @code{Boolean}, @code{Character}, @code{Wide_Character},
+and @code{Wide_Wide_Character}
+are considered to be ordered types, so each is declared with a
+pragma @code{Ordered} in package @code{Standard}.
 
-Normally pragma Order serves as only documentation and a guide for
-coding standards, but GNAT provides a warning switch -gnatw.u that
+Normally pragma @code{Ordered} serves only as documentation and a guide for
+coding standards, but GNAT provides a warning switch @option{-gnatw.u} that
 requests warnings for inappropriate uses (comparisons and explicit
 subranges) for unordered types. If this switch is used, then any
-enumeration type not marked with pragma Ordered will be considered
+enumeration type not marked with pragma @code{Ordered} will be considered
 as unordered, and will generate warnings for inappropriate uses.
 
+For additional information please refer to the description of the
+@option{-gnatw.u} switch in the @value{EDITION} User's Guide.
+
 @node Pragma Passive
 @unnumberedsec Pragma Passive
 @findex Passive
index ce4f863..6a0a18d 100644 (file)
@@ -5613,12 +5613,13 @@ the effect of @option{-gnatwF}).
 @emph{Activate warnings on unordered enumeration types.}
 @cindex @option{-gnatw.u} (@command{gcc})
 This switch causes enumeration types to be considered as conceptually
-unordered, unless an explicit pragma Order is given for the type. The
-effect is to generate warnings in clients that use explicit comparisons
+unordered, unless an explicit pragma @code{Ordered} is given for the type.
+The effect is to generate warnings in clients that use explicit comparisons
 or subranges, since these constructs both treat objects of the type as
-ordered. A client is defined as a unit that is other than the unit in
-which the type is declared, or its body or subunits. See description
-of pragma Order in the GNAT RM for further details.
+ordered. (A @emph{client} is defined as a unit that is other than the unit in
+which the type is declared, or its body or subunits.) Please refer to
+the description of pragma @code{Ordered} in the
+@cite{@value{EDITION} Reference Manual} for further details.
 
 @item -gnatw.U
 @emph{Deactivate warnings on unordered enumeration types.}
index def8ef5..e0bf09d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2009, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2010, 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- --
@@ -501,11 +501,13 @@ package body Ch2 is
          Id_Present := False;
       end if;
 
-      if Identifier_Seen and not Id_Present then
-         Error_Msg_SC
-           ("|pragma argument identifier required here");
-         Error_Msg_SC
-           ("\since previous argument had identifier (RM 2.8(4))");
+      if Identifier_Seen and not Id_Present and not CodePeer_Mode then
+         --  In CodePeer mode, we do not generate an error for compatibility
+         --  with legacy code, since this error can be safely ignored when
+         --  generating SCIL.
+
+         Error_Msg_SC ("|pragma argument identifier required here");
+         Error_Msg_SC ("\since previous argument had identifier (RM 2.8(4))");
       end if;
 
       if Id_Present then
index c9f4995..3eccf93 100644 (file)
@@ -7930,6 +7930,8 @@ package body Sem_Attr is
                   --  didn't permit the access to be declared in the generic
                   --  spec, whereas the revised rule does (as long as it's not
                   --  a formal type).
+                  --  Note that we relax this check in CodePeer mode for
+                  --  compatibility with legacy code.
 
                   --  There are a couple of subtleties of the test for applying
                   --  the check that are worth noting. First, we only apply it
@@ -7950,6 +7952,7 @@ package body Sem_Attr is
                   --  been caught by the compilation of the generic unit.
 
                   elsif Attr_Id = Attribute_Access
+                    and then not CodePeer_Mode
                     and then not In_Instance
                     and then Present (Enclosing_Generic_Unit (Entity (P)))
                     and then Present (Enclosing_Generic_Body (N))