checks.adb (Get_E_First_Or_Last): When the expression being retrieved is an N_Raise_Constraint_Error node...

2005-03-08  Thomas Quinot  <quinot@adacore.com>

	* checks.adb (Get_E_First_Or_Last): When the expression being retrieved
	is an N_Raise_Constraint_Error node, create a new copy of it without
	going through a call to Duplicate_Subexpr.

From-SVN: r96491
This commit is contained in:
Thomas Quinot 2005-03-15 16:58:36 +01:00 committed by Arnaud Charlet
parent 2ca2bc8b83
commit 3a8b9f38bf
1 changed files with 11 additions and 1 deletions

View File

@ -5775,7 +5775,17 @@ package body Checks is
return Get_Discriminal (E, Bound);
elsif Nkind (Bound) = N_Integer_Literal then
return Make_Integer_Literal (Loc, Intval (Bound));
return Make_Integer_Literal (Loc, Intval (Bound));
-- Case of a bound that has been rewritten to an
-- N_Raise_Constraint_Error node because it is an out-of-range
-- value. We may not call Duplicate_Subexpr on this node because
-- an N_Raise_Constraint_Error is not side effect free, and we may
-- not assume that we are in the proper context to remove side
-- effects on it at the point of reference.
elsif Nkind (Bound) = N_Raise_Constraint_Error then
return New_Copy_Tree (Bound);
else
return Duplicate_Subexpr_No_Checks (Bound);