From 7348f18cb1d809fa58aff195d9780e683c60b6ce Mon Sep 17 00:00:00 2001 From: Geert Bosch Date: Sat, 15 Nov 2008 14:11:58 +0000 Subject: [PATCH] trans.c (emit_check): Put back a final save_expr to prevent exponential expansion during gimplification. * gcc-interface/trans.c (emit_check): Put back a final save_expr to prevent exponential expansion during gimplification. From-SVN: r141885 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/trans.c | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index adbc571..ec605ab 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2008-11-15 Geert Bosch + + * gcc-interface/trans.c (emit_check): Put back a final save_expr + to prevent exponential expansion during gimplification. + 2008-11-15 Eric Botcazou * gcc-interface/lang-specs.h: Expand -coverage and reorder switches. diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 8ededaa..51d20d2 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -6289,7 +6289,10 @@ emit_check (tree gnu_cond, tree gnu_expr, int reason) we don't need to evaluate it just for the check. */ TREE_SIDE_EFFECTS (gnu_result) = TREE_SIDE_EFFECTS (gnu_expr); - return gnu_result; + /* ??? Unfortunately, if we don't put a SAVE_EXPR around this whole thing, + we will repeatedly do the test and, at compile time, we will repeatedly + visit it during unsharing, which leads to an exponential explosion. */ + return save_expr (gnu_result); } /* Return an expression that converts GNU_EXPR to GNAT_TYPE, doing -- 2.7.4