aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDaniel Kraft <d@domob.eu>2011-08-02 22:10:13 +0200
committerDaniel Kraft <domob@gcc.gnu.org>2011-08-02 22:10:13 +0200
commitf315a6b438a961737d5a0def08b4957866b348c7 (patch)
tree3a57d821578e730d8e84cd24848546789954acd2 /gcc
parent8f1594b2b805e9214594ad1f4552f629429fd07e (diff)
downloadgcc-f315a6b438a961737d5a0def08b4957866b348c7.zip
gcc-f315a6b438a961737d5a0def08b4957866b348c7.tar.gz
gcc-f315a6b438a961737d5a0def08b4957866b348c7.tar.bz2
re PR fortran/49885 (Segmentation fault when writing to an automatic character array)
2011-08-02 Daniel Kraft <d@domob.eu> PR fortran/49885 * trans-array.c (gfc_trans_auto_array_allocation): Change gfc_start_block to gfc_init_block to avoid spurious extra-scope. 2011-08-02 Daniel Kraft <d@domob.eu> PR fortran/49885 * gfortran.dg/auto_char_dummy_array_3.f90: New test. From-SVN: r177211
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/auto_char_dummy_array_3.f9025
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index bba8d0f..912c011ba 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2011-08-02 Daniel Kraft <d@domob.eu>
+
+ PR fortran/49885
+ * trans-array.c (gfc_trans_auto_array_allocation): Change
+ gfc_start_block to gfc_init_block to avoid spurious extra-scope.
+
2011-08-02 Tobias Burnus <burnus@net-b.de>
* trans-array.c (gfc_array_allocate): Pass token to
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index a151c56..85acf0c 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -4887,7 +4887,7 @@ gfc_trans_auto_array_allocation (tree decl, gfc_symbol * sym,
gcc_assert (GFC_ARRAY_TYPE_P (type));
onstack = TREE_CODE (type) != POINTER_TYPE;
- gfc_start_block (&init);
+ gfc_init_block (&init);
/* Evaluate character string length. */
if (sym->ts.type == BT_CHARACTER
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7a4dc063..82f2776 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-02 Daniel Kraft <d@domob.eu>
+
+ PR fortran/49885
+ * gfortran.dg/auto_char_dummy_array_3.f90: New test.
+
2011-08-02 Kai Tietz <ktietz@redhat.com>
PR middle-end/49947
diff --git a/gcc/testsuite/gfortran.dg/auto_char_dummy_array_3.f90 b/gcc/testsuite/gfortran.dg/auto_char_dummy_array_3.f90
new file mode 100644
index 0000000..053956c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/auto_char_dummy_array_3.f90
@@ -0,0 +1,25 @@
+! { dg-do run }
+
+! PR fortran/49885
+! Check that character arrays with non-constant char-length are handled
+! correctly.
+
+! Contributed by Daniel Kraft <d@domob.eu>,
+! based on original test case and variant by Tobias Burnus in comment 2.
+
+PROGRAM main
+ IMPLICIT NONE
+
+ CALL s (10)
+
+CONTAINS
+
+ SUBROUTINE s (nb)
+ INTEGER :: nb
+ CHARACTER(MAX (80, nb)) :: bad_rec(1)
+
+ bad_rec(1)(1:2) = 'abc'
+ IF (bad_rec(1)(1:2) /= 'ab') CALL abort ()
+ END SUBROUTINE s
+
+END PROGRAM main