Hello world, the attached, rather self-explanatory patch fixes PR 48876.
OK for trunk? Thomas 2011-07-30 Thomas Koenig <tkoe...@gcc.gnu.org> 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 <tkoe...@gcc.gnu.org> PR fortran/48876 * gfortran.dg/string_5.f90: New test.
Index: expr.c =================================================================== --- expr.c (Revision 176933) +++ expr.c (Arbeitskopie) @@ -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));
! { 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