Commit d8468b97 by Eric Botcazou Committed by Pierre-Marie de Rodat

[Ada] Small consistency fix for Volatile_Full_Access objects

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
parent bee69f33
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> 2019-12-16 Yannick Moy <moy@adacore.com>
* exp_ch6.adb: Fix comment. * exp_ch6.adb: Fix comment.
......
...@@ -13788,13 +13788,50 @@ package body Sem_Util is ...@@ -13788,13 +13788,50 @@ package body Sem_Util is
----------------------------- -----------------------------
function Is_Atomic_Or_VFA_Object (N : Node_Id) return Boolean 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 begin
return Is_Atomic_Object (N) return Is_Atomic_Object (N) or else Is_VFA_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)))));
end Is_Atomic_Or_VFA_Object; end Is_Atomic_Or_VFA_Object;
---------------------- ----------------------
......
...@@ -1535,7 +1535,7 @@ package Sem_Util is ...@@ -1535,7 +1535,7 @@ package Sem_Util is
function Is_Atomic_Object_Entity (Id : Entity_Id) return Boolean; function Is_Atomic_Object_Entity (Id : Entity_Id) return Boolean;
-- Determine whether arbitrary entity Id denotes an atomic object as per -- 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; function Is_Atomic_Or_VFA_Object (N : Node_Id) return Boolean;
-- Determine whether arbitrary node N denotes a reference to an object -- Determine whether arbitrary node N denotes a reference to an object
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment