aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-09-22 10:21:25 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-09-22 10:21:25 +0000
commit204d463084b323890918c66032fe8b582ea855d6 (patch)
treef6f006488947c2f9f56ff68033e5239187131da1 /gcc
parent0e569a3c7ee5bc9c373f02203bbc252172030b66 (diff)
downloadgcc-204d463084b323890918c66032fe8b582ea855d6.zip
gcc-204d463084b323890918c66032fe8b582ea855d6.tar.gz
gcc-204d463084b323890918c66032fe8b582ea855d6.tar.bz2
re PR fortran/85603 (ICE with character array substring assignment)
2018-09-22 Paul Thomas <pault@gcc.gnu.org> PR fortran/85603 * trans-array.c (gfc_alloc_allocatable_for_assignment): Test the charlen backend_decl before using the VAR_P macro. 2018-09-22 Paul Thomas <pault@gcc.gnu.org> PR fortran/85603 * gfortran.dg/deferred_character_23.f90 : New test. From-SVN: r264502
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/deferred_character_23.f9022
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e6bf429..14a1de1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-09-22 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/85603
+ * trans-array.c (gfc_alloc_allocatable_for_assignment): Test
+ the charlen backend_decl before using the VAR_P macro.
+
2018-09-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/77325
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 9e00eb0..0d699ed 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -9950,7 +9950,8 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop,
{
if (expr2->ts.deferred)
{
- if (VAR_P (expr2->ts.u.cl->backend_decl))
+ if (expr2->ts.u.cl->backend_decl
+ && VAR_P (expr2->ts.u.cl->backend_decl))
tmp = expr2->ts.u.cl->backend_decl;
else
tmp = rss->info->string_length;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7cba59c..78800e8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-09-22 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/85603
+ * gfortran.dg/deferred_character_23.f90 : New test.
+
2018-09-21 Jeff Law <law@redhat.com>
* gcc.dg/tree-ssa/vrp113.c: Disable EVRP.
diff --git a/gcc/testsuite/gfortran.dg/deferred_character_23.f90 b/gcc/testsuite/gfortran.dg/deferred_character_23.f90
new file mode 100644
index 0000000..c018334
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/deferred_character_23.f90
@@ -0,0 +1,22 @@
+! { dg-do run }
+!
+! Tests the fix for PR85603.
+!
+! Contributed by Walt Spector <w6ws@earthlink.net>
+!
+program strlen_bug
+ implicit none
+
+ character(:), allocatable :: strings(:)
+ integer :: maxlen
+
+ strings = [ character(32) :: &
+ 'short', &
+ 'somewhat longer' ]
+ maxlen = maxval (len_trim (strings))
+ if (maxlen .ne. 15) stop 1
+ strings = strings(:)(:maxlen) ! Used to ICE
+ if (any (strings .ne. ['short ','somewhat longer'])) stop 2
+
+ deallocate (strings) ! To check for memory leaks
+end program