Commit 3a8b9f38 by Thomas Quinot Committed by Arnaud Charlet

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

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
parent 2ca2bc8b
...@@ -5775,7 +5775,17 @@ package body Checks is ...@@ -5775,7 +5775,17 @@ package body Checks is
return Get_Discriminal (E, Bound); return Get_Discriminal (E, Bound);
elsif Nkind (Bound) = N_Integer_Literal then 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 else
return Duplicate_Subexpr_No_Checks (Bound); return Duplicate_Subexpr_No_Checks (Bound);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment