From debbugs-submit-bounces@debbugs.gnu.org Mon Mar 29 10:45:18 2021 Received: (at submit) by debbugs.gnu.org; 29 Mar 2021 14:45:18 +0000 Received: from localhost ([127.0.0.1]:49216 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lQt8m-0000ZP-Ju for submit@debbugs.gnu.org; Mon, 29 Mar 2021 10:45:18 -0400 Received: from lists.gnu.org ([209.51.188.17]:42212) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lQrJP-0005ta-Cl for submit@debbugs.gnu.org; Mon, 29 Mar 2021 08:48:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40396) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lQrJP-000251-3y for bug-gnu-emacs@gnu.org; Mon, 29 Mar 2021 08:48:07 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:33645) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lQrJN-0005LC-EK for bug-gnu-emacs@gnu.org; Mon, 29 Mar 2021 08:48:06 -0400 Received: by mail-pf1-x42b.google.com with SMTP id x26so9845073pfn.0 for ; Mon, 29 Mar 2021 05:48:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=HoboZmopz6Vvjx1GCFSQm1MWubTeC1Wfvjj0xKIIU3E=; b=cFklAcK22CQkf9tDVd2BRqCLycSc8N3QhpCyjqy2wEMgxeu7VfL5zNozKta6cLOKHN fxXyM1S+K2EOK5kb4NEEqQFPiPrU9bcWpuT9QOyQPvyr9g6MuPa5EAnhhVR5Bveetojr 3AxPUq/U5c4hYywjlrrOznMpP/avskR9czYhS9DtpQlp5Iql3yjQXhnspajdWUMNs2ko GtpasAmnWRKJAp/i9d7SzUP/7MJgoA1yQ+E9YPhyZypCjMWkkyS7ZmF4vveY8Aa9am3H D5SvMNe7RfPg3+J3jlBLFXkoNFVp8k5RzRcfCpf21BKS6Qq/br2ccfc+5wgWqAIBBMNf QkFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=HoboZmopz6Vvjx1GCFSQm1MWubTeC1Wfvjj0xKIIU3E=; b=fFDQCIjJojK29FZc4vA6gD3RWYQdfiMWMHGINg2ddrJ1oY/+8QFLGQ9ntSIWtpU4UF PbmXjn4V/2HXL7xFapQL0dydWUV784m5kmvWiyCQcY5U2oHpMHJkncXcb616wDqvF054 9Usi3JW3fud9UKB3/AvczoO1uSx+AD+qy04nlCez0O5VKT8welbkqqV/lfyda6F5APgg ckvdI6znPpYJFwM792izhj26lA88q7l8g/38BLGTckTN1hXvt7lElBsfFCvidqGpNj+Y BZAWK0mnxziyomxCUFQ5AvP9CPHdCQOKVz1+7AXFCOpP+syVeln5dpVawrINWGJG2ejy Y0cA== X-Gm-Message-State: AOAM531gvLvDTlKjw4yWvNspiakaGCG1TOq4iyk0sJTh2/UcansZpedy mcK075lW4EwXRLo9rVYgXJBqgwLOVjL2TIwAET4CSkwIPDPjsA== X-Google-Smtp-Source: ABdhPJziNN8rNeWrImOTFnlKBfDjYhRSc8S5nw6awDpPkos/g7q1G9yjT+hTuDMclS0+ta3D+rLx/Uk2bjPqgLr/Q90= X-Received: by 2002:a63:e80a:: with SMTP id s10mr23900151pgh.380.1617022082941; Mon, 29 Mar 2021 05:48:02 -0700 (PDT) MIME-Version: 1.0 From: Jianbin Kang Date: Mon, 29 Mar 2021 20:47:52 +0800 Message-ID: Subject: 27.1; cc-mode: Got incorrect indentaton for C++ lambda function. To: bug-gnu-emacs@gnu.org Content-Type: multipart/alternative; boundary="000000000000d90a6305beac4a6b" Received-SPF: pass client-ip=2607:f8b0:4864:20::42b; envelope-from=kjbmail@gmail.com; helo=mail-pf1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.3 (-) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Mon, 29 Mar 2021 10:45:14 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) --000000000000d90a6305beac4a6b Content-Type: text/plain; charset="UTF-8" The c++ file to reproduce it: ```c++ #include #include struct PP { const char * name; }; static void print(const char *name, std::function f) { f(name); } int main(int argc, char *argv[]) { PP A = { "Jim" }; PP *a = &A; print(A.name, [](const char *name) { printf("%s\n", name); // Syntactic ((inlambda) ... }); print(a->name, [=](const char *name) { printf("%s\n", name); // Syntactic((arglist-cont-nonempty ... }); return 0; } ``` If I put cursor in lambda body of first print call, and run 'c-show-syntactic-information', it shows 'Syntactic analysis: ((inlambda) (defun-block-intro 258))', which is correct and I get good indentation. But in second print call, I get 'Syntactic analysis: ((arglist-cont-nonempty 337 342) (statement-block-intro 337))' and the indentation is bad. My emacs version is 27.1. I can reproduce the problem in both Linux and Windows with 'emacs -Q'. --000000000000d90a6305beac4a6b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

The c++ file to reproduce it:
```c++
#include &l= t;stdio.h>
#include <functional>

struct PP {
=C2=A0 = =C2=A0 const char * =C2=A0 =C2=A0 =C2=A0 =C2=A0name;
};

static vo= id print(const char *name, std::function<void(const char *)> f)
{<= br>=C2=A0 =C2=A0 f(name);
}

int main(int argc, char *argv[])
{=
=C2=A0 =C2=A0 PP A =3D { "Jim" };
=C2=A0 =C2=A0 PP *a =3D = &A;

=C2=A0 =C2=A0 print(A.name, [](const char *name) {
=C2=A0= =C2=A0 =C2=A0 =C2=A0 printf("%s\n", name); =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 // Syntactic ((inlambda) ...
=C2=A0 =C2=A0 });
=C2=A0 = =C2=A0 print(a->name, [=3D](const char *name) {
=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 printf("%s\n", name); =C2=A0 =C2=A0 =C2=A0 /= / Syntactic((arglist-cont-nonempty ...
=C2=A0 =C2=A0 =C2=A0 =C2=A0 });
=C2=A0 =C2=A0 return 0;
}

```

If I put cursor in lam= bda body of first print call, and run 'c-show-syntactic-information'= ;, it shows 'Syntactic analysis: ((inlambda) (defun-block-intro 258))&#= 39;, which is correct and I get good indentation.

But in second prin= t call, I get 'Syntactic analysis:
((arglist-cont-nonempty 337 342) = (statement-block-intro 337))' and the
indentation is bad.

My = emacs version is 27.1. I can reproduce the problem in both Linux and Window= s with 'emacs -Q'.



--000000000000d90a6305beac4a6b-- From debbugs-submit-bounces@debbugs.gnu.org Wed May 12 17:57:37 2021 Received: (at 47468) by debbugs.gnu.org; 12 May 2021 21:57:37 +0000 Received: from localhost ([127.0.0.1]:40774 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgwrI-0003vN-Sh for submit@debbugs.gnu.org; Wed, 12 May 2021 17:57:37 -0400 Received: from quimby.gnus.org ([95.216.78.240]:35276) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lgwrF-0003v2-WE for 47468@debbugs.gnu.org; Wed, 12 May 2021 17:57:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=AcqqMo2Gmfvi0SqU+lcUxl+/CF1N+zekmTIvnf4KXs0=; b=k16MbtH00RNpftKrbQANJipvba bnA0uEuLv4td6cOKMMEhXagfzKNFSnD3M1SAex/i5ETj6L4nmtYy8VURvDzyKCXquIGJxR0U8vlQj 5MWv4DqQKLMJ1j9WQ/UhfRbDjNUbrTfIu8QNyCS0wY/cde6GMM2hYTQeDkSIiHk+85Bg=; Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=xo) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lgwr6-00025r-TS; Wed, 12 May 2021 23:57:27 +0200 From: Lars Ingebrigtsen To: Jianbin Kang Subject: Re: bug#47468: 27.1; cc-mode: Got incorrect indentaton for C++ lambda function. References: X-Now-Playing: Zola Jesus's _Versions_: "Night" Date: Wed, 12 May 2021 23:57:24 +0200 In-Reply-To: (Jianbin Kang's message of "Mon, 29 Mar 2021 20:47:52 +0800") Message-ID: <87r1ibsji3.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Jianbin Kang writes: > int main(int argc, char *argv[]) > { > PP A = { "Jim" }; > PP *a = &A; > > print(A.name, [](const char *name) { > printf("%s\n", name); // Syntactic ((inlambda) ... > }); > print(a->name, [=](const [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47468 Cc: Alan Mackenzie , 47468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain Jianbin Kang writes: > int main(int argc, char *argv[]) > { > PP A = { "Jim" }; > PP *a = &A; > > print(A.name, [](const char *name) { > printf("%s\n", name); // Syntactic ((inlambda) ... > }); > print(a->name, [=](const char *name) { > printf("%s\n", name); // Syntactic((arglist-cont-nonempty ... > }); > > return 0; [...] > If I put cursor in lambda body of first print call, and run 'c-show-syntactic-information', > it shows 'Syntactic analysis: ((inlambda) (defun-block-intro 258))', which is correct and > I get good indentation. > > But in second print call, I get 'Syntactic analysis: > ((arglist-cont-nonempty 337 342) (statement-block-intro 337))' and the > indentation is bad. I can reproduce this in Emacs 28, too. Poking around a bit, it seems like it's getting tripped up by the "a->name" bit? Changing that to a.name (for instance) makes it recognise the second form as a lambda function... However, the first form is indented wrong for me in Emacs 28: --=-=-= Content-Type: image/png Content-Disposition: inline Content-Transfer-Encoding: base64 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 9d28Iz8AAAAASUVORK5CYII= --=-=-= Content-Type: text/plain This is indented correctly in Emacs 27.1, so it seems like this has regressed between Emacs 27.1 and Emacs 28. I've added Alan to the CCs. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat May 15 10:57:55 2021 Received: (at 47468) by debbugs.gnu.org; 15 May 2021 14:57:55 +0000 Received: from localhost ([127.0.0.1]:49059 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhvjn-0002tY-Fq for submit@debbugs.gnu.org; Sat, 15 May 2021 10:57:55 -0400 Received: from colin.muc.de ([193.149.48.1]:49095 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1lhvjl-0002tK-DF for 47468@debbugs.gnu.org; Sat, 15 May 2021 10:57:53 -0400 Received: (qmail 18552 invoked by uid 3782); 15 May 2021 14:57:46 -0000 Received: from acm.muc.de (p4fe15ace.dip0.t-ipconnect.de [79.225.90.206]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sat, 15 May 2021 16:57:46 +0200 Received: (qmail 19699 invoked by uid 1000); 15 May 2021 14:57:45 -0000 Date: Sat, 15 May 2021 14:57:45 +0000 To: Jianbin Kang Subject: Re: bug#47468: 27.1; cc-mode: Got incorrect indentaton for C++ lambda function. Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Submission-Agent: TMDA/1.3.x (Ph3nix) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47468 Cc: acm@muc.de, Lars Ingebrigtsen , 47468@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Jianbin. Thank you indeed for taking the trouble to report this bug, and thank you even more for cutting the test case down to a concise, easy to work with file. On Mon, Mar 29, 2021 at 20:47:52 +0800, Jianbin Kang wrote: > The c++ file to reproduce it: > ```c++ > #include > #include > struct PP { > const char * name; > }; > static void print(const char *name, std::function f) > { > f(name); > } > int main(int argc, char *argv[]) > { > PP A = { "Jim" }; > PP *a = &A; > print(A.name, [](const char *name) { > printf("%s\n", name); // Syntactic ((inlambda) ... > }); > print(a->name, [=](const char *name) { > printf("%s\n", name); // Syntactic((arglist-cont-nonempty > ... > }); > return 0; > } > ``` > If I put cursor in lambda body of first print call, and run > 'c-show-syntactic-information', it shows 'Syntactic analysis: ((inlambda) > (defun-block-intro 258))', which is correct and I get good indentation. > But in second print call, I get 'Syntactic analysis: > ((arglist-cont-nonempty 337 342) (statement-block-intro 337))' and the > indentation is bad. Yes. What is happening is that CC Mode is falsely recognising the -> in a->name as the trailing return type of the lambda expression. I think the following patch should fix it. Could I ask you, please, to apply this patch to ..../emacs/lisp/progmodes/cc-engine.el, byte-compile the file, and try it out on your real C++ source code. In the unlikely event you want help with the patching or byte-compilation, feel free to send me private email. After this, please either confirm to us that the problem is fixed, or tell us what is still not working. Thanks! diff -r 92a4592886a1 cc-engine.el --- a/cc-engine.el Sun Apr 25 17:26:38 2021 +0000 +++ b/cc-engine.el Sat May 15 14:51:56 2021 +0000 @@ -12269,7 +12269,7 @@ (save-excursion (while (progn - (c-syntactic-skip-backward "^;=}>" closest-lim t) + (c-syntactic-skip-backward "^;=,}>" closest-lim t) (and (eq (char-before) ?>) (c-backward-token-2) (not (looking-at c-haskell-op-re))))) > My emacs version is 27.1. I can reproduce the problem in both Linux and > Windows with 'emacs -Q'. -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Wed May 19 17:22:06 2021 Received: (at 47468) by debbugs.gnu.org; 19 May 2021 21:22:06 +0000 Received: from localhost ([127.0.0.1]:60838 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljTdm-0007vo-I7 for submit@debbugs.gnu.org; Wed, 19 May 2021 17:22:06 -0400 Received: from mail-vs1-f67.google.com ([209.85.217.67]:43826) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ljT7y-00071O-7H for 47468@debbugs.gnu.org; Wed, 19 May 2021 16:49:14 -0400 Received: by mail-vs1-f67.google.com with SMTP id n1so5961333vsr.10 for <47468@debbugs.gnu.org>; Wed, 19 May 2021 13:49:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=IL1evN9dWfAxWpClQ5rjVuR/Yy4LfpvGXgo2Y0Pw/Uk=; b=LlFjnXmC23QFXYjqarJcsp4I6ADLEo78J2LTbRJ64mPacNfC8SEYaLzIMwbkqRrY93 ZYdePt32Mr4Bah8xLascRAVJgUJs4ItxlEYFAioJxU5tRdU+qdiHNMb5dLRdakC7PixH Pn6jpuI4efidP4XU+q7lbxv/1O8N87omh00fSBLGtCj6Gzx95hK1j39lU7IO8KhHs7P0 BSgV058VrH/h56OCWMeE0Odq1d9mnSBaYO8DdZRGxpUtcWUEPCGHoP3CMCp4vhOd2oGC c+huKNwQIOzCxoJ6jmFQ43P2XMTxwfy/zkR7wjWVOlXdS6T+0+J/azZucbViobZGFmrp +Lzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=IL1evN9dWfAxWpClQ5rjVuR/Yy4LfpvGXgo2Y0Pw/Uk=; b=jo+GQKwbR+UJk0GSJtkY2O9pX8JD48pA5Wa5DU9nYF5I1Ib2cbm9vnoArDkYHES4Cc Wo3RWhkiEIvmgEGVu6jYAccxgXoVzmvIBBZ4Qh5deGAjnsC01DPgVXnaVdcgd7ysA4z3 NNgWAhyOim+5hIvVKfC6AOOjdv3krEU7u5/t5AIATcsTNLppABiMuESxOmo1eCMqyLJZ 1Pmn/0Po79936DWw+WdCx9sITw3I2PyjgyI9o4+edASqZMMKpo99e0xrv8kuhk5iW/NN d5dDtyFZ7xHG7gkRkg2qXXVk1IKl8xl0Y5IIcxOUz7ipGb6OQhC/AUU7pE+D9WZRXqsg 4Eeg== X-Gm-Message-State: AOAM533YUFn1GuNq761gzw/HwpK42Sts7LVnQQiJ7ghGfQkmqaSMTzVG lIsDg33mQlTKI4igZnt9VwMUmchKjydqjbDM798GF2GujZ4FDg== X-Google-Smtp-Source: ABdhPJwPSad3/NetgyszKa+bXEQW6XqsD0kqpFU0enqd0xnWaNrUpmYbeWsO6bSs/kYEUmamHprtJTyWyjb0a2bnq/0= X-Received: by 2002:a67:e3a9:: with SMTP id j9mr1477412vsm.41.1621457348563; Wed, 19 May 2021 13:49:08 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ab0:4201:0:0:0:0:0 with HTTP; Wed, 19 May 2021 13:49:08 -0700 (PDT) From: Vladimir Lichevsky Date: Wed, 19 May 2021 23:49:08 +0300 Message-ID: Subject: Re: bug#47468: 27.1; cc-mode: Got incorrect indentaton for C++ lambda function. To: 47468@debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47468 X-Mailman-Approved-At: Wed, 19 May 2021 17:22:05 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Not the original poster, but I tried this patch on recent build of Emacs from master branch (commit 567c31121fdef6bdc8b645999a6ca1d994378c89) and it looks like the patch fixes the bug. From debbugs-submit-bounces@debbugs.gnu.org Sun Aug 15 15:51:20 2021 Received: (at 47468-done) by debbugs.gnu.org; 15 Aug 2021 19:51:20 +0000 Received: from localhost ([127.0.0.1]:47804 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mFMAC-0004zp-54 for submit@debbugs.gnu.org; Sun, 15 Aug 2021 15:51:20 -0400 Received: from colin.muc.de ([193.149.48.1]:58029 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1mFMA9-0004zb-6L for 47468-done@debbugs.gnu.org; Sun, 15 Aug 2021 15:51:19 -0400 Received: (qmail 2112 invoked by uid 3782); 15 Aug 2021 19:51:10 -0000 Received: from acm.muc.de (p2e5d53a5.dip0.t-ipconnect.de [46.93.83.165]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 15 Aug 2021 21:51:09 +0200 Received: (qmail 10644 invoked by uid 1000); 15 Aug 2021 19:51:09 -0000 Date: Sun, 15 Aug 2021 19:51:09 +0000 To: Jianbin Kang Subject: Re: bug#47468: 27.1; cc-mode: Got incorrect indentaton for C++ lambda function. Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Submission-Agent: TMDA/1.3.x (Ph3nix) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 47468-done Cc: acm@muc.de, Lars Ingebrigtsen , 47468-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Jianbin and Lars. Some while has passed since the bug was opened, and since the patch I suggested seems to fix it, I am now closing this bug. -- Alan Mackenzie (Nuremberg, Germany). On Sat, May 15, 2021 at 14:57:45 +0000, Alan Mackenzie wrote: > Hello, Jianbin. > Thank you indeed for taking the trouble to report this bug, and thank > you even more for cutting the test case down to a concise, easy to work > with file. > On Mon, Mar 29, 2021 at 20:47:52 +0800, Jianbin Kang wrote: > > The c++ file to reproduce it: > > ```c++ > > #include > > #include > > struct PP { > > const char * name; > > }; > > static void print(const char *name, std::function f) > > { > > f(name); > > } > > int main(int argc, char *argv[]) > > { > > PP A = { "Jim" }; > > PP *a = &A; > > print(A.name, [](const char *name) { > > printf("%s\n", name); // Syntactic ((inlambda) ... > > }); > > print(a->name, [=](const char *name) { > > printf("%s\n", name); // Syntactic((arglist-cont-nonempty > > ... > > }); > > return 0; > > } > > ``` > > If I put cursor in lambda body of first print call, and run > > 'c-show-syntactic-information', it shows 'Syntactic analysis: ((inlambda) > > (defun-block-intro 258))', which is correct and I get good indentation. > > But in second print call, I get 'Syntactic analysis: > > ((arglist-cont-nonempty 337 342) (statement-block-intro 337))' and the > > indentation is bad. > Yes. What is happening is that CC Mode is falsely recognising the -> in > a->name as the trailing return type of the lambda expression. > I think the following patch should fix it. Could I ask you, please, to > apply this patch to ..../emacs/lisp/progmodes/cc-engine.el, byte-compile > the file, and try it out on your real C++ source code. In the unlikely > event you want help with the patching or byte-compilation, feel free to > send me private email. After this, please either confirm to us that the > problem is fixed, or tell us what is still not working. Thanks! > diff -r 92a4592886a1 cc-engine.el > --- a/cc-engine.el Sun Apr 25 17:26:38 2021 +0000 > +++ b/cc-engine.el Sat May 15 14:51:56 2021 +0000 > @@ -12269,7 +12269,7 @@ > (save-excursion > (while > (progn > - (c-syntactic-skip-backward "^;=}>" closest-lim t) > + (c-syntactic-skip-backward "^;=,}>" closest-lim t) > (and (eq (char-before) ?>) > (c-backward-token-2) > (not (looking-at c-haskell-op-re))))) > > My emacs version is 27.1. I can reproduce the problem in both Linux and > > Windows with 'emacs -Q'. > -- > Alan Mackenzie (Nuremberg, Germany). From unknown Sat Aug 16 11:40:57 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 13 Sep 2021 11:24:07 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator