[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 20 Apr 2016 10:43:03 +0000 (12:43 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 20 Apr 2016 10:43:03 +0000 (12:43 +0200)
2016-04-20  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Analyze_Selected_Component): A reference to the
current instance of a task type is legal if the prefix is an
expression of that task type and the selector is an entry or
entry family.

2016-04-20  Arnaud Charlet  <charlet@adacore.com>

* a-cfdlli.ads (List): Type is no longer tagged, not needed. Move
varsize field at the end for efficiency.

From-SVN: r235261

gcc/ada/ChangeLog
gcc/ada/a-cfdlli.ads
gcc/ada/sem_ch4.adb

index dca79d9cdddb56673c832f224897576974e72753..185040a55cc32afcbc49ac3e6dc784ea6c26df18 100644 (file)
@@ -1,3 +1,15 @@
+2016-04-20  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch4.adb (Analyze_Selected_Component): A reference to the
+       current instance of a task type is legal if the prefix is an
+       expression of that task type and the selector is an entry or
+       entry family.
+
+2016-04-20  Arnaud Charlet  <charlet@adacore.com>
+
+       * a-cfdlli.ads (List): Type is no longer tagged, not needed. Move
+       varsize field at the end for efficiency.
+
 2016-04-20  Vincent Celier  <celier@adacore.com>
 
        * gnatcmd.adb: Do not invoke gprls when the invocation of "gnat
index 36e1869ebd825158ad01fca06bbd617aebba9c47..8e17479fc3ab9df76bb4d89914cfd0c210610cb1 100644 (file)
@@ -353,12 +353,12 @@ private
    type Node_Array is array (Count_Type range <>) of Node_Type;
    function "=" (L, R : Node_Array) return Boolean is abstract;
 
-   type List (Capacity : Count_Type) is tagged record
-      Nodes  : Node_Array (1 .. Capacity) := (others => <>);
+   type List (Capacity : Count_Type) is record
       Free   : Count_Type'Base := -1;
       Length : Count_Type := 0;
       First  : Count_Type := 0;
       Last   : Count_Type := 0;
+      Nodes  : Node_Array (1 .. Capacity) := (others => <>);
    end record;
 
    type Cursor is record
index 80e94319adb84e016abd5418156b379342ffe438..6226c8c137acf9bb7283f6940ccaddb416f28e5a 100644 (file)
@@ -4109,7 +4109,7 @@ package body Sem_Ch4 is
       --  indexed component rather than a function call.
 
       function Has_Dereference (Nod : Node_Id) return Boolean;
-      --  Check whether prefix includes a dereference at any level
+      --  Check whether prefix includes a dereference at any level.
 
       --------------------------------
       -- Find_Component_In_Instance --
@@ -4689,17 +4689,27 @@ package body Sem_Ch4 is
          --  reach an internal entity of another synchronized object).
          --  This is legal if prefix is an access to such type and there is
          --  a dereference, or is a component with a dereferenced prefix.
+         --  It is also legal if the prefix is a component of a task type,
+         --  and the selector is one of the task operations.
 
          if In_Scope
            and then not Is_Entity_Name (Name)
            and then not Has_Dereference (Name)
          then
-            Error_Msg_NE
-              ("invalid reference to internal operation of some object of "
-               & "type &", N, Type_To_Use);
-            Set_Entity (Sel, Any_Id);
-            Set_Etype  (Sel, Any_Type);
-            return;
+            if Is_Task_Type (Prefix_Type)
+              and then Present (Entity (Sel))
+              and then Ekind_In (Entity (Sel), E_Entry, E_Entry_Family)
+            then
+               null;
+
+            else
+               Error_Msg_NE
+                 ("invalid reference to internal operation of some object of "
+                  & "type &", N, Type_To_Use);
+               Set_Entity (Sel, Any_Id);
+               Set_Etype  (Sel, Any_Type);
+               return;
+            end if;
          end if;
 
          --  If there is no visible entity with the given name or none of the