Hi Janne and Thomas, 1) The patch is attached now - sorry!
2) The commented out part of associate_22.f90 is not yet fixed. I am working on it. 3) I will take a look at PR83975 tomorrow night. Paul On 18 February 2018 at 16:08, Janne Blomqvist <blomqvist.ja...@gmail.com> wrote: > On Sun, Feb 18, 2018 at 5:48 PM, Paul Richard Thomas > <paul.richard.tho...@gmail.com> wrote: >> Bootstraps and regtests on FC27/x86_64 - OK for trunk? > > Hi, > > thanks for looking into this! > > 1. The patch itself is missing... > > 2. Could you uncomment the commented out part of associate_22.f90 and > check that the tree-original dump is sensible. > > 3. Same for the testcases posted to PR 83975. I suspect (err, hope) > that this patch would fix those as well. If so, please add that PR to > the ChangeLog entries as well. > >> >> Paul >> >> 2018-02-18 Paul Thomas <pa...@gcc.gnu.org> >> >> PR fortran/83344 >> * resolve.c (resolve_assoc_var): Character associate names that >> have no length expression that have variable targets and are >> not deferred length have assumed length. >> * trans-decl.c (gfc_get_symbol_decl): Set 'length' to >> gfc_index_zero_node for character associate names, whose string >> length is a PARM_DECL. >> >> 2018-02-18 Paul Thomas <pa...@gcc.gnu.org> >> >> PR fortran/83344 >> * gfortran.dg/associate_36.f90: New test. > > > > -- > Janne Blomqvist -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein
Index: gcc/fortran/resolve.c =================================================================== *** gcc/fortran/resolve.c (revision 257787) --- gcc/fortran/resolve.c (working copy) *************** resolve_assoc_var (gfc_symbol* sym, bool *** 8656,8662 **** sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind, NULL, target->value.character.length); ! else gfc_error ("Not Implemented: Associate target with type character" " and non-constant length at %L", &target->where); } --- 8656,8663 ---- sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind, NULL, target->value.character.length); ! /* If the target is a variable, it is an assumed length dummy. */ ! else if (target->expr_type != EXPR_VARIABLE) gfc_error ("Not Implemented: Associate target with type character" " and non-constant length at %L", &target->where); } Index: gcc/fortran/trans-decl.c =================================================================== *** gcc/fortran/trans-decl.c (revision 257787) --- gcc/fortran/trans-decl.c (working copy) *************** gfc_get_symbol_decl (gfc_symbol * sym) *** 1712,1718 **** if (sym->attr.associate_var && sym->ts.u.cl->backend_decl ! && VAR_P (sym->ts.u.cl->backend_decl)) length = gfc_index_zero_node; else length = gfc_create_string_length (sym); --- 1712,1719 ---- if (sym->attr.associate_var && sym->ts.u.cl->backend_decl ! && (VAR_P (sym->ts.u.cl->backend_decl) ! || TREE_CODE (sym->ts.u.cl->backend_decl) == PARM_DECL)) length = gfc_index_zero_node; else length = gfc_create_string_length (sym); Index: gcc/testsuite/gfortran.dg/associate_36.f90 =================================================================== *** gcc/testsuite/gfortran.dg/associate_36.f90 (nonexistent) --- gcc/testsuite/gfortran.dg/associate_36.f90 (working copy) *************** *** 0 **** --- 1,28 ---- + ! { dg-do run } + ! + ! Test the fix for PR83344. + ! + ! Contributed by <Janne Blomqvist <j...@gcc.gnu.org> + ! + program foo + implicit none + character(len=1) a + character(len=2) b + character(len=3) c + a = 'a' + call bah(a, len (a)) + b = 'bb' + call bah(b, len (b)) + c = 'ccc' + call bah(c, len (c)) + contains + subroutine bah(x, clen) + implicit none + integer :: clen + character(len=*), intent(in) :: x + associate(y => x) + if (len(y) .ne. clen) stop 1 + if (y .ne. x) stop 2 + end associate + end subroutine bah + end program foo