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

Reply via email to