lib-xref.adb (Output_Refs, [...]): For a derived array type...
authorEd Schonberg <schonberg@adacore.com>
Tue, 29 Jul 2014 14:09:38 +0000 (14:09 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 29 Jul 2014 14:09:38 +0000 (16:09 +0200)
2014-07-29  Ed Schonberg  <schonberg@adacore.com>

* lib-xref.adb (Output_Refs, Check_Type_Reference): For a
derived array type, add information about component type, which
was previously missing in ali file.
* gnat_rm.texi: Add documentation for Atomic_Always_Lock_Free.

From-SVN: r213198

gcc/ada/ChangeLog
gcc/ada/gnat_rm.texi
gcc/ada/lib-xref.adb

index b79abfab635ec578f3d73ebf79b71f084f440fca..71009dc976f01e07e7bf314595b9838e6ec56be7 100644 (file)
@@ -1,3 +1,10 @@
+2014-07-29  Ed Schonberg  <schonberg@adacore.com>
+
+       * lib-xref.adb (Output_Refs, Check_Type_Reference): For a
+       derived array type, add information about component type, which
+       was previously missing in ali file.
+       * gnat_rm.texi: Add documentation for Atomic_Always_Lock_Free.
+
 2014-07-29  Thomas Quinot  <quinot@adacore.com>
 
        * sem_ch3.adb (Constrain_Corresponding_Record): For the case
index b61689696b691d043085b2ec30fb78146963e1ab..c53ed275c9d18d1e93502200aa8316caaebd946b 100644 (file)
@@ -347,9 +347,7 @@ Implementation Defined Attributes
 * Attribute Bit_Position::
 * Attribute Code_Address::
 * Attribute Compiler_Version::
-* Attribute Constant_Indexing::
 * Attribute Default_Bit_Order::
-* Attribute Default_Iterator::
 * Attribute Descriptor_Size::
 * Attribute Elaborated::
 * Attribute Elab_Body::
@@ -370,7 +368,6 @@ Implementation Defined Attributes
 * Attribute Integer_Value::
 * Attribute Invalid_Value::
 * Attribute Iterable::
-* Attribute Iterator_Element::
 * Attribute Large::
 * Attribute Library_Level::
 * Attribute Lock_Free::
@@ -8560,9 +8557,7 @@ consideration, you should minimize the use of these attributes.
 * Attribute Bit_Position::
 * Attribute Code_Address::
 * Attribute Compiler_Version::
-* Attribute Constant_Indexing::
 * Attribute Default_Bit_Order::
-* Attribute Default_Iterator::
 * Attribute Descriptor_Size::
 * Attribute Elaborated::
 * Attribute Elab_Body::
@@ -8582,7 +8577,6 @@ consideration, you should minimize the use of these attributes.
 * Attribute Implicit_Dereference::
 * Attribute Integer_Value::
 * Attribute Invalid_Value::
-* Attribute Iterator_Element::
 * Attribute Iterable::
 * Attribute Large::
 * Attribute Library_Level::
@@ -8697,7 +8691,11 @@ Language Reference Manual}, section 9.12a.
 @unnumberedsec Attribute Atomic_Always_Lock_Free
 @findex Atomic_Always_Lock_Free
 @noindent
-PLEASE ADD DOCUMENTATION HERE???
+
+The prefix of the @code{Atomic_Always_Lock_Free} attribute is a type.
+The result is a Boolean value which is True if the type has discriminants,
+and False otherwise.  The result indicate whether atomic operations are
+supported by the target for the given type.
 
 @node Attribute Bit
 @unnumberedsec Attribute Bit
@@ -8795,12 +8793,6 @@ prefix) yields a static string identifying the version of the compiler
 being used to compile the unit containing the attribute reference. A
 typical result would be something like "@value{EDITION} @value{gnat_version} (20090221)".
 
-@node Attribute Constant_Indexing
-@unnumberedsec Attribute Constant_Indexing
-@findex Constant_Indexing
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
 @node Attribute Default_Bit_Order
 @unnumberedsec Attribute Default_Bit_Order
 @cindex Big endian
@@ -8813,12 +8805,6 @@ as a @code{Pos} value (0 for @code{High_Order_First}, 1 for
 @code{Low_Order_First}).  This is used to construct the definition of
 @code{Default_Bit_Order} in package @code{System}.
 
-@node Attribute Default_Iterator
-@unnumberedsec Attribute Default_Iterator
-@findex Default_Iterator
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
 @node Attribute Descriptor_Size
 @unnumberedsec Attribute Descriptor_Size
 @cindex Descriptor
@@ -9125,12 +9111,6 @@ uninitialized value of the type if pragma Initialize_Scalars is used,
 including the ability to modify the value with the binder -Sxx flag and
 relevant environment variables at run time.
 
-@node Attribute Iterator_Element
-@unnumberedsec Attribute Iterator_Element
-@findex Iterator_Element
-@noindent
-PLEASE ADD DOCUMENTATION HERE???
-
 @node Attribute Iterable
 @unnumberedsec Attribute Iterable
 @findex Iterable
index 95c87ef7194185b01e131a9c5780bca34be3c99c..8cc8e2f6b83b42c3508d9dccb325ee0b720d1bab 100644 (file)
@@ -1893,12 +1893,18 @@ package body Lib.Xref is
 
                procedure Check_Type_Reference
                  (Ent            : Entity_Id;
-                  List_Interface : Boolean);
+                  List_Interface : Boolean;
+                  Is_Component   : Boolean := False);
                --  Find whether there is a meaningful type reference for
                --  Ent, and display it accordingly. If List_Interface is
                --  true, then Ent is a progenitor interface of the current
                --  type entity being listed. In that case list it as is,
-               --  without looking for a type reference for it.
+               --  without looking for a type reference for it. Flag is also
+               --  used for index types of an array type, where the caller
+               --  supplies the intended type reference. Is_Component serves
+               --  the same purpose, to display the component type of a
+               --  derived array type, for which only the parent type has
+               --  ben displayed so far.
 
                procedure Output_Instantiation_Refs (Loc : Source_Ptr);
                --  Recursive procedure to output instantiation references for
@@ -1915,7 +1921,8 @@ package body Lib.Xref is
 
                procedure Check_Type_Reference
                  (Ent            : Entity_Id;
-                  List_Interface : Boolean)
+                  List_Interface : Boolean;
+                  Is_Component   : Boolean := False)
                is
                begin
                   if List_Interface then
@@ -1927,6 +1934,13 @@ package body Lib.Xref is
                      Left  := '<';
                      Right := '>';
 
+                  --  The following is not documented in lib-xref.ads ???
+
+                  elsif Is_Component then
+                     Tref  := Ent;
+                     Left  := '(';
+                     Right := ')';
+
                   else
                      Get_Type_Reference (Ent, Tref, Left, Right);
                   end if;
@@ -2515,8 +2529,21 @@ package body Lib.Xref is
 
                      if Is_Array_Type (XE.Key.Ent) then
                         declare
+                           A_Typ : constant Entity_Id := XE.Key.Ent;
                            Indx : Node_Id;
+
                         begin
+                           --  If this is a derived array type, we have
+                           --  output the parent type, so add the component
+                           --  type now.
+
+                           if Is_Derived_Type (A_Typ) then
+                              Check_Type_Reference
+                                (Component_Type (A_Typ), False, True);
+                           end if;
+
+                           --  Add references to index types.
+
                            Indx := First_Index (XE.Key.Ent);
                            while Present (Indx) loop
                               Check_Type_Reference