re PR fortran/48876 (ICE when initializing character variable with zero-length string)

2011-07-30  Thomas Koenig  <tkoenig@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  <tkoenig@gcc.gnu.org>

	PR fortran/48876
	* gfortran.dg/string_5.f90:  New test.

From-SVN: r176961
This commit is contained in:
Thomas Koenig 2011-07-30 18:17:55 +00:00
parent b3421a06f9
commit 7d0300ed91
4 changed files with 21 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2011-07-30 Thomas Koenig <tkoenig@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-28 Jakub Jelinek <jakub@redhat.com>
PR fortran/31067

View File

@ -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));

View File

@ -1,3 +1,8 @@
2011-07-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48876
* gfortran.dg/string_5.f90: New test.
2011-07-29 Jason Merrill <jason@redhat.com>
PR c++/49867

View File

@ -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