+2017-08-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/81116
+ * frontend-passes.c (realloc_string_callback): If expression is a
+ concatenation, also check for dependency.
+ (constant_string_length): Check for presence of symtree.
+
2017-08-13 Thomas Koenig <tkoenig@gcc.gnu.org>
* gfortran.texi: Document format of unformatted sequential files.
return 0;
expr2 = gfc_discard_nops (co->expr2);
- if (expr2->expr_type != EXPR_VARIABLE)
- return 0;
- found_substr = false;
- for (ref = expr2->ref; ref; ref = ref->next)
+ if (expr2->expr_type == EXPR_VARIABLE)
{
- if (ref->type == REF_SUBSTRING)
+ found_substr = false;
+ for (ref = expr2->ref; ref; ref = ref->next)
{
- found_substr = true;
- break;
+ if (ref->type == REF_SUBSTRING)
+ {
+ found_substr = true;
+ break;
+ }
}
+ if (!found_substr)
+ return 0;
}
- if (!found_substr)
+ else if (expr2->expr_type != EXPR_OP
+ || expr2->value.op.op != INTRINSIC_CONCAT)
return 0;
-
+
if (!gfc_check_dependency (expr1, expr2, true))
return 0;
/* Return length of char symbol, if constant. */
- if (e->symtree->n.sym->ts.u.cl && e->symtree->n.sym->ts.u.cl->length
+ if (e->symtree && e->symtree->n.sym->ts.u.cl
+ && e->symtree->n.sym->ts.u.cl->length
&& e->symtree->n.sym->ts.u.cl->length->expr_type == EXPR_CONSTANT)
return gfc_copy_expr (e->symtree->n.sym->ts.u.cl->length);
+2017-08-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/81116
+ * gfortran.dg/realloc_on_assignment_29.f90: New test.
+
2017-08-16 Uros Bizjak <ubizjak@gmail.com>
PR target/46091
--- /dev/null
+! { dg-do run }
+! PR fortran/81116
+! The assignment was broken due to a missing temporary.
+! Original test case by Clive Page.
+
+program test10
+ implicit none
+ character(:), allocatable :: string
+ !
+ string = '1234567890'
+ string = string(1:5) // string(7:)
+ if (string /= '123457890') call abort
+end program test10