From 36f0cf4e6035406f64158946fff3bef9e2b4059c Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Tue, 16 Jun 2020 05:28:54 -0400 Subject: [PATCH] [Ada] Ada2020: AI12-0027 Access values and unaliased component gcc/ada/ * sem_res.adb (Resolve_Actuals): Restore restrictive check on view conversions which required matching value of Has_Aliased_Components of formals and actuals. Required to avoid the regression of ACATS b460005. --- gcc/ada/sem_res.adb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index bf4774c4491..f1c01779b91 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -4118,9 +4118,25 @@ package body Sem_Res is if Ekind (F) = E_In_Out_Parameter and then Is_Array_Type (Etype (F)) then + -- In a view conversion, the conversion must be legal in + -- both directions, and thus both component types must be + -- aliased, or neither (4.6 (8)). + + -- The extra rule in 4.6 (24.9.2) seems unduly + -- restrictive: the privacy requirement should not apply + -- to generic types, and should be checked in an + -- instance. ARG query is in order ??? + + if Has_Aliased_Components (Expr_Typ) /= + Has_Aliased_Components (Etype (F)) + then + Error_Msg_N + ("both component types in a view conversion must be" + & " aliased, or neither", A); + -- Comment here??? what set of cases??? - if not Same_Ancestor (Etype (F), Expr_Typ) then + elsif not Same_Ancestor (Etype (F), Expr_Typ) then -- Check view conv between unrelated by ref array -- types.