===================================================================
@@ -238,21 +238,25 @@ realloc_string_callback (gfc_code **c, int *walk_s
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;
@@ -625,7 +629,8 @@ constant_string_length (gfc_expr *e)
/* 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);