diff options
author | Daniel Kraft <d@domob.eu> | 2011-08-02 22:10:13 +0200 |
---|---|---|
committer | Daniel Kraft <domob@gcc.gnu.org> | 2011-08-02 22:10:13 +0200 |
commit | f315a6b438a961737d5a0def08b4957866b348c7 (patch) | |
tree | 3a57d821578e730d8e84cd24848546789954acd2 /gcc | |
parent | 8f1594b2b805e9214594ad1f4552f629429fd07e (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/auto_char_dummy_array_3.f90 | 25 |
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 |