From d8468b976bb2721c32368e2a80591e77ca49250f Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 16 Dec 2019 10:33:45 +0000 Subject: [PATCH] [Ada] Small consistency fix for Volatile_Full_Access objects 2019-12-16 Eric Botcazou 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 | 7 +++++++ gcc/ada/sem_util.adb | 49 ++++++++++++++++++++++++++++++++++++++------ gcc/ada/sem_util.ads | 2 +- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index e1952da7941..95e195d89f0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2019-12-16 Eric Botcazou + + * 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 * exp_ch6.adb: Fix comment. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 7ed717d696b..2c4ff68c9ab 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 89fa579a0cc..a665b5e9a30 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 -- 2.30.2