diff options
author | Chris Martin <cmartin@adacore.com> | 2020-06-16 10:16:06 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-10-16 03:31:30 -0400 |
commit | d931c94ea2048db6a85e9f1685404c2d210eef4a (patch) | |
tree | 0b18e9c057f3f26adf14315e1836270514c5b316 /gcc/ada | |
parent | 7e8e3cb479dcfdd58dd42825ad7b6c8d39c5ac0e (diff) | |
download | gcc-d931c94ea2048db6a85e9f1685404c2d210eef4a.zip gcc-d931c94ea2048db6a85e9f1685404c2d210eef4a.tar.gz gcc-d931c94ea2048db6a85e9f1685404c2d210eef4a.tar.bz2 |
[Ada] Constants no longer synchronised if they are access-to-variable
gcc/ada/
* sem_util.ads, sem_util.adb (Is_Access_Variable): New function.
(Is_Synchronized_Object): Call new function when determining if
a constant can be regarded as synchronized.
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/sem_util.adb | 17 | ||||
-rw-r--r-- | gcc/ada/sem_util.ads | 5 |
2 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 1fcbfa1..a246c02 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -14337,6 +14337,16 @@ package body Sem_Util is return Nkind (Par) in N_Subprogram_Call; end Is_Anonymous_Access_Actual; + ------------------------ + -- Is_Access_Variable -- + ------------------------ + + function Is_Access_Variable (E : Entity_Id) return Boolean is + begin + return Is_Access_Object_Type (E) + and then not Is_Access_Constant (E); + end Is_Access_Variable; + ----------------------------- -- Is_Actual_Out_Parameter -- ----------------------------- @@ -19149,9 +19159,12 @@ package body Sem_Util is then return True; - -- A constant is a synchronized object by default + -- A constant is a synchronized object by default, unless its type is + -- access-to-variable type. - elsif Ekind (Id) = E_Constant then + elsif Ekind (Id) = E_Constant + and then not Is_Access_Variable (Etype (Id)) + then return True; -- A variable is a synchronized object if it is subject to pragma diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 76478b7..b1f241b 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -1596,6 +1596,9 @@ package Sem_Util is -- True if E is the constructed wrapper for an access_to_subprogram -- type with Pre/Postconditions. + function Is_Access_Variable (E : Entity_Id) return Boolean; + -- Determines if type E is an access-to-variable + function Is_Actual_In_Out_Parameter (N : Node_Id) return Boolean; -- Determines if N is an actual parameter of in-out mode in a subprogram -- call. @@ -2166,7 +2169,7 @@ package Sem_Util is -- such, the object must be -- * Of a type that yields a synchronized object -- * An atomic object with enabled Async_Writers - -- * A constant + -- * A constant not of access-to-variable type -- * A variable subject to pragma Constant_After_Elaboration function Is_Synchronized_Tagged_Type (E : Entity_Id) return Boolean; |