aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2009-06-22 22:24:18 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2009-06-22 22:24:18 +0200
commite5e85f2b81364d2d80d6663aad5418620fadd2e2 (patch)
treea2854d5bb8eed90e91b05eef9902fb15fa5d0fce
parentc986683bb0f43b9b26199c3f60fbe18be06f216e (diff)
downloadgcc-e5e85f2b81364d2d80d6663aad5418620fadd2e2.zip
gcc-e5e85f2b81364d2d80d6663aad5418620fadd2e2.tar.gz
gcc-e5e85f2b81364d2d80d6663aad5418620fadd2e2.tar.bz2
re PR fortran/40472 (Simplification of spread intrinsic takes a long time)
2009-06-22 Tobias Burnus <burnus@net-b.de> PR fortran/40472 PR fortran/50520 * simplify.c (gfc_simplify_spread): Fix the case that source= is a scalar. From-SVN: r148814
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/simplify.c9
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index c42c91d..b502caf 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2009-06-22 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/40472
+ PR fortran/50520
+ * simplify.c (gfc_simplify_spread): Fix the case that source=
+ is a scalar.
+
2009-06-22 Paul Thomas <pault@gcc.gnu.org>
PR fortran/40443
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 79341d3..f57f68e 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -5117,7 +5117,14 @@ gfc_simplify_spread (gfc_expr *source, gfc_expr *dim_expr, gfc_expr *ncopies_exp
/* Do not allow the array size to exceed the limit for an array
constructor. */
- gfc_array_size (source, &size);
+ if (source->expr_type == EXPR_ARRAY)
+ {
+ if (gfc_array_size (source, &size) == FAILURE)
+ gfc_internal_error ("Failure getting length of a constant array.");
+ }
+ else
+ mpz_init_set_ui (size, 1);
+
if (mpz_get_si (size)*ncopies > gfc_option.flag_max_array_constructor)
return NULL;