From: Arnaud Charlet Date: Wed, 20 Apr 2016 10:43:03 +0000 (+0200) Subject: [multiple changes] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0f8b3e5ddd23885eb770ad3613401d56258ec5b6;p=gcc.git [multiple changes] 2016-04-20 Ed Schonberg * 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 * a-cfdlli.ads (List): Type is no longer tagged, not needed. Move varsize field at the end for efficiency. From-SVN: r235261 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index dca79d9cddd..185040a55cc 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,15 @@ +2016-04-20 Ed Schonberg + + * 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 + + * a-cfdlli.ads (List): Type is no longer tagged, not needed. Move + varsize field at the end for efficiency. + 2016-04-20 Vincent Celier * gnatcmd.adb: Do not invoke gprls when the invocation of "gnat diff --git a/gcc/ada/a-cfdlli.ads b/gcc/ada/a-cfdlli.ads index 36e1869ebd8..8e17479fc3a 100644 --- a/gcc/ada/a-cfdlli.ads +++ b/gcc/ada/a-cfdlli.ads @@ -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 diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 80e94319adb..6226c8c137a 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -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