public inbox for fortran@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mikael Morin <morin-mikael@orange.fr>
To: Harald Anlauf <anlauf@gmx.de>, fortran@gcc.gnu.org
Cc: gcc-patches@gcc.gnu.org
Subject: Re: [PATCH] Fortran: error recovery on invalid array reference of non-array [PR103590]
Date: Tue, 19 Jul 2022 22:53:01 +0200	[thread overview]
Message-ID: <bd1e25ed-c977-b5c9-fbeb-a37c1317e56f@orange.fr> (raw)
In-Reply-To: <26b7b8f2-fd97-058c-40e1-d16b4e26880e@gmx.de>

Le 19/07/2022 à 21:09, Harald Anlauf via Fortran a écrit :
> Hi Mikael,
> 
> Am 19.07.22 um 11:03 schrieb Mikael Morin:
>> Hello,
>>
>> the principle looks good, but...
>>
>> Le 18/07/2022 à 22:43, Harald Anlauf via Fortran a écrit :
>>
>>> diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
>>> index 2ebf076f730..dacd33561d0 100644
>>> --- a/gcc/fortran/resolve.cc
>>> +++ b/gcc/fortran/resolve.cc
>>> @@ -5004,7 +5004,11 @@ find_array_spec (gfc_expr *e)
>>>        {
>>>        case REF_ARRAY:
>>>      if (as == NULL)
>>> -      gfc_internal_error ("find_array_spec(): Missing spec");
>>> +      {
>>> +        gfc_error ("Symbol %qs at %L has not been declared as an 
>>> array",
>>> +               e->symtree->n.sym->name, &e->where);
>>
>> ... the error here only makes sense if the array reference follows a 
>> variable reference.  If it follows a derived type component reference, 
>> a slightly different error message would be more appropriate.
> 
> how detailed or tailored should the error message be, or can
> we just have a more generic message, like "Name at %L ...",
> or "Invalid subscript reference at %L"?  We seem to not hit
> that internal error very often...
> 
It could be anything better than the (unhelpfull) internal error it is 
replacing.
I suggest for example "Invalid array reference of a non-array entity at 
%L".  Cray’s words, or Intel’s, or your other propositions work as well.

> 
> gfortran's behavior during error handling is difficult to understand.
> While the proposed new error message is emitted for associate_54.f90,
> it never makes it far enough for the testcase of the present PR
> (associate_59.f90).
> 
Indeed.  We try to match several types of statement one after the other, 
and each failed match can possibly register an error.  But it is emitted 
only if all have failed (see gfc_error_check).  There is no choice of 
the best error; the last one registered wins.

This buffering behavior is controlled by calls to gfc_buffer_error(...). 
  Error handling during resolution doesn’t need to delay error reporting 
as far as I know, and the calls to gfc_buffer_error (false) seem to 
correctly disable buffering at the end of every call to next_statement. 
  I don’t know why it remains active in this case.

  parent reply	other threads:[~2022-07-19 20:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-18 20:43 Harald Anlauf
2022-07-19  9:03 ` Mikael Morin
2022-07-19 19:09   ` Harald Anlauf
2022-07-19 19:09     ` Harald Anlauf
2022-07-19 20:53     ` Mikael Morin [this message]
2022-07-19 21:34       ` Harald Anlauf
2022-07-19 21:34         ` Harald Anlauf
2022-07-20  9:40         ` Mikael Morin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bd1e25ed-c977-b5c9-fbeb-a37c1317e56f@orange.fr \
    --to=morin-mikael@orange.fr \
    --cc=anlauf@gmx.de \
    --cc=fortran@gcc.gnu.org \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).