GNU bug report logs - #5649
23.1.92; Indentation problems in C mode

Previous Next

Packages: emacs, cc-mode;

Reported by: mwd <at> md5i.com

Date: Thu, 25 Feb 2010 16:18:02 UTC

Severity: serious

Done: Chong Yidong <cyd <at> stupidchicken.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Alan Mackenzie <acm <at> muc.de>
To: Chong Yidong <cyd <at> stupidchicken.com>
Cc: 5649 <at> debbugs.gnu.org, Michael Welsh Duggan <mwd <at> cert.org>
Subject: bug#5649: 23.1.92; Indentation problems in C mode
Date: Mon, 1 Mar 2010 11:38:32 +0000
Hi, Michael and Yidong

On Fri, Feb 26, 2010 at 07:12:06PM -0500, Chong Yidong wrote:
> Michael Welsh Duggan <mwd <at> cert.org> writes:

> > I'm getting some screwy indentation behavior from C mode.  From a
> > current bzr checkout/install of emacs, try the following recipe:

> > emacs -Q foo.c                 | starts emacs on foo.c (included below)
> > C-u 7 C-n                      | move down 7 lines
> > TAB                            | indent, nothing changes (good)
> > C-p C-p                        | move up 2 lines
> > TAB C-n TAB C-n                | indent 2 lines, nothing changes (good)
> > TAB                            | line unindents by 2 (bad)
> > TAB                            | line re-indents (good, but strange)
> > TAB                            | no change this time

> Thanks.  This is a regression vs Emacs 23.1, so we should definitely fix
> it before releasing Emacs 23.2.

> I can reproduce the bug with the Emacs 23.0.90, so it's be around since
> at lease 12-09 last year.  However, I haven't yet had the time to do a
> proper bisect.

I've just committed the folowing patch, which should fix the bug:


=== modified file 'lisp/progmodes/cc-engine.el'
--- lisp/progmodes/cc-engine.el	2010-02-25 21:21:25 +0000
+++ lisp/progmodes/cc-engine.el	2010-03-01 11:23:59 +0000
@@ -2641,7 +2641,8 @@
 	;; (car c-state-cache).  There can be no open parens/braces/brackets
 	;; between `good-pos'/`good-pos-actual-macro-start' and (point-max),
 	;; due to the interface spec to this function.
-	(setq pos (if good-pos-actual-macro-end
+	(setq pos (if (and good-pos-actual-macro-end
+			   (> in-macro-start good-pos-actual-macro-start))
 		      (1+ good-pos-actual-macro-end) ; get outside the macro as
 					; marked by a `category' text property.
 		    good-pos))


Thanks for the clean and concise bug report!

-- 
Alan Mackenzie (Nuremberg, Germany).




This bug report was last modified 15 years and 85 days ago.

Previous Next


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