]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/50409 (SIGSEGV in gfc_simplify_expr)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 8 Nov 2011 23:15:11 +0000 (23:15 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Tue, 8 Nov 2011 23:15:11 +0000 (23:15 +0000)
PR fortran/50409
* expr.c (gfc_simplify_expr): Substrings can't have negative
length.
* gcc/testsuite/gfortran.dg/string_5.f90: Improve testcase.

From-SVN: r181181

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

index 4ae0e5b350a586bf693494b9b895357b305de1e6..29294f7e740396d625ed1ffc86aa08e6f3f9a20a 100644 (file)
@@ -1,3 +1,9 @@
+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
index 504c7cf7d6bf464d34dde186338d81f72848ece1..f241455965352d5582f3fd0fdd04b62dcd7d016e 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 b0cbbb6eb2e7fc4836ebe24a7f94b306bc7dd9ce..de8cdc441a564b742ff09b9030fd1e5305188bde 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 87ec70942a55b0baf935c8480cb15c4512b9d173..ef291566b527f5fd8f25721c64071c909f1a6308 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