aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2016-04-20 12:43:03 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2016-04-20 12:43:03 +0200
commit0f8b3e5ddd23885eb770ad3613401d56258ec5b6 (patch)
treec3b71f0239a85b252e0c0c376e7a97d11dafa6a9 /gcc
parent0c61772a122cc888d0aafffbaa35d4c95cc7abcc (diff)
downloadgcc-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/ChangeLog12
-rw-r--r--gcc/ada/a-cfdlli.ads4
-rw-r--r--gcc/ada/sem_ch4.adb24
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