PR fortran/50409
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 Nov 2011 23:15:11 +0000 (23:15 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 Nov 2011 23:15:11 +0000 (23:15 +0000)
* expr.c (gfc_simplify_expr): Substrings can't have negative
length.
* gcc/testsuite/gfortran.dg/string_5.f90: Improve testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181181 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/string_5.f90

index 4ae0e5b..29294f7 100644 (file)
@@ -1,5 +1,11 @@
 2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
+       PR fortran/50409
+       * expr.c (gfc_simplify_expr): Substrings can't have negative
+       length.
+
+2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
        PR fortran/50334
        * invoke.texi (-finit-*): Document interaction with
        -Wuninitialized.
index 504c7cf..f241455 100644 (file)
@@ -1853,8 +1853,8 @@ 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;
+         if (end < start)
+           end = start;
 
          s = gfc_get_wide_string (end - start + 2);
          memcpy (s, p->value.character.string + start,
index b0cbbb6..de8cdc4 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-08  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR fortran/50409
+       * gcc/testsuite/gfortran.dg/string_5.f90: Improve testcase.
+
 2011-10-23  Jason Merrill  <jason@redhat.com>
 
        PR c++/50835
index 87ec709..ef29156 100644 (file)
@@ -1,7 +1,14 @@
 ! { dg-do compile }
-! PR fortran/48876 - this used to segfault.
-! Test case contributed by mhp77 (a) gmx.at.
 program test
+
+  ! PR fortran/48876 - this used to segfault.
+  ! Test case contributed by mhp77 (a) gmx.at.
   character ::  string =  "string"( : -1 )
+
+  ! PR fortran/50409
+  character v(3)
+  v = (/ ('123'(i:1), i = 3, 1, -1) /) 
+  print *, v
+
 end program test