Message ID | 1514482664-30807-1-git-send-email-blomqvist.janne@gmail.com |
---|---|
State | New |
Headers | show |
Series | PR fortran/83344 Don't set bogus constant value | expand |
On Thu, Dec 28, 2017 at 07:37:44PM +0200, Janne Blomqvist wrote: > This patch does not fix PR 83344, but merely fixes an error where we > used to set a constant character length value from a non-constant > expression, and thus set it to some bogus value. > > As a result of this, I have commented out part of the associate_22.f90 > test which otherwise generates a warning message. > > Regtested on x86_64-pc-linux-gnu, unless there are objections I'll > commit this to trunk in a few days? > This looks ok to me.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index f819b71..cf75a78 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8627,7 +8627,8 @@ resolve_assoc_var (gfc_symbol* sym, bool resolve_target) if (!sym->ts.u.cl) sym->ts.u.cl = target->ts.u.cl; - if (!sym->ts.u.cl->length && !sym->ts.deferred) + if (!sym->ts.u.cl->length && !sym->ts.deferred + && target->expr_type == EXPR_CONSTANT) sym->ts.u.cl->length = gfc_get_int_expr (gfc_default_integer_kind, NULL, target->value.character.length); diff --git a/gcc/testsuite/gfortran.dg/associate_22.f90 b/gcc/testsuite/gfortran.dg/associate_22.f90 index 1558992..edf5932 100644 --- a/gcc/testsuite/gfortran.dg/associate_22.f90 +++ b/gcc/testsuite/gfortran.dg/associate_22.f90 @@ -24,10 +24,11 @@ program foo end associate ! This failed. - a = trim(s) // 'abc' - associate(w => trim(s) // 'abc') - if (trim(w) /= trim(a)) call abort - end associate + ! This still doesn't work correctly, see PR 83344 +! a = trim(s) // 'abc' +! associate(w => trim(s) // 'abc') +! if (trim(w) /= trim(a)) call abort +! end associate ! This failed. associate(x => trim('abc'))