From 0e6640d89daa5b3e1515d84823af83f9ecb40209 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Mon, 22 Jun 2009 04:39:40 +0000 Subject: re PR fortran/40472 (Simplification of spread intrinsic takes a long time) 2009-06-22 Paul Thomas PR fortran/40472 * simplify.c (gfc_simplify_spread): Restrict the result size to the limit for an array constructor. 2009-06-22 Paul Thomas PR fortran/40472 * gfortran.dg/spread_size_limit.f90: New test. From-SVN: r148775 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/simplify.c | 7 +++++++ 2 files changed, 13 insertions(+) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1c1a6c1..065e8c8 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-06-22 Paul Thomas + + PR fortran/40472 + * simplify.c (gfc_simplify_spread): Restrict the result size to + the limit for an array constructor. + 2009-06-21 Janus Weil PR fortran/39850 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 11650f3..79341d3 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -5099,6 +5099,7 @@ gfc_simplify_spread (gfc_expr *source, gfc_expr *dim_expr, gfc_expr *ncopies_exp { gfc_expr *result = 0L; int i, j, dim, ncopies; + mpz_t size; if ((!gfc_is_constant_expr (source) && !is_constant_array_expr (source)) @@ -5114,6 +5115,12 @@ gfc_simplify_spread (gfc_expr *source, gfc_expr *dim_expr, gfc_expr *ncopies_exp gfc_extract_int (ncopies_expr, &ncopies); ncopies = MAX (ncopies, 0); + /* Do not allow the array size to exceed the limit for an array + constructor. */ + gfc_array_size (source, &size); + if (mpz_get_si (size)*ncopies > gfc_option.flag_max_array_constructor) + return NULL; + if (source->expr_type == EXPR_CONSTANT) { gcc_assert (dim == 0); -- cgit v1.1