GNU bug report logs -
#46951
CC Mode 5.35.1 (C++/l); c-state-cache inconsistency
Previous Next
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 46951 in the body.
You can then email your comments to 46951 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-cc-mode <at> gnu.org
:
bug#46951
; Package
cc-mode
.
(Fri, 05 Mar 2021 21:16:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Michael Welsh Duggan <md5i <at> md5i.com>
:
New bug report received and forwarded. Copy sent to
bug-cc-mode <at> gnu.org
.
(Fri, 05 Mar 2021 21:16:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Package: cc-mode
I run cc-mode with c parse state debugging turned on. In the course of
normal usage, I found a file that reliably triggers a cache state
inconsistency. (This is a courtesy report. I'm not actually
encountering any bad cc-mode behavior right now.)
Reproducer:
emacs -Q
C-x C-f test.h RET
M-x c-toggle-parse-state-cache RET
M-x what-line
C-v
M-x what-line
The resulting log in *Messages*:
c-debug-parse-state enabled
Line 1
c-parse-state inconsistency at 2465: using cache: (2462 (1208 . 1674)), from scratch: (2462 (1863 . 2060)). POINT-MIN: 1
Old state:
(setq c-state-cache '(2233 2219 2150 (1863 . 2060)) c-state-cache-good-pos 2151 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 1769) c-state-old-cpp-end (copy-marker 2432) c-parse-state-point 2244)
c-parse-state inconsistency at 2524: using cache: (2509 (1208 . 1674)), from scratch: (2509 (1863 . 2060)). POINT-MIN: 1
Old state:
(setq c-state-cache '(2462 (1208 . 1674)) c-state-cache-good-pos 2433 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2434) c-state-old-cpp-end (copy-marker 2482) c-parse-state-point 2465)
c-parse-state inconsistency at 2600: using cache: (2592 (1208 . 1674)), from scratch: (2592 (1863 . 2060)). POINT-MIN: 1
Old state:
(setq c-state-cache '(2509 (1208 . 1674)) c-state-cache-good-pos 2483 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2483) c-state-old-cpp-end (copy-marker 2541) c-parse-state-point 2524)
c-parse-state inconsistency at 2610: using cache: (2592 (1208 . 1674)), from scratch: (2592 (1863 . 2060)). POINT-MIN: 1
Old state:
(setq c-state-cache '(2592 (1208 . 1674)) c-state-cache-good-pos 2566 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2543) c-state-old-cpp-end (copy-marker 2634) c-parse-state-point 2600)
Line 32
[test.h (text/x-chdr, attachment)]
[Message part 3 (text/plain, inline)]
Emacs : GNU Emacs 28.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0)
of 2021-03-05
Package: CC Mode 5.35.1 (C++//l)
Buffer Style: gnu
c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit)
current state:
==============
(setq
c-basic-offset 2
c-comment-only-line-offset '(0 . 0)
c-indent-comment-alist '((anchored-comment column . 0) (end-block space . 1)
(cpp-end-block space . 2))
c-indent-comments-syntactically-p nil
c-block-comment-prefix ""
c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+")
(other . "//+\\|\\**"))
c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc)
(c-mode . gtkdoc) (c++-mode . gtkdoc))
c-cleanup-list '(scope-operator)
c-hanging-braces-alist '((substatement-open before after)
(arglist-cont-nonempty))
c-hanging-colons-alist nil
c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist)
c-backslash-column 48
c-backslash-max-column 72
c-special-indent-hook '(t c-gnu-impose-minimum)
c-label-minimum-indentation 1
c-offsets-alist '((inexpr-class . +)
(inexpr-statement . +)
(lambda-intro-cont . +)
(inlambda . 0)
(template-args-cont c-lineup-template-args +)
(incomposition . +)
(inmodule . +)
(innamespace . +)
(inextern-lang . +)
(composition-close . 0)
(module-close . 0)
(namespace-close . 0)
(extern-lang-close . 0)
(composition-open . 0)
(module-open . 0)
(namespace-open . 0)
(extern-lang-open . 0)
(objc-method-call-cont
c-lineup-ObjC-method-call-colons
c-lineup-ObjC-method-call
+
)
(objc-method-args-cont . c-lineup-ObjC-method-args)
(objc-method-intro . [0])
(friend . 0)
(cpp-define-intro c-lineup-cpp-define +)
(cpp-macro-cont . +)
(cpp-macro . [0])
(inclass . +)
(stream-op . c-lineup-streamop)
(arglist-cont-nonempty
c-lineup-gcc-asm-reg
c-lineup-arglist
)
(arglist-cont c-lineup-gcc-asm-reg 0)
(comment-intro
c-lineup-knr-region-comment
c-lineup-comment
)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(access-label . -)
(case-label . 0)
(substatement . +)
(statement-case-intro . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . 0)
(brace-list-close . 0)
(block-close . 0)
(block-open . 0)
(inher-cont . c-lineup-multi-inher)
(inher-intro . +)
(member-init-cont . c-lineup-multi-inher)
(member-init-intro . +)
(annotation-var-cont . +)
(annotation-top-cont . 0)
(topmost-intro . 0)
(knr-argdecl . 0)
(func-decl-cont . +)
(inline-close . 0)
(class-close . 0)
(class-open . 0)
(defun-block-intro . +)
(defun-close . 0)
(defun-open . 0)
(c . c-lineup-C-comments)
(string . c-lineup-dont-change)
(topmost-intro-cont
first
c-lineup-topmost-intro-cont
c-lineup-gnu-DEFUN-intro-cont
)
(brace-list-intro
first
c-lineup-2nd-brace-entry-in-arglist
c-lineup-class-decl-init-+
+
)
(brace-list-open . +)
(inline-open . 0)
(arglist-close . c-lineup-arglist)
(arglist-intro . c-lineup-arglist-intro-after-paren)
(statement-cont . +)
(statement-case-open . +)
(label . 0)
(substatement-label . 0)
(substatement-open . +)
(knr-argdecl-intro . 5)
(statement-block-intro . +)
)
c-buffer-is-cc-mode 'c++-mode
c-tab-always-indent t
c-syntactic-indentation t
c-syntactic-indentation-in-macros t
c-ignore-auto-fill '(string cpp code)
c-auto-align-backslashes t
c-backspace-function 'backward-delete-char-untabify
c-delete-function 'delete-char
c-electric-pound-behavior nil
c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu"))
c-enable-xemacs-performance-kludge-p nil
c-old-style-variable-behavior nil
defun-prompt-regexp nil
tab-width 8
comment-column 32
parse-sexp-ignore-comments t
parse-sexp-lookup-properties t
auto-fill-function nil
comment-multi-line t
comment-start-skip "\\(?://+\\|/\\*+\\)\\s *"
fill-prefix nil
fill-column 70
paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f"
adaptive-fill-mode t
adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)"
)
--
Michael Welsh Duggan
(md5i <at> md5i.com)
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#46951
; Package
cc-mode
.
(Sat, 06 Mar 2021 14:55:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 46951 <at> debbugs.gnu.org (full text, mbox):
Hello, Michael.
On Fri, Mar 05, 2021 at 16:15:20 -0500, Michael Welsh Duggan wrote:
> Package: cc-mode
> I run cc-mode with c parse state debugging turned on. In the course of
> normal usage, I found a file that reliably triggers a cache state
> inconsistency. (This is a courtesy report. I'm not actually
> encountering any bad cc-mode behavior right now.)
> Reproducer:
> emacs -Q
> C-x C-f test.h RET
> M-x c-toggle-parse-state-cache RET
> M-x what-line
> C-v
> M-x what-line
> The resulting log in *Messages*:
> c-debug-parse-state enabled
> Line 1
> c-parse-state inconsistency at 2465: using cache: (2462 (1208 . 1674)), from scratch: (2462 (1863 . 2060)). POINT-MIN: 1
> Old state:
> (setq c-state-cache '(2233 2219 2150 (1863 . 2060)) c-state-cache-good-pos 2151 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 1769) c-state-old-cpp-end (copy-marker 2432) c-parse-state-point 2244)
> c-parse-state inconsistency at 2524: using cache: (2509 (1208 . 1674)), from scratch: (2509 (1863 . 2060)). POINT-MIN: 1
> Old state:
> (setq c-state-cache '(2462 (1208 . 1674)) c-state-cache-good-pos 2433 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2434) c-state-old-cpp-end (copy-marker 2482) c-parse-state-point 2465)
> c-parse-state inconsistency at 2600: using cache: (2592 (1208 . 1674)), from scratch: (2592 (1863 . 2060)). POINT-MIN: 1
> Old state:
> (setq c-state-cache '(2509 (1208 . 1674)) c-state-cache-good-pos 2483 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2483) c-state-old-cpp-end (copy-marker 2541) c-parse-state-point 2524)
> c-parse-state inconsistency at 2610: using cache: (2592 (1208 . 1674)), from scratch: (2592 (1863 . 2060)). POINT-MIN: 1
> Old state:
> (setq c-state-cache '(2592 (1208 . 1674)) c-state-cache-good-pos 2566 c-state-nonlit-pos-cache nil c-state-nonlit-pos-cache-limit 1 c-state-brace-pair-desert '(1 . 1208) c-state-point-min 1 c-state-point-min-lit-type nil c-state-point-min-lit-start nil c-state-min-scan-pos 1 c-state-old-cpp-beg (copy-marker 2543) c-state-old-cpp-end (copy-marker 2634) c-parse-state-point 2600)
> Line 32
Indeed, yes. Thanks for the report.
The following patch (which applies cleanly to the Emacs master branch)
should fix the bug. I will be applying it to the master branch this
afternoon. Please feel free to test it, but if I don't hear from you,
I'll assume the bug can be closed.
Thanks again!
diff -r d6f1f920c51c cc-engine.el
--- a/cc-engine.el Wed Mar 03 11:44:18 2021 +0000
+++ b/cc-engine.el Sat Mar 06 14:50:58 2021 +0000
@@ -3801,12 +3801,14 @@
(point)))
(bra ; Position of "{".
;; Don't start scanning in the middle of a CPP construct unless
- ;; it contains HERE - these constructs, in Emacs, are "commented
- ;; out" with category properties.
- (if (eq (c-get-char-property macro-start-or-from 'category)
- 'c-cpp-delimiter)
- macro-start-or-from
- from))
+ ;; it contains HERE.
+ (if (and (not (eq macro-start-or-from from))
+ (< macro-start-or-from here) ; Might not be needed.
+ (progn (goto-char macro-start-or-from)
+ (c-end-of-macro)
+ (>= (point) here)))
+ from
+ macro-start-or-from))
ce) ; Position of "}"
(or upper-lim (setq upper-lim from))
[ .... ]
> --
> Michael Welsh Duggan
> (md5i <at> md5i.com)
--
Alan Mackenzie (Nuremberg, Germany).
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#46951
; Package
cc-mode
.
(Sat, 06 Mar 2021 16:08:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 46951 <at> debbugs.gnu.org (full text, mbox):
Alan Mackenzie <acm <at> muc.de> writes:
> The following patch (which applies cleanly to the Emacs master branch)
> should fix the bug. I will be applying it to the master branch this
> afternoon. Please feel free to test it, but if I don't hear from you,
> I'll assume the bug can be closed.
I can confirm that this fixes this case.
--
Michael Welsh Duggan
(md5i <at> md5i.com)
Reply sent
to
Alan Mackenzie <acm <at> muc.de>
:
You have taken responsibility.
(Sat, 06 Mar 2021 16:54:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
Michael Welsh Duggan <md5i <at> md5i.com>
:
bug acknowledged by developer.
(Sat, 06 Mar 2021 16:54:02 GMT)
Full text and
rfc822 format available.
Message #16 received at 46951-done <at> debbugs.gnu.org (full text, mbox):
Hello, Michael.
On Sat, Mar 06, 2021 at 11:07:25 -0500, Michael Welsh Duggan wrote:
> Alan Mackenzie <acm <at> muc.de> writes:
> > The following patch (which applies cleanly to the Emacs master branch)
> > should fix the bug. I will be applying it to the master branch this
> > afternoon. Please feel free to test it, but if I don't hear from you,
> > I'll assume the bug can be closed.
> I can confirm that this fixes this case.
That's great, thanks very much!
I'm closing the bug with this post.
> --
> Michael Welsh Duggan
> (md5i <at> md5i.com)
--
Alan Mackenzie (Nuremberg, Germany).
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Sun, 04 Apr 2021 11:24:05 GMT)
Full text and
rfc822 format available.
This bug report was last modified 4 years and 74 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.