https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56520

--- Comment #8 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Tue, Jul 07, 2015 at 07:10:48PM +0000, casey.webster at gmail dot com wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56520
> 
> --- Comment #7 from Casey Webster <casey.webster at gmail dot com> ---
> (In reply to Steve Kargl from comment #6)
> > On Tue, Jul 07, 2015 at 05:23:17PM +0000, casey.webster at gmail dot com
> > wrote:
> > > 
> > > Also, while I'll agree that "Unclassifiable statement" is better
> > > than "Invalid character in name", it would be nicer to see
> > > "Unbalanced parenthesis".
> > > 
> > 
> > I'm sorry that gfortran does not meet your needs.  But, given
> > how gfortran's matchers work, I doubt that anyone will produce
> > a patch to do what you want.  I could be wrong.  Maybe someone
> > will take up the challenge.
> > 
> > The patch I developed and committed specifically addresses a
> > problem where the error message and the locus to which it
> > pointed are simply wrong.  In 'c = exp(+a))', the old error
> > message pointed to '+', which is a valid token in a valid
> > expression.
> 
> Understood.  In this case would it be proper to request the other bug I filed
> be un-marked as a duplicate of this one so this one can be resolved and the
> other can still be fodder for someone with enough spare time and desire to 
> look
> into it?  Thanks for your patch btw, I only complained here since my bug was
> duped to this one.
> 

Sure, you could re-open the bug, but I doubt any of the current
gfortran contributors will ever attempt to 'fix' the issue.  The
problem lies in how gfortran matches statements.  It attempts to
match a valid statement.  If it fails, gfortran will queue an
error message, back-up to what it considers a known good state,
and then call another matcher.  gfortran repeats this process 
for a collection of matchers.  Consider an implied do-loop
in a print statement:

  print *, (x(i), i = 1, 2)

gfortran will first attempt to match a complex constant of the
form (x, y).  This fails and an error is queued.  Then a matcher
for implied-do is run.  It successes and clears the error queue.

Now, your problem is all matchers fail and the first error
(or last because I can't remember) is printed.  Sometimes those
error messages are a little muddled.

Reply via email to