diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2020-05-30 11:56:38 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-07-15 09:42:42 -0400 |
commit | 9fdf1cebafc95c86c0cf321ce415148366f35225 (patch) | |
tree | 52876d4ad1db7283d071812dc3b1d870cd10ad46 /gcc | |
parent | 98e663f5979ad0686d7ed79a3c8ff7445f5fab18 (diff) | |
download | gcc-9fdf1cebafc95c86c0cf321ce415148366f35225.zip gcc-9fdf1cebafc95c86c0cf321ce415148366f35225.tar.gz gcc-9fdf1cebafc95c86c0cf321ce415148366f35225.tar.bz2 |
[Ada] Fix slices and qualified expressions being effectively volatile
gcc/ada/
* exp_ch5.adb (Expand_Assign_Array): Use short-circuit operator
(style).
* sem_res.adb (Resolve_Indexed_Component): Fix style in comment.
* sem_util.adb (Is_Effectively_Volatile_Object): Handle slices
just like indexed components; handle qualified expressions and
type conversions lie in Is_OK_Volatile_Context.
(Is_OK_Volatile_Context): Handle qualified expressions just like
type conversions.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_ch5.adb | 2 | ||||
-rw-r--r-- | gcc/ada/sem_res.adb | 2 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 11 |
3 files changed, 11 insertions, 4 deletions
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb index e98fcf7..afd3bca 100644 --- a/gcc/ada/exp_ch5.adb +++ b/gcc/ada/exp_ch5.adb @@ -1521,7 +1521,7 @@ package body Exp_Ch5 is -- be assigned. elsif Possible_Bit_Aligned_Component (Lhs) - or + or else Possible_Bit_Aligned_Component (Rhs) then null; diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index dc11a08..8b2f23c 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -9155,7 +9155,7 @@ package body Sem_Res is Array_Type := Implicitly_Designated_Type (Array_Type); end if; - -- If name was overloaded, set component type correctly now + -- If name was overloaded, set component type correctly now. -- If a misplaced call to an entry family (which has no index types) -- return. Error will be diagnosed from calling context. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index ddd4d27..93447cc 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -15676,7 +15676,7 @@ package body Sem_Util is return Is_Object (Entity (N)) and then Is_Effectively_Volatile (Entity (N)); - elsif Nkind (N) = N_Indexed_Component then + elsif Nkind_In (N, N_Indexed_Component, N_Slice) then return Is_Effectively_Volatile_Object (Prefix (N)); elsif Nkind (N) = N_Selected_Component then @@ -15685,6 +15685,12 @@ package body Sem_Util is or else Is_Effectively_Volatile_Object (Selector_Name (N)); + elsif Nkind_In (N, N_Qualified_Expression, + N_Unchecked_Type_Conversion, + N_Type_Conversion) + then + return Is_Effectively_Volatile_Object (Expression (N)); + else return False; end if; @@ -17497,7 +17503,8 @@ package body Sem_Util is -- The volatile object appears as the expression of a type conversion -- occurring in a non-interfering context. - elsif Nkind_In (Context, N_Type_Conversion, + elsif Nkind_In (Context, N_Qualified_Expression, + N_Type_Conversion, N_Unchecked_Type_Conversion) and then Expression (Context) = Obj_Ref and then Is_OK_Volatile_Context |