diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-03-30 09:56:46 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-03-30 09:56:46 +0000 |
commit | 1832cbf8905a5d24075fc7b2aad495ec0e05cbdf (patch) | |
tree | 9d6078e8de36849ab7fc144cb5f8f8ff09b58bed /gcc/fortran/array.c | |
parent | 06be18e782b9497ffda6523786a38f13f1412e36 (diff) | |
download | gcc-1832cbf8905a5d24075fc7b2aad495ec0e05cbdf.zip gcc-1832cbf8905a5d24075fc7b2aad495ec0e05cbdf.tar.gz gcc-1832cbf8905a5d24075fc7b2aad495ec0e05cbdf.tar.bz2 |
re PR fortran/85111 (ICE in min_max_choose, at fortran/simplify.c:4884 (and others))
2017-03-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85111
* array.c (gfc_resolve_character_array_constructor): Early
exit for zero-size arrays.
* simplify.c (simplify_transformation_to_array): Exit early
if the result size is zero.
(simplify_minmaxloc_to_array): Likewise.
2017-03-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85111
* gfortran.dg/zero_sized_10.f90: New test.
From-SVN: r258973
Diffstat (limited to 'gcc/fortran/array.c')
-rw-r--r-- | gcc/fortran/array.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index ee13d92..58d611b 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -2003,6 +2003,20 @@ gfc_resolve_character_array_constructor (gfc_expr *expr) got_charlen: + /* Early exit for zero size arrays. */ + if (expr->shape) + { + mpz_t size; + HOST_WIDE_INT arraysize; + + gfc_array_size (expr, &size); + arraysize = mpz_get_ui (size); + mpz_clear (size); + + if (arraysize == 0) + return true; + } + found_length = -1; if (expr->ts.u.cl->length == NULL) |