diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2020-04-27 11:14:31 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-19 04:17:10 -0400 |
commit | a4dafb8b92e00e2f783bf8915b17f1f450eff227 (patch) | |
tree | 1a666e633d620d85f2080e45587f6123278fe2c0 | |
parent | 66bd7af5cca12b8f0470d1e8cf347ae2de1e928f (diff) | |
download | gcc-a4dafb8b92e00e2f783bf8915b17f1f450eff227.zip gcc-a4dafb8b92e00e2f783bf8915b17f1f450eff227.tar.gz gcc-a4dafb8b92e00e2f783bf8915b17f1f450eff227.tar.bz2 |
[Ada] Simplify processing of 'Valid_Scalars on array types
2020-06-19 Piotr Trojanek <trojanek@adacore.com>
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).
-rw-r--r-- | gcc/ada/exp_attr.adb | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 34fd9dc..0eead44 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. |