aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-02-18 08:59:06 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-02-18 08:59:06 +0000
commitfa2027d7f51c9d2580a54eb3b48f482284d02559 (patch)
treeb26a3232a0db08437d16e829fb863760f9474eaf
parent8c213bf1664d0a2977d59720fd8488f3c16e66ab (diff)
2018-02-18 Paul Thomas <pault@gcc.gnu.org>
PR fortran/80945 * trans-array.c (gfc_conv_expr_descriptor): Set parmtype from the typenode in the case of deferred length characters. 2018-02-18 Paul Thomas <pault@gcc.gnu.org> PR fortran/80945 * gfortran.dg/associate_35.f90: Remove error, add stop n's and change to run. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@257788 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-array.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/deferred_character_19.f9020
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ce98b760ec8..8ecc90af879 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-18 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/80945
+ * trans-array.c (gfc_conv_expr_descriptor): Set parmtype from
+ the typenode in the case of deferred length characters.
+
2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/84270
diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c
index 79d4d171bdd..e321db35ac2 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -7341,7 +7341,11 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr)
else
{
/* Otherwise make a new one. */
- parmtype = gfc_get_element_type (TREE_TYPE (desc));
+ if (expr->ts.type == BT_CHARACTER && expr->ts.deferred)
+ parmtype = gfc_typenode_for_spec (&expr->ts);
+ else
+ parmtype = gfc_get_element_type (TREE_TYPE (desc));
+
parmtype = gfc_get_array_type_bounds (parmtype, loop.dimen, codim,
loop.from, loop.to, 0,
GFC_ARRAY_UNKNOWN, false);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 76d8f498295..207a3bad762 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-18 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/80945
+ * gfortran.dg/associate_35.f90: Remove error, add stop n's and
+ change to run.
+
2018-02-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/84270
diff --git a/gcc/testsuite/gfortran.dg/deferred_character_19.f90 b/gcc/testsuite/gfortran.dg/deferred_character_19.f90
new file mode 100644
index 00000000000..96722a144f6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/deferred_character_19.f90
@@ -0,0 +1,20 @@
+! { dg-do run }
+!
+! Test fix for PR80945, in which the character length was fixed at zero.
+!
+! Contributed by Nicolas Koenig <koenigni@gcc.gnu.org>
+!
+program main
+ implicit none
+ integer:: i
+ integer, parameter:: N = 10
+ character(20) :: buffer
+ character(len=:), dimension(:),allocatable:: ca
+ character(len=:), dimension(:,:),allocatable:: cb
+ allocate(character(len=N) :: ca(3))
+ ca(1) = "foo"
+ ca(2) = "bar"
+ ca(3) = "xyzzy"
+ write (buffer, '(3A5)') ca(1:3)
+ if (trim (buffer) .ne. "foo bar xyzzy") stop 1
+end program