aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog7
-rw-r--r--gcc/ada/sem_util.adb49
-rw-r--r--gcc/ada/sem_util.ads2
3 files changed, 51 insertions, 7 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index e1952da..95e195d 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,10 @@
+2019-12-16 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_util.adb (Is_Atomic_Or_VFA_Object): Also return true for
+ components whose type is Volatile_Full_Access or which are
+ subject to the aspect/pragma individually.
+ * sem_util.ads (Is_Atomic_Object_Entity): Small comment fix.
+
2019-12-16 Yannick Moy <moy@adacore.com>
* exp_ch6.adb: Fix comment.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 7ed717d..2c4ff68 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -13788,13 +13788,50 @@ package body Sem_Util is
-----------------------------
function Is_Atomic_Or_VFA_Object (N : Node_Id) return Boolean is
+ function Is_VFA_Object (N : Node_Id) return Boolean;
+ -- Determine whether arbitrary node N denotes a reference to an object
+ -- which is Volatile_Full_Access. Modelled on Is_Atomic_Object above.
+
+ function Is_VFA_Object_Entity (Id : Entity_Id) return Boolean;
+ -- Determine whether arbitrary entity Id denotes an object which is
+ -- Volatile_Full_Access. Modelled on Is_Atomic_Object_Entity above.
+
+ ---------------------
+ -- Is_VFA_Object --
+ ---------------------
+
+ function Is_VFA_Object (N : Node_Id) return Boolean is
+ begin
+ if Is_Entity_Name (N) then
+ return Is_VFA_Object_Entity (Entity (N));
+
+ elsif Nkind (N) = N_Indexed_Component then
+ return Is_Volatile_Full_Access (Etype (N));
+
+ elsif Nkind (N) = N_Selected_Component then
+ return
+ Is_Volatile_Full_Access (Etype (N))
+ or else Is_Volatile_Full_Access (Entity (Selector_Name (N)));
+ end if;
+
+ return False;
+ end Is_VFA_Object;
+
+ ----------------------------
+ -- Is_VFA_Object_Entity --
+ ----------------------------
+
+ function Is_VFA_Object_Entity (Id : Entity_Id) return Boolean is
+ begin
+ return
+ Is_Object (Id)
+ and then (Is_Volatile_Full_Access (Id)
+ or else
+ Is_Volatile_Full_Access (Etype (Id)));
+ end Is_VFA_Object_Entity;
+
begin
- return Is_Atomic_Object (N)
- or else (Is_Entity_Name (N)
- and then Is_Object (Entity (N))
- and then (Is_Volatile_Full_Access (Entity (N))
- or else
- Is_Volatile_Full_Access (Etype (Entity (N)))));
+ return Is_Atomic_Object (N) or else Is_VFA_Object (N);
end Is_Atomic_Or_VFA_Object;
----------------------
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index 89fa579..a665b5e 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -1535,7 +1535,7 @@ package Sem_Util is
function Is_Atomic_Object_Entity (Id : Entity_Id) return Boolean;
-- Determine whether arbitrary entity Id denotes an atomic object as per
- -- Ada RM C.6(12).
+ -- Ada RM C.6(7).
function Is_Atomic_Or_VFA_Object (N : Node_Id) return Boolean;
-- Determine whether arbitrary node N denotes a reference to an object