[Ada] Small consistency fix for Volatile_Full_Access objects
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 16 Dec 2019 10:33:45 +0000 (10:33 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 16 Dec 2019 10:33:45 +0000 (10:33 +0000)
2019-12-16  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* 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.

From-SVN: r279420

gcc/ada/ChangeLog
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads

index e1952da7941fff74925fc445f863b956f9521f29..95e195d89f0bde713989e2523c7a81f216a8db48 100644 (file)
@@ -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.
index 7ed717d696bce57f39cfd2e3cf2afe3c224d6d1f..2c4ff68c9abc281a6ad0212b75fcfb4c927a4321 100644 (file)
@@ -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;
 
    ----------------------
index 89fa579a0cc44f0af72ae6a4f02ccded861f1f55..a665b5e9a309519ed12d91ea19294bc41138fc41 100644 (file)
@@ -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