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

--- Comment #5 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
(In reply to Dominique d'Humieres from comment #4)
> Compiling the test in comment 0 with 5.2.0 or trunk gives an ICE
> 
> in gfc_format_decoder, at fortran/error.c:936

There is an assert at that line:

 gcc_assert (loc->nextc - loc->lb->line >= 0);

why is it not true?

This predates my changes, since the original code did not have a correct
location there either, that is why it printed 

  if (l1 == NULL || l1->lb == NULL)
    {
      error_printf ("<During initialization>\n");
      return;
    }

If printing that is the correct behavior (which the original reporter thinks is
not), then the assert needs to be replaced with something else. When Tobias and
I moved Fortran to the common diagnostics, it was not clear what should happen
with some Fortran specific codes (like the one that handles "<During
initialization>"). The code is still there, but it is not used anymore.
Ideally, Fortran devs should decide what behavior they expect and figure out a
way to implement this behavior. I'm certain it is possible with either no or
minimal changes to the common diagnostics. In this case, it is a matter of
implementing whatever behavior Fortran wants on either gfc_diagnostic_starter
or gfc_diagnostic_finalizer.

(Have you tried patch in comment #2?)

Reply via email to