aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2020-04-27 11:14:31 +0200
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-19 04:17:10 -0400
commita4dafb8b92e00e2f783bf8915b17f1f450eff227 (patch)
tree1a666e633d620d85f2080e45587f6123278fe2c0 /gcc
parent66bd7af5cca12b8f0470d1e8cf347ae2de1e928f (diff)
downloadgcc-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).
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_attr.adb42
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.