------- Comment #23 from dfranke at gcc dot gnu dot org 2010-05-01 11:15
-------
Undoing the changes of comments #7, #12 and #16, I now (with splay-tree
constructors get):
$ time gfortran-svn -Wall pr40472.f90
real 0m2.130s
user 0m1.924s
sys 0m0.148s
Instead of those 11 minutes shown in comment #6.
To be fair, 4.5 requires even less time, but it builds the array on runtime,
not compile time.
$ time gfortran-4.5 -Wall pr40472.f90
real 0m0.734s
user 0m0.028s
sys 0m0.132s
Dominique, could you apply this patch and check whether you still get an ICE?
Index: simplify.c
===================================================================
--- simplify.c (revision 158958)
+++ simplify.c (working copy)
@@ -4926,7 +4926,6 @@ gfc_simplify_spread (gfc_expr *source, g
{
gfc_expr *result = 0L;
int i, j, dim, ncopies;
- mpz_t size;
if ((!gfc_is_constant_expr (source)
&& !is_constant_array_expr (source))
@@ -4942,19 +4941,6 @@ gfc_simplify_spread (gfc_expr *source, g
gfc_extract_int (ncopies_expr, &ncopies);
ncopies = MAX (ncopies, 0);
- /* Do not allow the array size to exceed the limit for an array
- constructor. */
- 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;
-
if (source->expr_type == EXPR_CONSTANT)
{
gcc_assert (dim == 0);
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40472