unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Rolf Ade <rolf@pointsman.de>
Cc: 23818@debbugs.gnu.org
Subject: bug#23818: 25.0.95.3: c-beginning-of-defun misbehaviour
Date: 24 Jun 2016 15:02:34 -0000	[thread overview]
Message-ID: <20160624150234.66344.qmail@mail.muc.de> (raw)
In-Reply-To: <mailman.1962.1466554808.1216.bug-gnu-emacs@gnu.org>

Hello, Rolf

In article <mailman.1962.1466554808.1216.bug-gnu-emacs@gnu.org> you wrote:

> The same in 24.5 and 25.0.95.3:

> emacs -Q

> Open some random emtpy buffer foo.c, put it in c-mode (M-x c-mode) and
> insert the following C code:

> #define DBG(x) x

> DBG(
> static void __dbgAttr () {
>     /* something */
> }
> )

> int main (void) 
> {
>     int i;
>     i++;
>     i++;
>     return i;
> }

> int foo () 
> {
>     int i;
>     i++;
>     i++;
>     return 1;
> }


> Put the point inside function main and C-M-home (or M-x
> c-beginning-of-defun). Instead of the beginning of main() the point is
> here:

> _P_DBG(
> ...

> Far away from

> _P_int main(void)
> ...

Thank you for the bug report, and thanks even more for making it a nice
concise easy to work with example.

> This isn't "unbalanced braces in preprocessor statements are
> horrendously difficult to parse" as in bug #23775, there are no
> unbalanced braces everywhere. It's that some code above the code of a
> syntactical correct function disturbs c-beginning-of-defun in finding
> the beginning of the function.

There are two things here.  The first is that you must configure "DBG" as
a "macro with a semicolon", as detailed in the CC Mode manual, page
"Macros with ;".  For example, you could put the following into your
c-mode-common-hook:

    (setq c-macro-names-with-semicolon '("DBG"))
    (c-make-macro-with-semi-re)

.  That would set up that macro for all your C files.  c-mode-common-hook
is more precisely described on pages "Configuration Basics" and "CC
Hooks" in the CC Mode manual.

The second part of the fix is an actual bug where the software fails to
check for "macros with semicolons" at a critical point.  For that, could
you install the following patch, please, then byte-compile cc-engine.el:



diff -r 4c8ccaedfd6a cc-engine.el
--- a/cc-engine.el	Fri Jun 24 13:06:30 2016 +0000
+++ b/cc-engine.el	Fri Jun 24 14:55:30 2016 +0000
@@ -9135,7 +9135,8 @@
 		(/= last-stmt-start (point))
 		(progn
 		  (c-backward-syntactic-ws lim)
-		  (not (memq (char-before) '(?\; ?} ?: nil))))
+		  (not (or (memq (char-before) '(?\; ?} ?: nil))
+			   (c-at-vsemi-p))))
 		(save-excursion
 		  (backward-char)
 		  (not (looking-at "\\s(")))


If you want any help with applying the patch, or byte compiling, or
setting up a hook, etc., feel free to send me a private email.

[ .... ]

When you've done all this, could you please confirm that it fixes the
problem so I can close the bug, or tell me what's still buggy.

Thanks!

-- 
Alan Mackenzie (Nuremberg, Germany).






  parent reply	other threads:[~2016-06-24 15:02 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-22  0:19 bug#23818: 25.0.95.3: c-beginning-of-defun misbehaviour Rolf Ade
     [not found] ` <mailman.2009.1466608581.1216.bug-gnu-emacs@gnu.org>
2016-06-24 14:43   ` Alan Mackenzie
     [not found] ` <mailman.1962.1466554808.1216.bug-gnu-emacs@gnu.org>
2016-06-22  8:54   ` Alan Mackenzie
2016-06-22 15:14     ` Eli Zaretskii
2016-06-24 15:02   ` Alan Mackenzie [this message]
2016-06-28 23:22     ` bug#23775: " Rolf Ade
2016-06-29 20:26       ` Alan Mackenzie
2016-06-29 20:27       ` Alan Mackenzie
2016-06-29  0:57     ` Rolf Ade
2017-08-08 21:42       ` Rolf Ade
2017-08-13 13:17         ` Alan Mackenzie

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160624150234.66344.qmail@mail.muc.de \
    --to=acm@muc.de \
    --cc=23818@debbugs.gnu.org \
    --cc=rolf@pointsman.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).