Subject: bug#64322: CC Mode 5.35.2 (C/*l); More incorrect type recognition

From: Po Lu <[email-masked]>
Date: Sat, 01 Jul 2023 08:22:41 +0800

Alan Mackenzie <[email-masked]> writes:

> Hello, Po.
>
> On Wed, Jun 28, 2023 at 15:05:03 +0800, Po Lu via CC-Mode-help wrote:
>> Package: cc-mode
>
>> I just encountered a new instance of CC Mode misrecognizing identifiers
>> as types.  In a C Mode buffer, insert:
>
>> void
>> add_property (name, expression)
>
>> then, type:
>
>> RET TAB s t r u c t SPC e x p r e s s i o n SPC e x p r e s s i o n ;
>
>> `expression' will then be fontified as a type within the function
>> declarator's identifier list!
>
> Yes.  The problem was a confusion between C++ and C regarding type
> definition.  In C++, "class Foo" or "struct Foo" defines a type "Foo".
> In C, in "struct Foo", there is no such type defined, "Foo" is merely a
> struct tag.
>
> This involves a one line fix in cc-langs.el, to remove items from the
> lang const c-typeless-decl-kwds.  Additionally, I've corrected an
> unrelated typo in cc-fonts.el.
>
> Would you please try out the attached patch in your real code
> thoroughly, and either confirm the bug is fixed, or tell me what's still
> wrong.  Thanks!
>
>> Thanks in advance.
>
>> Emacs  : GNU Emacs 29.0.92 (build 1, x86_64-pc-linux-gnu)
>>  of 2023-06-25
>> Package: CC Mode 5.35.2 (C/*l)
>> Buffer Style: gnu
>> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties category-properties 1-bit)

Seems to work here, thanks.  Eli, could we have this on the emacs-29
branch?