GNU bug report logs - #56629
CC Mode 5.35.1 (C++//l); Cache state inconsistency

Previous Next

Package: cc-mode;

Reported by: Michael Welsh Duggan <mwd <at> md5i.com>

Date: Mon, 18 Jul 2022 14:43:01 UTC

Severity: normal

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

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 56629 in the body.
You can then email your comments to 56629 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-cc-mode <at> gnu.org:
bug#56629; Package cc-mode. (Mon, 18 Jul 2022 14:43:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Michael Welsh Duggan <mwd <at> md5i.com>:
New bug report received and forwarded. Copy sent to bug-cc-mode <at> gnu.org. (Mon, 18 Jul 2022 14:43:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Michael Welsh Duggan <mwd <at> md5i.com>
To: bug-gnu-emacs <at> gnu.org
Subject: CC Mode 5.35.1 (C++//l); Cache state inconsistency
Date: Mon, 18 Jul 2022 10:42:16 -0400
[Message part 1 (text/plain, inline)]
Package: cc-mode

From emacs -Q:

Load the attached file (inline).  Turn on parse state debugging:

    M-x c-toggle-parse-state-debug RET

Navigate to the uint8_t:

    C-s 8

Delete the 8 and start to replace it:

    <backspace> 1

At this point I get a cache inconsistency warning:

c-parse-state inconsistency at 179: using cache: nil, from scratch: (145).  POINT-MIN: 1
Old state:
(setq c-state-cache nil  c-state-cache-good-pos 81  c-state-nonlit-pos-cache nil  c-state-nonlit-pos-cache-limit 1  c-state-brace-pair-desert nil  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 nil  c-state-old-cpp-end nil  c-parse-state-point 179)

This inconsistency has not yet caused incorrect editing behavior (that I
have noticed, but I know that any cache problem has the possibility of
causing problems down the line.

[Message part 2 (text/x-c++hdr, inline)]
class DataType :
  public types::NamedType<std::uint16_t, struct DataTypeParam,
                          types::EqComparable, types::Hashable>
{
  using base = types::NamedType<std::uint8_t, struct DataTypeParam,
                                types::EqComparable, types::Hashable>;
 public:
  using base::NamedType;


};
[Message part 3 (text/plain, inline)]


Emacs  : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0)
 of 2022-07-15
Package: CC Mode 5.35.1 (C++//l)
Buffer Style: Pharos
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
 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 '((brace-list-open) (brace-entry-open)
                          (statement-cont) (substatement-open after)
                          (block-close . c-snug-do-while)
                          (extern-lang-open after) (namespace-open after)
                          (module-open after) (composition-open after)
                          (inexpr-class-open after)
                          (inexpr-class-close before) (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 nil
 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 . 0)
                   (inextern-lang . 0)
                   (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 . *)
                   (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 . c-lineup-topmost-intro-cont)
                   (brace-list-intro . +)
                   (brace-list-open . 0)
                   (inline-open . 0)
                   (arglist-close . +)
                   (arglist-intro . +)
                   (statement-cont . c-lineup-math)
                   (statement-case-open . *)
                   (label . *)
                   (substatement-label . 2)
                   (substatement-open . 0)
                   (knr-argdecl-intro . +)
                   (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#56629; Package cc-mode. (Sun, 24 Jul 2022 15:30:02 GMT) Full text and rfc822 format available.

Message #8 received at 56629 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Michael Welsh Duggan <mwd <at> md5i.com>
Cc: 56629 <at> debbugs.gnu.org
Subject: Re: bug#56629: CC Mode 5.35.1 (C++//l); Cache state inconsistency
Date: Sun, 24 Jul 2022 15:28:56 +0000
Hello, Michael.

Thank you indeed for another bug report.

On Mon, Jul 18, 2022 at 10:42:16 -0400, Michael Welsh Duggan wrote:
> Package: cc-mode

> >From emacs -Q:

> Load the attached file (inline).  Turn on parse state debugging:

>     M-x c-toggle-parse-state-debug RET

> Navigate to the uint8_t:

>     C-s 8

> Delete the 8 and start to replace it:

>     <backspace> 1

> At this point I get a cache inconsistency warning:

> c-parse-state inconsistency at 179: using cache: nil, from scratch: (145).  POINT-MIN: 1
> Old state:
> (setq c-state-cache nil  c-state-cache-good-pos 81  c-state-nonlit-pos-cache nil  c-state-nonlit-pos-cache-limit 1  c-state-brace-pair-desert nil  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 nil  c-state-old-cpp-end nil  c-parse-state-point 179)

> This inconsistency has not yet caused incorrect editing behavior (that I
> have noticed, but I know that any cache problem has the possibility of
> causing problems down the line.


> class DataType :
>   public types::NamedType<std::uint16_t, struct DataTypeParam,
>                           types::EqComparable, types::Hashable>
> {
>   using base = types::NamedType<std::uint8_t, struct DataTypeParam,
>                                 types::EqComparable, types::Hashable>;
>  public:
>   using base::NamedType;
> 
> 
> };

The cause of this bug is the text properties put on the <s and >s.  These
are intended to be category properties in Emacs, but syntax-table
properties in XEmacs.  The mechanism which tests the presence of the
category property is chaotic in Emacs, though I think it works properly
in the standalone CC Mode; the detection is (wrongly) done both at
compile time and load time, and delivers different answers.  :-(

I will sort this out and let you know when it's done.



> Emacs  : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0)
>  of 2022-07-15
> Package: CC Mode 5.35.1 (C++//l)
> Buffer Style: Pharos
> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit)

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-cc-mode <at> gnu.org:
bug#56629; Package cc-mode. (Tue, 26 Jul 2022 19:54:02 GMT) Full text and rfc822 format available.

Message #11 received at 56629 <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Michael Welsh Duggan <mwd <at> md5i.com>
Cc: 56629 <at> debbugs.gnu.org, acm <at> muc.de
Subject: Re: bug#56629: CC Mode 5.35.1 (C++//l); Cache state inconsistency
Date: Tue, 26 Jul 2022 19:53:02 +0000
Hello again, Michael.

On Sun, Jul 24, 2022 at 15:28:56 +0000, Alan Mackenzie wrote:

[ .... ]

> The cause of this bug is the text properties put on the <s and >s.  These
> are intended to be category properties in Emacs, but syntax-table
> properties in XEmacs.  The mechanism which tests the presence of the
> category property is chaotic in Emacs, though I think it works properly
> in the standalone CC Mode; the detection is (wrongly) done both at
> compile time and load time, and delivers different answers.  :-(

> I will sort this out and let you know when it's done.

I have now committed a patch for this to the savannah master branch,
which I am confident has sorted the problem out.

Could I ask you please to update your Emacs-29 to this branch, and test
it out on your real C++ code, and confirm that the bug is indeed fixed
(or that it's not fixed).  Then we can close the bug.  Thanks!

> > Emacs  : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0)
> >  of 2022-07-15
> > Package: CC Mode 5.35.1 (C++//l)
> > Buffer Style: Pharos
> > c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties 1-bit)

> [ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-cc-mode <at> gnu.org:
bug#56629; Package cc-mode. (Wed, 27 Jul 2022 03:24:01 GMT) Full text and rfc822 format available.

Message #14 received at 56629 <at> debbugs.gnu.org (full text, mbox):

From: Michael Welsh Duggan <mwd <at> md5i.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: Michael Welsh Duggan <mwd <at> md5i.com>, 56629 <at> debbugs.gnu.org
Subject: Re: bug#56629: CC Mode 5.35.1 (C++//l); Cache state inconsistency
Date: Tue, 26 Jul 2022 23:23:16 -0400
Alan Mackenzie <acm <at> muc.de> writes:

> Hello again, Michael.
>
> On Sun, Jul 24, 2022 at 15:28:56 +0000, Alan Mackenzie wrote:
>
> [ .... ]
>
>> The cause of this bug is the text properties put on the <s and >s.  These
>> are intended to be category properties in Emacs, but syntax-table
>> properties in XEmacs.  The mechanism which tests the presence of the
>> category property is chaotic in Emacs, though I think it works properly
>> in the standalone CC Mode; the detection is (wrongly) done both at
>> compile time and load time, and delivers different answers.  :-(
>
>> I will sort this out and let you know when it's done.
>
> I have now committed a patch for this to the savannah master branch,
> which I am confident has sorted the problem out.
>
> Could I ask you please to update your Emacs-29 to this branch, and test
> it out on your real C++ code, and confirm that the bug is indeed fixed
> (or that it's not fixed).  Then we can close the bug.  Thanks!

Thus far, I have not encountered any problems.  I'll let you know if
that changes.

>> > Emacs : GNU Emacs 29.0.50 (build 2, x86_64-pc-linux-gnu, X
>> > toolkit, cairo version 1.16.0)
>> >  of 2022-07-15
>> > Package: CC Mode 5.35.1 (C++//l)
>> > Buffer Style: Pharos
>> > c-emacs-features: (pps-extended-state col-0-paren
>> > posix-char-classes gen-string-delim gen-comment-delim
>> > syntax-properties 1-bit)
>
>> [ .... ]

-- 
Michael Welsh Duggan
(md5i <at> md5i.com)




Reply sent to Alan Mackenzie <acm <at> muc.de>:
You have taken responsibility. (Sat, 30 Jul 2022 09:34:02 GMT) Full text and rfc822 format available.

Notification sent to Michael Welsh Duggan <mwd <at> md5i.com>:
bug acknowledged by developer. (Sat, 30 Jul 2022 09:34:02 GMT) Full text and rfc822 format available.

Message #19 received at 56629-done <at> debbugs.gnu.org (full text, mbox):

From: Alan Mackenzie <acm <at> muc.de>
To: Michael Welsh Duggan <mwd <at> md5i.com>
Cc: 56629-done <at> debbugs.gnu.org
Subject: Re: bug#56629: CC Mode 5.35.1 (C++//l); Cache state inconsistency
Date: Sat, 30 Jul 2022 09:33:37 +0000
Hello, Michael.

> On Tue, Jul 26, 2022 at 23:23:16 -0400, Michael Welsh Duggan wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > I have now committed a patch for this to the savannah master branch,
> > which I am confident has sorted the problem out.

> > Could I ask you please to update your Emacs-29 to this branch, and test
> > it out on your real C++ code, and confirm that the bug is indeed fixed
> > (or that it's not fixed).  Then we can close the bug.  Thanks!

> Thus far, I have not encountered any problems.  I'll let you know if
> that changes.

OK, that's three days, now, with no further problems.  So I'm closing the
bug with this post.

> -- 
> Michael Welsh Duggan
> (md5i <at> md5i.com)o

-- 
Alan Mackenzie (Nuremberg, Germany).




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 27 Aug 2022 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 356 days ago.

Previous Next


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