From 7d0300ed911d8dfec7943c88af83ed4e4563a5d1 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Sat, 30 Jul 2011 18:17:55 +0000 Subject: [PATCH] re PR fortran/48876 (ICE when initializing character variable with zero-length string) 2011-07-30 Thomas Koenig PR fortran/48876 * expr.c (gfc_simplify_expr): If end of a string is less than zero, set it to zero. 2011-07-30 Thomas Koenig PR fortran/48876 * gfortran.dg/string_5.f90: New test. From-SVN: r176961 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/expr.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/string_5.f90 | 7 +++++++ 4 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/string_5.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 89825e35cc4..6be5141023b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2011-07-30 Thomas Koenig + + PR fortran/48876 + * expr.c (gfc_simplify_expr): If end of a string is less + than zero, set it to zero. + 2011-07-28 Jakub Jelinek PR fortran/31067 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index e5394b876df..549feee61c7 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -1839,6 +1839,9 @@ gfc_simplify_expr (gfc_expr *p, int type) if (p->ref && p->ref->u.ss.end) gfc_extract_int (p->ref->u.ss.end, &end); + if (end < 0) + end = 0; + s = gfc_get_wide_string (end - start + 2); memcpy (s, p->value.character.string + start, (end - start) * sizeof (gfc_char_t)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 187a808fe51..3a681d8d315 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-07-30 Thomas Koenig + + PR fortran/48876 + * gfortran.dg/string_5.f90: New test. + 2011-07-29 Jason Merrill PR c++/49867 diff --git a/gcc/testsuite/gfortran.dg/string_5.f90 b/gcc/testsuite/gfortran.dg/string_5.f90 new file mode 100644 index 00000000000..87ec70942a5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/string_5.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/48876 - this used to segfault. +! Test case contributed by mhp77 (a) gmx.at. +program test + character :: string = "string"( : -1 ) +end program test +