GNU bug report logs - #72695
CC Mode 5.35.2 (C++//l); c++-mode misindents 'if constexpr' inside lambdas

Previous Next

Package: cc-mode;

Reported by: Arsen Arsenović <arsen <at> aarsen.me>

Date: Sun, 18 Aug 2024 09:52:02 UTC

Severity: normal

Done: Alan Mackenzie <acm <at> muc.de>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Arsen Arsenović <arsen <at> aarsen.me>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 72695 <at> debbugs.gnu.org
Subject: bug#72695: CC Mode 5.35.2 (C++//l); c++-mode misindents 'if constexpr' inside lambdas
Date: Fri, 27 Sep 2024 23:54:57 +0200
[Message part 1 (text/plain, inline)]
Hi Alan,

Alan Mackenzie <acm <at> muc.de> writes:

> I've now committed a slightly different patch, after noticing and fixing
> another bug.
>
> The bug was that in code like
>
> 1 template <typename T>
> 2 requires requires (T x)
> 3 { x + x; }
> 4 T add(T a, T b)
> 5 {
> 6    return a + b;
> 7 }
>
> , L4, a topmost-intro-cont used to be anchored on the previous
> topmost-intro-cont line, L2, whereas it should be anchored on the
> topmost-intro, L1.
>
> I've now corrected this.

Ah!  Good catch.

> I didn't send you yet another patch with request for testing, because
> I've done that rather a lot of late, and I'm confident about the patch.
>
> I haven't yet closed the bug, just in case you wanted to do some final,
> final testing on the committed version.  Please let me know what you feel
> about that, so that I can finally close this bug.

I'm not sure this is a bug but it is something I noticed by accident:

      (std::visit
       ([] <typename T>
       	(const T& data)
	{
        }));

... the { is not an inline-open, but an arglist-cont-nonempty (though,
to be clear, the body is indented okay; I've elided it from the example
above for that reason).

Same goes for the (const T& data), which doesn't get indented the same
as a 'standalone' lambda, but it does indent the same as one saved into
a variable:

  []
    ()
  {
  };
  auto x =
    []
    ()
    {
    };
  auto x =
    ([]
     ()
    {
    });

I do not know whether this is correct.

But thank you again for working on this!

Have a lovely day.
-- 
Arsen Arsenović
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 294 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.