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 +