From: Geert Bosch Date: Sat, 15 Nov 2008 14:11:58 +0000 (+0000) Subject: trans.c (emit_check): Put back a final save_expr to prevent exponential expansion... X-Git-Tag: releases/gcc-4.4.0~1651 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7348f18cb1d809fa58aff195d9780e683c60b6ce;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index adbc571c1a69..ec605ab78627 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 8ededaa49b2c..51d20d26e1d1 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