diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2016-04-20 12:43:03 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2016-04-20 12:43:03 +0200 |
commit | 0f8b3e5ddd23885eb770ad3613401d56258ec5b6 (patch) | |
tree | c3b71f0239a85b252e0c0c376e7a97d11dafa6a9 /gcc | |
parent | 0c61772a122cc888d0aafffbaa35d4c95cc7abcc (diff) | |
download | gcc-0f8b3e5ddd23885eb770ad3613401d56258ec5b6.zip gcc-0f8b3e5ddd23885eb770ad3613401d56258ec5b6.tar.gz gcc-0f8b3e5ddd23885eb770ad3613401d56258ec5b6.tar.bz2 |
[multiple changes]
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/ada/a-cfdlli.ads | 4 | ||||
-rw-r--r-- | gcc/ada/sem_ch4.adb | 24 |
3 files changed, 31 insertions, 9 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index dca79d9..185040a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/a-cfdlli.ads b/gcc/ada/a-cfdlli.ads index 36e1869..8e17479 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 80e9431..6226c8c 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 |