https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83344
--- Comment #2 from Janne Blomqvist <jb at gcc dot gnu.org> ---
Seems it's wrong at least to access value.character.length if the expression
isn't a constant? So,
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index d1a2368..017b9f7 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -8628,9 +8628,17 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target)
sym->ts.u.cl = target->ts.u.cl;
if (!sym->ts.u.cl->length && !sym->ts.deferred)
- sym->ts.u.cl->length
- = gfc_get_int_expr (gfc_charlen_int_kind,
- NULL, target->value.character.length);
+ {
+ if (target->expr_type == EXPR_CONSTANT)
+ sym->ts.u.cl->length
+ = gfc_get_int_expr (gfc_charlen_int_kind,
+ NULL, target->value.character.length);
+ else
+ {
+ // What now?
+ // sym->ts.deferred = true; // Hack that doesn't quite work..
+ }
+ }
}
/* If the target is a good class object, so is the associate variable. */