From: Steven G. Kargl Date: Fri, 11 May 2018 18:34:14 +0000 (+0000) Subject: re PR fortran/85521 (ICE in gfc_resolve_character_array_constructor, at fortran/array... X-Git-Tag: releases/gcc-6.5.0~329 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5b8100ca59c4b80e48334d43a633ca880217b3c;p=thirdparty%2Fgcc.git re PR fortran/85521 (ICE in gfc_resolve_character_array_constructor, at fortran/array.c:2049) 2018-05-11 Steven G. Kargl PR fortran/85521 Backport from trunk * array.c (gfc_resolve_character_array_constructor): Substrings with upper bound smaller than lower bound are zero length strings. 2018-05-11 Steven G. Kargl PR fortran/85521 Backport from trunk * gfortran.dg/pr85521_1.f90: New test. * gfortran.dg/pr85521_2.f90: New test. From-SVN: r260180 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 38c5891c6415..cdbb6574f4b3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2018-05-11 Steven G. Kargl + + PR fortran/85521 + Backport from trunk + * array.c (gfc_resolve_character_array_constructor): Substrings + with upper bound smaller than lower bound are zero length strings. + 2018-05-11 Steven G. Kargl PR fortran/85687 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index b87e85559727..29f96d9d6d5c 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -2018,7 +2018,8 @@ got_charlen: else return true; - gcc_assert (current_length != -1); + if (current_length < 0) + current_length = 0; if (found_length == -1) found_length = current_length; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index edfc2c4970fd..0d0ae553c128 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2018-05-11 Steven G. Kargl + + PR fortran/85521 + Backport from trunk + * gfortran.dg/pr85521_1.f90: New test. + * gfortran.dg/pr85521_2.f90: New test. + 2018-05-11 Steven G. Kargl PR fortran/85687 diff --git a/gcc/testsuite/gfortran.dg/pr85521_1.f90 b/gcc/testsuite/gfortran.dg/pr85521_1.f90 new file mode 100644 index 000000000000..57e4620fe0de --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr85521_1.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/85521 +program p + character(3) :: c = 'abc' + character(3) :: z(1) + z = [ c(:-1) ] + print *, z +end diff --git a/gcc/testsuite/gfortran.dg/pr85521_2.f90 b/gcc/testsuite/gfortran.dg/pr85521_2.f90 new file mode 100644 index 000000000000..737b61a11b98 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr85521_2.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/85521 +program p + character(3) :: c = 'abc' + character(3) :: z(1) + z = [ c(:-2) ] + print *, z +end