re PR fortran/43210 (Initializer of huge static arrays should be improved)
authorJakub Jelinek <jakub@redhat.com>
Tue, 26 Feb 2019 10:36:05 +0000 (11:36 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 26 Feb 2019 10:36:05 +0000 (11:36 +0100)
PR fortran/43210
* trans-array.c (gfc_conv_array_initializer): Use RANGE_EXPR instead
of duplicating the initializer possibly many times.

From-SVN: r269207

gcc/fortran/ChangeLog
gcc/fortran/trans-array.c

index 16b8eb0555f45332402a55c8f3b2fbcfe442593d..2293c9ac47b1b4c3e2356e13b52495f35d7f078d 100644 (file)
@@ -1,3 +1,9 @@
+2019-02-26  Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/43210
+       * trans-array.c (gfc_conv_array_initializer): Use RANGE_EXPR instead
+       of duplicating the initializer possibly many times.
+
 2019-02-24  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/89174
index f15d3a379378a6c1c80cf3c0e0430285931d1c21..6192e6830dda1db3f934c9603f4adafd7938af4d 100644 (file)
@@ -5986,7 +5986,6 @@ gfc_conv_array_initializer (tree type, gfc_expr * expr)
 {
   gfc_constructor *c;
   tree tmp;
-  offset_int wtmp;
   gfc_se se;
   tree index, range;
   vec<constructor_elt, va_gc> *v = NULL;
@@ -6009,13 +6008,10 @@ gfc_conv_array_initializer (tree type, gfc_expr * expr)
       else
        gfc_conv_structure (&se, expr, 1);
 
-      wtmp = wi::to_offset (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) + 1;
-      /* This will probably eat buckets of memory for large arrays.  */
-      while (wtmp != 0)
-        {
-         CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, se.expr);
-         wtmp -= 1;
-        }
+      CONSTRUCTOR_APPEND_ELT (v, build2 (RANGE_EXPR, gfc_array_index_type,
+                                        TYPE_MIN_VALUE (TYPE_DOMAIN (type)),
+                                        TYPE_MAX_VALUE (TYPE_DOMAIN (type))),
+                             se.expr);
       break;
 
     case EXPR_ARRAY: