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
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.
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