Subject: Re: bug#341: c-indent-command misindents?

From: Andrew Hyatt <[email-masked]>
Date: Sun, 10 Jan 2016 22:12:40 -0500

Andrew Hyatt <[email-masked]> writes:

> On Tue, Dec 29, 2015 at 3:30 PM Alan Mackenzie <[email-masked]> wrote:
>
>
>  Hello Andrew and Kristóf.
>
>  On Mon, Dec 28, 2015 at 07:48:22PM -0500, Andrew Hyatt wrote:
>
>  > I've reproduced this bug in emacs 25.
>
>  > It seems like a real problem, thanks (belatedly) for reporting!
>
>  Yes, it's a known problem in CC Mode, and it's seriously difficult to
>  fix. Parsing happens mainly in the backwards direction, and in general,
>  the #ifdefs in a file form a tree structure. Which is the line previous
>  to line 6? It could be L4, it could be L2. Typically, such "parallel"
>  text lines aren't nice and compatible, the way they are in this example.
>  Indeed, it's possible to construct an example where L6 has two
>  alternative syntactic contexts, depending on whether A is defined. In
>  fact, something like:
>
>  #ifdef A
>  int foo(int a, int b)
>  #else
>  int bar(int a, int b)
>  {
>  if (a > b)
>  #endif
>  {
>  return a+b;
>  }
>
>  would do it.
>
>  I don't know if this problem will ever be fixed.
>
>
> Perhaps the right thing to do is to mark it as "wontfix" since it's unlikely to be possible without a big rewrite. What do you think?

I'm going to go ahead and do that, due to lack of opposition. Please
unmark or just let me know if you disagree.

>
>
>  > "Ralovich, "Kristóf\"" <[email-masked]> writes:
>
>  > > Hi,
>
>  > > I hope this letter ends up at the right maintainers!
>
>  > > My problem is when running c-indent-command (by pressing TAB or
>  > > calling it directly) on the 4th line of the following small snippet
>  > > (same as attached file):
>
>  > > 1: #ifdef A
>  > > 2: int foo(int a, int b)
>  > > 3: #else
>  > > 4: int bar(int a, int b)
>  > > 5: #endif
>  > > 6: {
>  > > 7: return a+b;
>  > > 8: }
>
>  > > the line is getting indented falsely:
>
>  > > 1: #ifdef A
>  > > 2: int foo(int a, int b)
>  > > 3: #else
>  > > 4: int bar(int a, int b)
>  > > 5: #endif
>  > > 6: {
>  > > 7: return a+b;
>  > > 8: }
>
>  > > I think, it should not get indented, please correct me if I am wrong!
>
>  > > I am using emacs 22.2 with it's default cc-mode.
>
>  > > Looking forward to hearing from you!
>
>  > > Kristóf
>
>  --
>  Alan Mackenzie (Nuremberg, Germany).