]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2014-07-18 Robert Dewar <dewar@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jul 2014 10:01:26 +0000 (10:01 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 18 Jul 2014 10:01:26 +0000 (10:01 +0000)
* repinfo.ads: Add documentation on handling of back annotation
for dynamic case.

2014-07-18  Ed Schonberg  <schonberg@adacore.com>

* sinfo.ads, sinfo.adb (Incomplete_View): New semantic attribute
of full type declaration, denotes previous declaration for
incomplete view of the type.
* sem_ch3.adb (Analyze_Full_Type_Declaration): Set Incomplete_View
of declaration if one is present.
(Replace_Type): When constructing the signature of an inherited
operation, handle properly the case where the operation has a
formal whose type is an incomplete view.
* sem_util.adb (Collect_Primitive_Operations): Handle properly
the case of an operation declared after an incomplete declaration
for a type T and before the full declaration of T.

2014-07-18  Pascal Obry  <obry@adacore.com>

* i-cstrea.ads: Add documentation for set_wide_text_mode.

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

gcc/ada/ChangeLog
gcc/ada/i-cstrea.ads
gcc/ada/sem_ch3.adb
gcc/ada/sem_util.adb
gcc/ada/sinfo.adb
gcc/ada/sinfo.ads

index fc5a3bede2ffed51b6030b720e3c904cb5fdfa88..f136cc7337088d89cc591a6a54231d31f6263d82 100644 (file)
@@ -1,3 +1,26 @@
+2014-07-18  Robert Dewar  <dewar@adacore.com>
+
+       * repinfo.ads: Add documentation on handling of back annotation
+       for dynamic case.
+
+2014-07-18  Ed Schonberg  <schonberg@adacore.com>
+
+       * sinfo.ads, sinfo.adb (Incomplete_View): New semantic attribute
+       of full type declaration, denotes previous declaration for
+       incomplete view of the type.
+       * sem_ch3.adb (Analyze_Full_Type_Declaration): Set Incomplete_View
+       of declaration if one is present.
+       (Replace_Type): When constructing the signature of an inherited
+       operation, handle properly the case where the operation has a
+       formal whose type is an incomplete view.
+       * sem_util.adb (Collect_Primitive_Operations): Handle properly
+       the case of an operation declared after an incomplete declaration
+       for a type T and before the full declaration of T.
+
+2014-07-18  Pascal Obry  <obry@adacore.com>
+
+       * i-cstrea.ads: Add documentation for set_wide_text_mode.
+
 2014-07-18  Robert Dewar  <dewar@adacore.com>
 
        * a-witeio.adb: Minor code reorganization.
index 020701ec62c4f99ad6f3c65e00662d7ebb762dad..67ca62f6e953c7df87e6a7f8383ea6b2339871f9 100644 (file)
@@ -221,8 +221,6 @@ package Interfaces.C_Streams is
    -- Control of Text/Binary Mode --
    ---------------------------------
 
-   --  Is the above section title good enough, given the new addition???
-
    --  If text_translation_required is true, then the following functions may
    --  be used to dynamically switch a file from binary to text mode or vice
    --  versa. These functions have no effect if text_translation_required is
@@ -231,7 +229,11 @@ package Interfaces.C_Streams is
    procedure set_binary_mode (handle : int);
    procedure set_text_mode   (handle : int);
 
-   --  The following needs documentation ???
+   --  set_wide_text_mode is as set_text_mode but switches the translation to
+   --  16-bits wide-character instead of 8-bits character. Again this routine
+   --  has not effect if text_translation_required is false. On Windows this
+   --  is used to have proper 16-bits wide string output on the console for
+   --  example.
 
    procedure set_wide_text_mode (handle : int);
 
index e3bf564d62fa7e064c329ba0993485c914a0224a..b18d66891a506566c6042661c964b3ce31ad2eb6 100644 (file)
@@ -2464,6 +2464,8 @@ package body Sem_Ch3 is
       Prev := Find_Type_Name (N);
 
       --  The full view, if present, now points to the current type
+      --  If there is an incomplete partial view, set a link to it, to
+      --  simplify the retrieval of primitive operations of the type.
 
       --  Ada 2005 (AI-50217): If the type was previously decorated when
       --  imported through a LIMITED WITH clause, it appears as incomplete
@@ -2472,6 +2474,7 @@ package body Sem_Ch3 is
       if Ekind (Prev) = E_Incomplete_Type and then Present (Full_View (Prev))
       then
          T := Full_View (Prev);
+         Set_Incomplete_View (N, Parent (Prev));
       else
          T := Prev;
       end if;
@@ -13537,6 +13540,7 @@ package body Sem_Ch3 is
       ------------------
 
       procedure Replace_Type (Id, New_Id : Entity_Id) is
+         Id_Type  : constant Entity_Id := Etype (Id);
          Acc_Type : Entity_Id;
          Par      : constant Node_Id := Parent (Derived_Type);
 
@@ -13547,9 +13551,9 @@ package body Sem_Ch3 is
          --  be out of the proper scope for Gigi, so we insert a reference to
          --  it after the derivation.
 
-         if Ekind (Etype (Id)) = E_Anonymous_Access_Type then
+         if Ekind (Id_Type) = E_Anonymous_Access_Type then
             declare
-               Desig_Typ : Entity_Id := Designated_Type (Etype (Id));
+               Desig_Typ : Entity_Id := Designated_Type (Id_Type);
 
             begin
                if Ekind (Desig_Typ) = E_Record_Type_With_Private
@@ -13567,7 +13571,7 @@ package body Sem_Ch3 is
                  or else (Is_Interface (Desig_Typ)
                            and then not Is_Class_Wide_Type (Desig_Typ))
                then
-                  Acc_Type := New_Copy (Etype (Id));
+                  Acc_Type := New_Copy (Id_Type);
                   Set_Etype (Acc_Type, Acc_Type);
                   Set_Scope (Acc_Type, New_Subp);
 
@@ -13599,16 +13603,23 @@ package body Sem_Ch3 is
                   Build_Itype_Reference (Acc_Type, Parent (Derived_Type));
 
                else
-                  Set_Etype (New_Id, Etype (Id));
+                  Set_Etype (New_Id, Id_Type);
                end if;
             end;
 
-         elsif Base_Type (Etype (Id)) = Base_Type (Parent_Type)
+         --  In Ada2012, a formal may have an incomplete type but the type
+         --  derivation that inherits the primitive follows the full view.
+
+         elsif Base_Type (Id_Type) = Base_Type (Parent_Type)
            or else
-             (Ekind (Etype (Id)) = E_Record_Type_With_Private
-               and then Present (Full_View (Etype (Id)))
+             (Ekind (Id_Type) = E_Record_Type_With_Private
+               and then Present (Full_View (Id_Type))
                and then
-                 Base_Type (Full_View (Etype (Id))) = Base_Type (Parent_Type))
+                 Base_Type (Full_View (Id_Type)) = Base_Type (Parent_Type))
+           or else
+             (Ada_Version >= Ada_2012
+                and then Ekind (Id_Type) = E_Incomplete_Type
+                and then Full_View (Id_Type) = Parent_Type)
          then
             --  Constraint checks on formals are generated during expansion,
             --  based on the signature of the original subprogram. The bounds
index 06f281591d88d14ed84cbae52fda7b5e4c3b01f7..d6b46c38de75d612452ce1a932395702e000a4e7 100644 (file)
@@ -3400,7 +3400,14 @@ package body Sem_Util is
             Etyp := Designated_Type (Etyp);
          end if;
 
-         return Base_Type (Etyp) = B_Type;
+         --  In Ada 2012 a primitive operation may have a formal of an
+         --  incomplete view of the parent type.
+
+         return Base_Type (Etyp) = B_Type
+           or else
+             (Ada_Version >= Ada_2012
+               and then Ekind (Etyp) = E_Incomplete_Type
+               and then Full_View (Etyp) = B_Type);
       end Match;
 
    --  Start of processing for Collect_Primitive_Operations
@@ -3454,6 +3461,16 @@ package body Sem_Util is
            and then In_Private_Part (B_Scope)
          then
             Id := Next_Entity (T);
+
+         --  In Ada 2012, If the type has an incomplete partial view, there
+         --  may be primitive operations declared before the full view, so
+         --  we need to start scanning from the incomplete view.
+
+         elsif Nkind (Parent (B_Type)) = N_Full_Type_Declaration
+           and then Present (Incomplete_View (Parent (B_Type)))
+         then
+            Id := Defining_Entity (Next (Incomplete_View (Parent (B_Type))));
+
          else
             Id := Next_Entity (B_Type);
          end if;
index d2a19e24887ce4812cfc9f36d6a1e017786fad6d..ec7a23f1125c720522d91fb5d3e929708263c25e 100644 (file)
@@ -1713,6 +1713,14 @@ package body Sinfo is
       return Flag11 (N);
    end Includes_Infinities;
 
+   function Incomplete_View
+     (N : Node_Id) return Node_Id is
+   begin
+      pragma Assert (False
+        or else NT (N).Nkind = N_Full_Type_Declaration);
+      return Node2 (N);
+   end Incomplete_View;
+
    function Inherited_Discriminant
       (N : Node_Id) return Boolean is
    begin
@@ -4879,6 +4887,14 @@ package body Sinfo is
       Set_Flag11 (N, Val);
    end Set_Includes_Infinities;
 
+   procedure Set_Incomplete_View
+     (N : Node_Id; Val : Node_Id) is
+   begin
+      pragma Assert (False
+        or else NT (N).Nkind = N_Full_Type_Declaration);
+      Set_Node2 (N, Val); --  semantic field, no Parent set
+   end Set_Incomplete_View;
+
    procedure Set_Inherited_Discriminant
       (N : Node_Id; Val : Boolean := True) is
    begin
index 31ebb5949a39bb7f3025fff7a22cf93468a714df..d06bb4baad2ccca90ecf2cdfea0c088225de8d8c 100644 (file)
@@ -1450,6 +1450,13 @@ package Sinfo is
    --    range is given by the programmer, even if that range is identical to
    --    the range for Float.
 
+   --  Incomplete_View (Node2-Sem)
+   --    Present in full type declarations that are completions of incomplete
+   --    type declarations. Denotes the corresponding incomplete type
+   --    declaration. Used to simplify the retrieval of primitive operations
+   --    that may be declared between the partial and the full view of an
+   --    untagged type.
+
    --  Inherited_Discriminant (Flag13-Sem)
    --    This flag is present in N_Component_Association nodes. It indicates
    --    that a given component association in an extension aggregate is the
@@ -2488,6 +2495,7 @@ package Sinfo is
       --  N_Full_Type_Declaration
       --  Sloc points to TYPE
       --  Defining_Identifier (Node1)
+      --  Incomplete_View (Node2-Sem)
       --  Discriminant_Specifications (List4) (set to No_List if none)
       --  Type_Definition (Node3)
       --  Discr_Check_Funcs_Built (Flag11-Sem)
@@ -9120,6 +9128,9 @@ package Sinfo is
    function Includes_Infinities
      (N : Node_Id) return Boolean;    -- Flag11
 
+   function Incomplete_View
+     (N : Node_Id) return Node_Id;    -- Node2
+
    function Inherited_Discriminant
      (N : Node_Id) return Boolean;    -- Flag13
 
@@ -10128,6 +10139,9 @@ package Sinfo is
    procedure Set_Includes_Infinities
      (N : Node_Id; Val : Boolean := True);    -- Flag11
 
+   procedure Set_Incomplete_View
+     (N : Node_Id;  Val : Node_Id);           -- Node2
+
    procedure Set_Inherited_Discriminant
      (N : Node_Id; Val : Boolean := True);    -- Flag13
 
@@ -10801,7 +10815,7 @@ package Sinfo is
 
      N_Full_Type_Declaration =>
        (1 => True,    --  Defining_Identifier (Node1)
-        2 => False,   --  unused
+        2 => False,   --  Incomplete_View (Node2-Sem)
         3 => True,    --  Type_Definition (Node3)
         4 => True,    --  Discriminant_Specifications (List4)
         5 => False),  --  unused
@@ -12543,6 +12557,7 @@ package Sinfo is
    pragma Inline (Includes_Infinities);
    pragma Inline (Import_Interface_Present);
    pragma Inline (In_Present);
+   pragma Inline (Incomplete_View);
    pragma Inline (Inherited_Discriminant);
    pragma Inline (Instance_Spec);
    pragma Inline (Intval);
@@ -12873,6 +12888,7 @@ package Sinfo is
    pragma Inline (Set_Import_Interface_Present);
    pragma Inline (Set_In_Present);
    pragma Inline (Set_Includes_Infinities);
+   pragma Inline (Set_Incomplete_View);
    pragma Inline (Set_Inherited_Discriminant);
    pragma Inline (Set_Instance_Spec);
    pragma Inline (Set_Interface_List);