aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/array.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2018-03-30 09:56:46 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2018-03-30 09:56:46 +0000
commit1832cbf8905a5d24075fc7b2aad495ec0e05cbdf (patch)
tree9d6078e8de36849ab7fc144cb5f8f8ff09b58bed /gcc/fortran/array.c
parent06be18e782b9497ffda6523786a38f13f1412e36 (diff)
downloadgcc-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.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index ee13d92..58d611ba 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)