diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2020-01-13 21:17:48 +0100 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-03 06:01:42 -0400 |
commit | e4542648e1d0e922bb2bb700f25b42e5af0da9ab (patch) | |
tree | 357502e55889941b4074e487dfbcb838cb3efd30 | |
parent | a10340812c6315b7b78bdfd69d31afef03184ba0 (diff) | |
download | gcc-e4542648e1d0e922bb2bb700f25b42e5af0da9ab.zip gcc-e4542648e1d0e922bb2bb700f25b42e5af0da9ab.tar.gz gcc-e4542648e1d0e922bb2bb700f25b42e5af0da9ab.tar.bz2 |
[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.
-rw-r--r-- | gcc/ada/exp_util.adb | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 1f3cfcc..af7a705 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 |