diff options
author | Janne Blomqvist <jb@gcc.gnu.org> | 2017-01-03 20:01:30 +0200 |
---|---|---|
committer | Janne Blomqvist <jb@gcc.gnu.org> | 2017-01-03 20:01:30 +0200 |
commit | 84aff3c2d4b487fe93f5caa6351c47d56145a6a1 (patch) | |
tree | 09d627d26346335c50d501ba2f2e2f39094071bc /gcc/fortran/simplify.c | |
parent | 47f2abdd0d8bc3a760041149a93e35bc5db9d54e (diff) | |
download | gcc-84aff3c2d4b487fe93f5caa6351c47d56145a6a1.zip gcc-84aff3c2d4b487fe93f5caa6351c47d56145a6a1.tar.gz gcc-84aff3c2d4b487fe93f5caa6351c47d56145a6a1.tar.bz2 |
PR 78534 Revert r244011
r244011 caused regressions on 32-bit hosts.
From-SVN: r244027
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r-- | gcc/fortran/simplify.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 0bf3cfe..a5a50de 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -5190,7 +5190,7 @@ gfc_expr * gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) { gfc_expr *result; - gfc_charlen_t len; + int i, j, len, ncop, nlen; mpz_t ncopies; bool have_length = false; @@ -5210,7 +5210,7 @@ gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) if (e->ts.u.cl && e->ts.u.cl->length && e->ts.u.cl->length->expr_type == EXPR_CONSTANT) { - len = gfc_mpz_get_hwi (e->ts.u.cl->length->value.integer); + len = mpz_get_si (e->ts.u.cl->length->value.integer); have_length = true; } else if (e->expr_type == EXPR_CONSTANT @@ -5246,8 +5246,7 @@ gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) } else { - mpz_init (mlen); - gfc_mpz_set_hwi (mlen, len); + mpz_init_set_si (mlen, len); mpz_tdiv_q (max, gfc_integer_kinds[i].huge, mlen); mpz_clear (mlen); } @@ -5271,12 +5270,11 @@ gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) if (e->expr_type != EXPR_CONSTANT) return NULL; - HOST_WIDE_INT ncop; if (len || (e->ts.u.cl->length && mpz_sgn (e->ts.u.cl->length->value.integer) != 0)) { - const char *res = gfc_extract_hwi (n, &ncop); + const char *res = gfc_extract_int (n, &ncop); gcc_assert (res == NULL); } else @@ -5286,18 +5284,11 @@ gfc_simplify_repeat (gfc_expr *e, gfc_expr *n) return gfc_get_character_expr (e->ts.kind, &e->where, NULL, 0); len = e->value.character.length; - gfc_charlen_t nlen = ncop * len; - - /* Here's a semi-arbitrary limit. If the string is longer than 32 MB - (8 * 2**20 elements * 4 bytes (wide chars) per element) defer to - runtime instead of consuming (unbounded) memory and CPU at - compile time. */ - if (nlen > 8388608) - return NULL; + nlen = ncop * len; result = gfc_get_character_expr (e->ts.kind, &e->where, NULL, nlen); - for (size_t i = 0; i < (size_t) ncop; i++) - for (size_t j = 0; j < (size_t) len; j++) + for (i = 0; i < ncop; i++) + for (j = 0; j < len; j++) result->value.character.string[j+i*len]= e->value.character.string[j]; result->value.character.string[nlen] = '\0'; /* For debugger */ |