[Ada] Fix type conversion handling in validity checks
gcc/ada/ * checks.adb (Insert_Valid_Check): in case of checked type conversion, update Typ to match Exp's type and add call to Analyze_And_Resolve.
This commit is contained in:
parent
b47b5438b9
commit
d9fe0e53d8
@ -8077,7 +8077,7 @@ package body Checks is
|
||||
Is_High_Bound : Boolean := False)
|
||||
is
|
||||
Loc : constant Source_Ptr := Sloc (Expr);
|
||||
Typ : constant Entity_Id := Etype (Expr);
|
||||
Typ : Entity_Id := Etype (Expr);
|
||||
Exp : Node_Id;
|
||||
|
||||
begin
|
||||
@ -8137,6 +8137,7 @@ package body Checks is
|
||||
while Nkind (Exp) = N_Type_Conversion loop
|
||||
Exp := Expression (Exp);
|
||||
end loop;
|
||||
Typ := Etype (Exp);
|
||||
|
||||
-- Do not generate a check for a variable which already validates the
|
||||
-- value of an assignable object.
|
||||
@ -8217,6 +8218,14 @@ package body Checks is
|
||||
Set_Do_Range_Check (Validated_Object (Var_Id), False);
|
||||
end if;
|
||||
|
||||
-- In case of a type conversion, an expansion of the expr may be
|
||||
-- needed (eg. fixed-point as actual).
|
||||
|
||||
if Exp /= Expr then
|
||||
pragma Assert (Nkind (Expr) = N_Type_Conversion);
|
||||
Analyze_And_Resolve (Expr);
|
||||
end if;
|
||||
|
||||
PV := New_Occurrence_Of (Var_Id, Loc);
|
||||
|
||||
-- Otherwise the expression does not denote a variable. Force its
|
||||
|
Loading…
Reference in New Issue
Block a user