GNU bug report logs -
#29959
cc-mode: wrong indentation in absence of semicolon
Previous Next
Reported by: Konstantin Kharlamov <hi-angel <at> yandex.ru>
Date: Wed, 3 Jan 2018 06:03:02 UTC
Severity: minor
Tags: fixed
Done: Noam Postavsky <npostavs <at> users.sourceforge.net>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Hello, Konstantin.
On Sat, Jan 13, 2018 at 14:11:31 +0300, Konstantin Kharlamov wrote:
> Just tested with current git, the problem is still present.
> I am almost sure this is a regression, I don't remember having that
> problem before. The real-world consequences are just too annoying for it
> to go unnoticed — basically, every time I'm typing variables indentation
> just doesn't work. And I also seem to remember a few irrelevant
> situations where I was typing conditions with the like results.
The problem originates in a new feature, C99 compound literals, which was
committed on 2017-11-10. This detects brace blocks (meaning something
like the initialisation of a struct) in the middle of executable code,
but it is clear the test for such a brace block isn't rigorous enough,
since even function blocks are being mistaken for them.
> On 03.01.2018 09:02, Konstantin Kharlamov wrote:
> > # Steps to reproduce:
> > 1. Open emacs -Q test.c
> > 2. Write the following:
> > int main() {
> > int a,
> > }
> > 3. put the caret after the comma symbol, and press enter, e.g. to
> > continue writing variables on the new line.
> > # Expected:
> > the new line alignment stands out with regard to the prev. line.
> > # Actual:
> > the new line aligned to the beginning of the prev. line.
> > # Workarounds:
> > Typing the following text:
> > int main() {
> > int a,;
> > }
> > …then pressing enter right after the comma works as expected.
At the moment, the bug you're seeing is triggered by CC Mode checking for
commas and semicolons in blocks; if the last such delimiter is a comma,
the block is taken as a brace block. So a workaround, for the moment, is
to ensure that you have a semicolon in each block as the last delimiter
there.
I will be working on fixing this bug. Thanks for taking the trouble to
report it.
> > ------------
> > In GNU Emacs 27.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.26)
> > of 2017-12-15 built on constantine-N61Ja
> > Repository revision: 6c301afa70f6eac32ad1ce92412ea3cf6fcdeeca
> > Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
> > System Description: Arch Linux
[ .... ]
--
Alan Mackenzie (Nuremberg, Germany).
This bug report was last modified 7 years and 109 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.