Commit f4c26077 by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Fix expansion of aggregates components rewritten to raise statements

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_aggr.adb (Component_OK_For_Backend): If an array component of the
	enclosing record has a bound that is out of range (and that has been
	rewritten as a raise statement) the aggregate is not OK for any back
	end, and should be expanded into individual assignments.

From-SVN: r262800
parent e164710e
2018-07-17 Ed Schonberg <schonberg@adacore.com>
* exp_aggr.adb (Component_OK_For_Backend): If an array component of the
enclosing record has a bound that is out of range (and that has been
rewritten as a raise statement) the aggregate is not OK for any back
end, and should be expanded into individual assignments.
2018-07-17 Piotr Trojanek <trojanek@adacore.com>
* atree.adb (Relocate_Node): Simplify with Is_Rewrite_Substitution.
......
......@@ -7238,6 +7238,34 @@ package body Exp_Aggr is
Expr_Q := Expression (C);
end if;
-- Return False for array components whose bounds raise
-- constraint error.
declare
Comp : Entity_Id;
Indx : Node_Id;
begin
Comp := First (Choices (C));
if Present (Etype (Comp))
and then Is_Array_Type (Etype (Comp))
then
Indx := First_Index (Etype (Comp));
while Present (Indx) loop
if Nkind (Type_Low_Bound (Etype (Indx)))
= N_Raise_Constraint_Error
or else Nkind (Type_High_Bound (Etype (Indx)))
= N_Raise_Constraint_Error
then
return False;
end if;
Indx := Next_Index (Indx);
end loop;
end if;
end;
-- Return False if the aggregate has any associations for tagged
-- components that may require tag adjustment.
......
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