Subject: bug#7327: 24.0.50; cc-mode: default indentation inconsistent with typedefs

From: Alan Mackenzie <[email-masked]>
Date: Thu, 3 Jun 2021 11:38:37 +0000

Hello, Lars

On Wed, Jun 02, 2021 at 10:48:11 +0200, Lars Ingebrigtsen wrote:
> Christoph <[email-masked]> writes:

> > Start with `emacs -Q'. Start new .c file.

> > Type `typedef enum' then hit `C-j', then `{'.

> > The code is indented like this:

> > typedef enum
> >   {
> >     blabla

> > Then try `typedef struct', `C-j', '{'.

> > The code is indented like this:

> > typedef struct
> > {
> >   blabla

> This behaviour is still present in Emacs 28.

> Alan, is this behaving as designed, or is it a bug?

It's kind of both.  The issue came up on 2014-02-19 in a post from Xue
Fuqiao on the CC Mode list.  This behaviour has been in place since at
least 2000-01-16, and I decided in 2014 that to fix the bug would result
in too much chaos, with "typedef enum"s, lots of them, suddenly becoming
mis-indented.

The root of the problem is that the CC Mode syntactic symbol
brace-list-open is used for both typedef enums (as above) and for the
initialisation of structs with literals.  This economy was a mistake,
with the benefit of hindsight.

So I think I would still rather not fix this bug, since it has at least
two decades' standing.

Sorry!

> -- 
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no

-- 
Alan Mackenzie (Nuremberg, Germany).