From a4dafb8b92e00e2f783bf8915b17f1f450eff227 Mon Sep 17 00:00:00 2001 From: Piotr Trojanek Date: Mon, 27 Apr 2020 11:14:31 +0200 Subject: [PATCH] [Ada] Simplify processing of 'Valid_Scalars on array types 2020-06-19 Piotr Trojanek gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Do not call Scalar_Part_Present on the array component's type. (Build_Array_VS_Func): Remove Comp_Typ parameter, because it can be easily computed from the Array_Top parameter *and redundant parameters are confusing and error-prone). --- gcc/ada/exp_attr.adb | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 34fd9dc7a8e..0eead444759 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -79,8 +79,7 @@ package body Exp_Attr is function Build_Array_VS_Func (Attr : Node_Id; Formal_Typ : Entity_Id; - Array_Typ : Entity_Id; - Comp_Typ : Entity_Id) return Entity_Id; + Array_Typ : Entity_Id) return Entity_Id; -- Validate the components of an array type by means of a function. Return -- the entity of the validation function. The parameters are as follows: -- @@ -91,8 +90,6 @@ package body Exp_Attr is -- parameter. -- -- * Array_Typ - the array type whose components are to be validated - -- - -- * Comp_Typ - the component type of the array function Build_Disp_Get_Task_Id_Call (Actual : Node_Id) return Node_Id; -- Build a call to Disp_Get_Task_Id, passing Actual as actual parameter @@ -237,10 +234,11 @@ package body Exp_Attr is function Build_Array_VS_Func (Attr : Node_Id; Formal_Typ : Entity_Id; - Array_Typ : Entity_Id; - Comp_Typ : Entity_Id) return Entity_Id + Array_Typ : Entity_Id) return Entity_Id is - Loc : constant Source_Ptr := Sloc (Attr); + Loc : constant Source_Ptr := Sloc (Attr); + Comp_Typ : constant Entity_Id := + Validated_View (Component_Type (Array_Typ)); function Validate_Component (Obj_Id : Entity_Id; @@ -7088,9 +7086,8 @@ package body Exp_Attr is ------------------- when Attribute_Valid_Scalars => Valid_Scalars : declare - Val_Typ : constant Entity_Id := Validated_View (Ptyp); - Comp_Typ : Entity_Id; - Expr : Node_Id; + Val_Typ : constant Entity_Id := Validated_View (Ptyp); + Expr : Node_Id; begin -- Assume that the prefix does not need validation @@ -7130,21 +7127,16 @@ package body Exp_Attr is -- dimensions of the array while checking individual components. elsif Is_Array_Type (Val_Typ) then - Comp_Typ := Validated_View (Component_Type (Val_Typ)); - - if Scalar_Part_Present (Comp_Typ) then - Expr := - Make_Function_Call (Loc, - Name => - New_Occurrence_Of - (Build_Array_VS_Func - (Attr => N, - Formal_Typ => Ptyp, - Array_Typ => Val_Typ, - Comp_Typ => Comp_Typ), - Loc), - Parameter_Associations => New_List (Pref)); - end if; + Expr := + Make_Function_Call (Loc, + Name => + New_Occurrence_Of + (Build_Array_VS_Func + (Attr => N, + Formal_Typ => Ptyp, + Array_Typ => Val_Typ), + Loc), + Parameter_Associations => New_List (Pref)); -- Validate the scalar components, discriminants of a record type by -- examining the structure of a record type. -- 2.30.2