aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-01-13 21:17:48 +0100
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-03 06:01:42 -0400
commite4542648e1d0e922bb2bb700f25b42e5af0da9ab (patch)
tree357502e55889941b4074e487dfbcb838cb3efd30
parenta10340812c6315b7b78bdfd69d31afef03184ba0 (diff)
downloadgcc-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.adb15
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