Subject: bug#37910: closed (Re: bug#37910: CC Mode 5.33.2 (C++//l); CC-mode inconsistently indents everything as topmost-intro after a while)

From: [email-masked] (GNU bug Tracking System)
Date: Thu, 14 Nov 2019 20:12:03 +0000

Your bug report

#37910: CC Mode 5.33.2 (C++//l); CC-mode inconsistently indents everything as topmost-intro after a while

which was filed against the emacs,cc-mode package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
37910: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=37910
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#37910: CC Mode 5.33.2 (C++//l); CC-mode inconsistently indents everything as topmost-intro after a while
From: Alan Mackenzie <[email-masked]>
To: Eric Scrivner <[email-masked]>
Cc: [email-masked], Stefan Kangas <[email-masked]>, [email-masked], [email-masked]
Date: Thu, 14 Nov 2019 20:11:39 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Eric.

On Wed, Nov 13, 2019 at 16:12:11 -0800, Eric Scrivner wrote:
> Hi Alan,

> Thanks so much for the patch and explanation. I applied it locally and
> while the patch didn't seem to have much effect, setting
> `open-paren-in-column-0-is-defun-start` to `nil` seems to have done the
> trick here without any noticeable impact on performance. It seems as you've
> said that there may be some issues in the heuristic used for performance
> optimization here.

> I will let you know if any other issues surface, but it appears this has
> fixed my issue.

OK, thanks for the test.  I think it is now time to commit the patch and
close the bug.

I am hoping that the patch, already applied to the savannah master
branch, will also have fixed bugs #5910 and #18072.  Their (sporadic)
symptoms were consistent with the glitches fixed by the patch.

-- 
Alan Mackenzie (Nuremberg, Germany).

Subject: CC Mode 5.33.2 (C++//l); CC-mode inconsistently indents everything as topmost-intro after a while
From: Eric Scrivner <[email-masked]>
To: [email-masked]
Date: Thu, 24 Oct 2019 12:06:18 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

This seems related to (if not the same as) bug #5490.

- This happens randomly and then randomly stops happening (cache expiry
maybe?)
- M-x revert-buffer does not fix.

Here's a snippet from the buffer at the time this happen, as you can see
there seems to be a region until the end where everything becomes
topmost-intro:

      }                          // ((block-close 18328))
                                // ((statement 9560))
      SDL_DestroyWindow(Window); // ((statement 9560))
    }    // ((block-close 9490))
    else                        // ((else-clause 9466))
    {                                                             //
((substatement-open 18464))
      PlatformLog("Failed to create window: %s", SDL_GetError()); //
((statement-block-intro 18473))
    } // ((block-close 18473))
                                // ((topmost-intro 18576))
                                // ((topmost-intro 18576))
SDL_Quit();                     // ((topmost-intro 18541))
  }                             // ((topmost-intro 18548))
  else                          // ((else-clause 9188))
  {                             // ((substatement-open 18845))
    PlatformLog("Failed to initialize SDL: %s", SDL_GetError()); //
((statement-block-intro 18901))((statement-block-intro 18724))
  }                                                              //
((block-close 18901))
                                // ((topmost-intro 19093))
  return EXIT_SUCCESS;          // ((topmost-intro 19093))
}                               // ((topmost-intro 19242))

Package: cc-mode

Emacs  : GNU Emacs 26.3 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.11)
 of 2019-09-16
Package: CC Mode 5.33.2 (C++//l)
Buffer Style: linux
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-cleanup-list '(brace-else-brace)
 c-hanging-braces-alist '((brace-list-open) (brace-entry-open)
                          (substatement-open after) (block-close .
c-snug-do-while)
                          (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 . c-lineup-inexpr-block)
                   (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-close . +)
                   (arglist-cont-nonempty c-lineup-gcc-asm-reg
c-lineup-arglist)
                   (arglist-cont c-lineup-gcc-asm-reg 0)
                   (arglist-intro . +)
                   (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-open . 0)
                   (statement-case-intro . +)
                   (statement . 0)
                   (brace-entry-open . 0)
                   (brace-list-entry . c-lineup-under-anchor)
                   (brace-list-intro . +)
                   (brace-list-close . 0)
                   (brace-list-open . 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-cont . c-lineup-topmost-intro-cont)
                   (topmost-intro . 0)
                   (knr-argdecl . 0)
                   (func-decl-cont . +)
                   (inline-close . 0)
                   (inline-open . +)
                   (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)
                   (statement-cont . +)
                   (label . 0)
                   (substatement-label . 0)
                   (substatement-open . 0)
                   (knr-argdecl-intro . 0)
                   (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 "linux"
 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 79
 paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f"
 adaptive-fill-mode t
 adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[
]*\\)*\\)"
 )