+2006-12-05 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/29912
+ * trans-expr.c (gfc_trans_arrayfunc_assign): Return NULL if the
+ lhs and rhs character lengths are not constant and equal for
+ character array valued functions.
+
2006-12-04 Tobias Burnus <burnus@net-b.de>
PR fortran/29962
|| expr2->symtree->n.sym->attr.allocatable)
return NULL;
+ /* Character array functions need temporaries unless the
+ character lengths are the same. */
+ if (expr2->ts.type == BT_CHARACTER && expr2->rank > 0)
+ {
+ if (expr1->ts.cl->length == NULL
+ || expr1->ts.cl->length->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ if (expr2->ts.cl->length == NULL
+ || expr2->ts.cl->length->expr_type != EXPR_CONSTANT)
+ return NULL;
+
+ if (mpz_cmp (expr1->ts.cl->length->value.integer,
+ expr2->ts.cl->length->value.integer) != 0)
+ return NULL;
+ }
+
/* Check that no LHS component references appear during an array
reference. This is needed because we do not have the means to
span any arbitrary stride with an array descriptor. This check
+2006-12-05 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/29912
+ * gfortran.dg/char_result_12.f90: New test.
+
2006-12-05 Richard Guenther <rguenther@suse.de>
* gcc.dg/vect/vect.exp: Add support for -fno-math-errno tests.
--- /dev/null
+! { dg-do run }
+! Tests the fix for PR29912, in which the call to JETTER
+! would cause a segfault beause a temporary was not being written.
+!
+! COntributed by Philip Mason <pmason@ricardo.com>
+!
+ program testat
+ character(len=4) :: ctemp(2)
+ character(len=512) :: temper(2)
+ !
+ !------------------------
+ !'This was OK.'
+ !------------------------
+ temper(1) = 'doncaster'
+ temper(2) = 'uxbridge'
+ ctemp = temper
+ if (any (ctemp /= ["donc", "uxbr"])) call abort ()
+ !
+ !------------------------
+ !'This went a bit wrong.'
+ !------------------------
+ ctemp = jetter(1,2)
+ if (any (ctemp /= ["donc", "uxbr"])) call abort ()
+
+ contains
+ function jetter(id1,id2)
+ character(len=512) :: jetter(id1:id2)
+ jetter(id1) = 'doncaster'
+ jetter(id2) = 'uxbridge'
+ end function jetter
+ end program testat