On Wed, Sep 22, 2021 at 7:05 PM Michel Morin <mimomo...@gmail.com> wrote:

   On Thu, Sep 23, 2021 at 5:09 AM Jason Merrill <ja...@redhat.com> wrote:
    >
    > On 9/21/21 20:53, Michel Morin wrote:
    > > On Tue, Sep 21, 2021 at 5:24 AM Jason Merrill
   <ja...@redhat.com> wrote:
    > >>
    > >> On 9/17/21 13:31, Michel Morin wrote:
    > >>> On Fri, Sep 17, 2021 at 3:23 AM Jason Merrill
   <ja...@redhat.com> wrote:
    > >>>>
    > >>>> On 9/16/21 11:50, Michel Morin wrote:
    > >>>>> On Thu, Sep 16, 2021 at 5:44 AM Jason Merrill
   <ja...@redhat.com> wrote:
    > >>>>>>
    > >>>>>> On 9/14/21 04:29, Michel Morin via Gcc-patches wrote:
    > >>>>>>> On Tue, Sep 14, 2021 at 7:14 AM David Malcolm
   <dmalc...@redhat.com> wrote:
    > >>>>>>>>
    > >>>>>>>> On Tue, 2021-09-14 at 03:35 +0900, Michel Morin via
   Gcc-patches wrote:
    > >>>>>>>>> Hi,
    > >>>>>>>>>
    > >>>>>>>>> PR77565 reports that, with the code `typdef int Int;`,
   GCC emits
    > >>>>>>>>> "did you mean 'typeof'?" instead of "did you mean
   'typedef'?".
    > >>>>>>>>>
    > >>>>>>>>> This happens because the typo corrector determines that
   `typeof` is a
    > >>>>>>>>> candidate for suggestion (through
    > >>>>>>>>> `cp_keyword_starts_decl_specifier_p`),
    > >>>>>>>>> but `typedef` is not.
    > >>>>>>>>>
    > >>>>>>>>> This patch fixes the issue by adding `typedef` as a
   candidate. The
    > >>>>>>>>> patch
    > >>>>>>>>> additionally adds the `inline` specifier and
   cv-specifiers as a
    > >>>>>>>>> candidate.
    > >>>>>>>>> Here is a patch (tests `make check-gcc` pass on darwin):
    > >>>>>>>>
    > >>>>>>>> Thanks for this patch (and for reporting the bug in the
   first place).
    > >>>>>>>>
    > >>>>>>>> I notice that, as well as being used for fix-it hints by
    > >>>>>>>> lookup_name_fuzzy (indirectly via suggest_rid_p),
    > >>>>>>>> cp_keyword_starts_decl_specifier_p is also used by
    > >>>>>>>> cp_lexer_next_token_is_decl_specifier_keyword, which is
   used by
    > >>>>>>>> cp_parser_lambda_declarator_opt and
   cp_parser_constructor_declarator_p.
    > >>>>>>>
    > >>>>>>> Ah, you're right! Thank you for pointing this out.
    > >>>>>>> I failed to grep those functions somehow.
    > >>>>>>>
    > >>>>>>> One thing that confuses me is that
   cp_keyword_starts_decl_specifier_p
    > >>>>>>> misses many keywords that can start decl-specifiers (e.g.
    > >>>>>>> typedef/inline/cv-qual and friend/explicit/virtual).
    > >>>>>>> So let's wait C++ frontend maintainers ;)
    > >>>>>>
    > >>>>>> That is strange.  Let's add all the rest of them as well.
    > >>>>>
    > >>>>> Done. Thanks for your help!
    > >>>>>
    > >>>>> One more thing — cp_keyword_starts_decl_specifier_p
   includes RID_ATTRIBUTE
    > >>>>> (from the beginning; see https://gcc.gnu.org/PR28261 ), but
   attributes are
    > >>>>> not decl-specifiers. Would it be reasonable to remove this?
    > >>>>
    > >>>> It looks like the place that PR28261 used
    > >>>> cp_lexer_next_token_is_decl_specifier_keyword specifically
   exempts
    > >>>> attributes:
    > >>>>
    > >>>>>             &&
   (!cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer)
    > >>>>>                 /* GNU attributes can actually appear both
   at the start of
    > >>>>>                    a parameter and parenthesized declarator.
    > >>>>>                    S (__attribute__((unused)) int);
    > >>>>>                    is a constructor, but
    > >>>>>                    S (__attribute__((unused)) foo) (int);
    > >>>>>                    is a function declaration.  */
    > >>>>>                 || (cp_parser_allow_gnu_extensions_p (parser)
    > >>>>>                     &&
   cp_next_tokens_can_be_gnu_attribute_p (parser)))
    > >>>>
    > >>>> So yes, let's remove RID_ATTRIBUTE and the || clause there. 
   I'd keep
    > >>>> the comment, but move it to go with the test for C++11
   attributes below.
    > >>>
    > >>> Done. No regressions introduced.
    > >>>
    > >>>>> One more thing — cp_keyword_starts_decl_specifier_p
   includes RID_ATTRIBUTE
    > >>>>> (from the beginning; see https://gcc.gnu.org/PR28261 ), but
   attributes are
    > >>>>> not decl-specifiers.
    > >>>
    > >>> Oh, this is wrong. I thought that, since C++11 attributes are
   not a
    > >>> decl-specifier, neither are GNU attributes. But the comment
   just before
    > >>> cp_parser_decl_specifier_seq says that GNU attributes are
   considered as a
    > >>> decl-specifier. So I'm not confident about the removal of
   RID_ATTRIBUTE in
    > >>> cp_keyword_starts_decl_specifier_p...
    > >>
    > >> GNU attributes can appear in lots of places, and the only two
   callers of
    > >> cp_parser_next_token_is_decl_specifier_keyword don't want to treat
    > >> attributes accordingly.
    > >
    > > Makes sense.
    > >
    > >> Let's go with both your patches, and also
    > >> remove the consequently-unnecessary attributes check in
    > >> cp_parser_lambda_declarator_opt:
    > >>
    > >>>    if (cp_lexer_next_token_is_decl_specifier_keyword
   (parser->lexer)
    > >>>        && !cp_next_tokens_can_be_gnu_attribute_p (parser))
    > >>
    > >> OK with that change.
    > >
    > > Updated and rebased the patch. No regressions on
   x86_64-apple-darwin.
    > >
    > > Thank you for your help!
    >
    > Looks good, thanks.  You can push the patches yourself, right?

   This is my first patch contribution to GCC, and I don't have write
   access.
   So it'd be great if someone pushes the patches.


Ah!  Sorry, I was confusing you with Mikael Morin <mikael.mo...@sfr.fr>, who does have write access.

I assume these patches are small enough that copyright assignment or
DCO certification are not needed. (If needed, I'll prepare one.)

Agreed.

I applied the patches, adjusting the name in the commit to match the name on your email (rather than "morinmorin").

Thanks!

Jason

Reply via email to