Commit 208413c7 by Janne Blomqvist

PR fortran/83344 Don't set bogus constant value

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.

gcc/fortran/ChangeLog:

2017-12-28  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/83344
	* resolve.c (resolve_assoc_var): Don't set the constant value
	unless the target is a constant expression.

gcc/testsuite/ChangeLog:

2017-12-28  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/83344
	* gfortran.dg/associate_22.f90: Comment out part of test.

From-SVN: r256021
parent 9fd8313a
2017-12-28 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/83344
* resolve.c (resolve_assoc_var): Don't set the constant value
unless the target is a constant expression.
2017-12-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/83567
......
......@@ -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);
......
2017-12-28 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/83344
* gfortran.dg/associate_22.f90: Comment out part of test.
2017-12-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/83567
* gfortran.dg/pdt_26.f90 : New test.
2017_12_27 Louis Krupp <louis.krupp@zoho.com>
2017-12-27 Louis Krupp <louis.krupp@zoho.com>
PR fortran/83092
* gfortran.dg/init_char_with_nonchar_ctr.f90: New test.
......
......@@ -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'))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment