AFAICS current trunk still has this issue. Any takers? thanks, On Sun, 2 Sep 2018 17:16:07 +0200 Bernhard Reutner-Fischer <rep.dot....@gmail.com> wrote:
> i spotted one > (pre-existing) possible inconsistency that i did overlook back then: > > gfc_match_associate () reads > ... > if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) > { > /* Have another go, allowing for procedure pointer selectors. */ > gfc_matching_procptr_assignment = 1; > if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) > { > gfc_error ("Invalid association target at %C"); > goto assocListError; > } > gfc_matching_procptr_assignment = 0; > } > > i.e. we retry a match, but in the second attempt we turn on procptr > assignment matching and if that works, we turn procptr assignment > matching off again. > But if we fail that retry, we forget to turn it off again. > I suppose we should: > > $ svn diff -x -p gcc/fortran/match.c > Index: gcc/fortran/match.c > =================================================================== > --- gcc/fortran/match.c (revision 264040) > +++ gcc/fortran/match.c (working copy) > @@ -1898,13 +1898,16 @@ gfc_match_associate (void) > if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) > { > /* Have another go, allowing for procedure pointer selectors. */ > + match m; > + > gfc_matching_procptr_assignment = 1; > - if (gfc_match (" %e", &newAssoc->target) != MATCH_YES) > + m = gfc_match (" %e", &newAssoc->target); > + gfc_matching_procptr_assignment = 0; > + if (m != MATCH_YES) > { > gfc_error ("Invalid association target at %C"); > goto assocListError; > } > - gfc_matching_procptr_assignment = 0; > } > newAssoc->where = gfc_current_locus; > > > Untested. Maybe someone wants to give it a whirl... > If it wrecks havoc then leaving it set deliberately deserves at least a > comment. > > PS: It would be nice to get rid of gfc_matching_procptr_assignment, > gfc_matching_ptr_assignment, gfc_matching_prefix, FWIW. > cheers, > > > > Thanks everyone! > > > > Cheers, > > Janus