re PR fortran/43210 (Initializer of huge static arrays should be improved)

PR fortran/43210
	* trans-array.c (gfc_conv_array_initializer): Use RANGE_EXPR instead
	of duplicating the initializer possibly many times.

From-SVN: r269207
This commit is contained in:
Jakub Jelinek 2019-02-26 11:36:05 +01:00 committed by Jakub Jelinek
parent ba790e6f5e
commit 0eaf141239
2 changed files with 10 additions and 8 deletions

View 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

View 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: