From: Eric Botcazou Date: Mon, 13 Jan 2020 20:17:48 +0000 (+0100) Subject: [Ada] Avoid creating temporaries in Universal_Integer, continued X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e4542648e1d0e922bb2bb700f25b42e5af0da9ab;p=gcc.git [Ada] Avoid creating temporaries in Universal_Integer, continued 2020-06-03 Eric Botcazou 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. --- diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 1f3cfcc1274..af7a7052511 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -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. - - elsif Nkind (Exp) = N_Type_Conversion then + -- 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 + 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