-- Is_Effectively_Volatile --
-----------------------------
- function Is_Effectively_Volatile
- (Id : Entity_Id;
- Ignore_Protected : Boolean := False) return Boolean is
+ function Is_Effectively_Volatile (Id : Entity_Id) return Boolean is
begin
if Is_Type (Id) then
-- private type may be missing in case of error.
return Present (Anc)
- and then Is_Effectively_Volatile
- (Component_Type (Anc), Ignore_Protected);
+ and then Is_Effectively_Volatile (Component_Type (Anc));
end;
end if;
- -- A protected type is always volatile unless Ignore_Protected is
- -- True.
+ -- A protected type is always volatile
- elsif Is_Protected_Type (Id) and then not Ignore_Protected then
+ elsif Is_Protected_Type (Id) then
return True;
-- A descendant of Ada.Synchronous_Task_Control.Suspension_Object is
and then not
(Ekind (Id) = E_Variable and then No_Caching_Enabled (Id)))
or else Has_Volatile_Components (Id)
- or else Is_Effectively_Volatile (Etype (Id), Ignore_Protected);
+ or else Is_Effectively_Volatile (Etype (Id));
end if;
end Is_Effectively_Volatile;
-----------------------------------------
function Is_Effectively_Volatile_For_Reading
- (Id : Entity_Id;
- Ignore_Protected : Boolean := False) return Boolean
+ (Id : Entity_Id) return Boolean
is
begin
- -- A concurrent type is effectively volatile for reading, except for a
- -- protected type when Ignore_Protected is True.
+ -- A concurrent type is effectively volatile for reading
- if Is_Task_Type (Id)
- or else (Is_Protected_Type (Id) and then not Ignore_Protected)
- then
+ if Is_Concurrent_Type (Id) then
return True;
- elsif Is_Effectively_Volatile (Id, Ignore_Protected) then
+ elsif Is_Effectively_Volatile (Id) then
-- Other volatile types and objects are effectively volatile for
-- reading when they have property Async_Writers or Effective_Reads
return Present (Anc)
and then Is_Effectively_Volatile_For_Reading
- (Component_Type (Anc), Ignore_Protected);
+ (Component_Type (Anc));
end;
end if;
end if;
------------------------------------
function Is_Effectively_Volatile_Object (N : Node_Id) return Boolean is
- function Is_Effectively_Volatile (E : Entity_Id) return Boolean is
- (Is_Effectively_Volatile (E, Ignore_Protected => False));
-
function Is_Effectively_Volatile_Object_Inst
is new Is_Effectively_Volatile_Object_Shared (Is_Effectively_Volatile);
begin
function Is_Effectively_Volatile_Object_For_Reading
(N : Node_Id) return Boolean
is
- function Is_Effectively_Volatile_For_Reading
- (E : Entity_Id) return Boolean
- is (Is_Effectively_Volatile_For_Reading (E, Ignore_Protected => False));
-
function Is_Effectively_Volatile_Object_For_Reading_Inst
is new Is_Effectively_Volatile_Object_Shared
(Is_Effectively_Volatile_For_Reading);
-- . machine_emax = 2**10
-- . machine_emin = 3 - machine_emax
- function Is_Effectively_Volatile
- (Id : Entity_Id;
- Ignore_Protected : Boolean := False) return Boolean;
+ function Is_Effectively_Volatile (Id : Entity_Id) return Boolean;
-- Determine whether a type or object denoted by entity Id is effectively
-- volatile (SPARK RM 7.1.2). To qualify as such, the entity must be either
-- * Volatile without No_Caching
-- * An array type whose component type is effectively volatile
-- * A protected type
-- * Descendant of type Ada.Synchronous_Task_Control.Suspension_Object
- --
- -- If Ignore_Protected is True, then a protected object/type is treated
- -- like a non-protected record object/type for computing the result of
- -- this query.
function Is_Effectively_Volatile_For_Reading
- (Id : Entity_Id;
- Ignore_Protected : Boolean := False) return Boolean;
+ (Id : Entity_Id) return Boolean;
-- Determine whether a type or object denoted by entity Id is effectively
-- volatile for reading (SPARK RM 7.1.2). To qualify as such, the entity
-- must be either
-- reading
-- * A protected type
-- * Descendant of type Ada.Synchronous_Task_Control.Suspension_Object
- --
- -- If Ignore_Protected is True, then a protected object/type is treated
- -- like a non-protected record object/type for computing the result of
- -- this query.
function Is_Effectively_Volatile_Object
(N : Node_Id) return Boolean;