[Ada] Avoid creating temporaries in Universal_Integer, continued
2020-06-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_util.adb (Remove_Side_Effects): For a type conversion, do not remove the side effects of the expression only if it is of universal integer type.
This commit is contained in:
parent
a10340812c
commit
e4542648e1
@ -11428,12 +11428,15 @@ package body Exp_Util is
|
||||
goto Leave;
|
||||
|
||||
-- If this is a type conversion, leave the type conversion and remove
|
||||
-- the side effects in the expression. This is important in several
|
||||
-- circumstances: for change of representations, and also when this is a
|
||||
-- view conversion to a smaller object, where gigi can end up creating
|
||||
-- its own temporary of the wrong size.
|
||||
-- side effects in the expression, unless it is of universal integer,
|
||||
-- which is a very large type for a temporary. This is important in
|
||||
-- several circumstances: for change of representations and also when
|
||||
-- this is a view conversion to a smaller object, where gigi can end
|
||||
-- up creating its own temporary of the wrong size.
|
||||
|
||||
elsif Nkind (Exp) = N_Type_Conversion then
|
||||
elsif Nkind (Exp) = N_Type_Conversion
|
||||
and then Etype (Expression (Exp)) /= Universal_Integer
|
||||
then
|
||||
Remove_Side_Effects (Expression (Exp), Name_Req, Variable_Ref);
|
||||
|
||||
-- Generating C code the type conversion of an access to constrained
|
||||
|
Loading…
Reference in New Issue
Block a user