PR fortran/83344 Don't set bogus constant value
authorJanne Blomqvist <jb@gcc.gnu.org>
Thu, 28 Dec 2017 18:49:12 +0000 (20:49 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Thu, 28 Dec 2017 18:49:12 +0000 (20:49 +0200)
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

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/associate_22.f90

index 3f3dc3ee23a9122b679ac16aed591f234efc56a9..fd4d8a6ae62b00cccd1e0e5e9c0f5dfad6b7ab2f 100644 (file)
@@ -1,3 +1,9 @@
+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
index f819b7158612979db6cf6c733d8174868d47a3bd..cf75a78d7bae1bed546a8699ffef6f9026a8b9d7 100644 (file)
@@ -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);
index 2e69175084c42ace2b94d1246404d9ac8311a0bb..1e91e7f5480ccc6ec5d20fdb463bd9a121fcf4ba 100644 (file)
@@ -1,9 +1,14 @@
+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.
index 1558992004d1773eee4b6fdc083f66c015130723..edf59321dd5fb5ec1f789db4802dc6b1de6e813f 100644 (file)
@@ -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'))