From 9fdf1cebafc95c86c0cf321ce415148366f35225 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Sat, 30 May 2020 11:56:38 +0200 Subject: [PATCH] [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. --- gcc/ada/exp_ch5.adb | 2 +- gcc/ada/sem_res.adb | 2 +- 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 e98fcf778ee..afd3bca5014 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 dc11a0886c1..8b2f23c6340 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 ddd4d275ea1..93447cc0844 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 -- 2.30.2