Package: cc-mode;
Reported by: Tau <tau <at> ea7aba.be>
Date: Mon, 8 Apr 2019 14:19:02 UTC
Severity: normal
Done: Alan Mackenzie <acm <at> muc.de>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: Glenn Morris <rgm <at> gnu.org> To: 35194 <at> debbugs.gnu.org Cc: Tau <tau <at> ea7aba.be> Subject: bug#35194: CC Mode 5.33.1 (C++//l); Indentation of C++ methods with ref-qualifiers is broken. Date: Mon, 08 Apr 2019 12:18:11 -0400
Report reassigned to cc-mode. (It seems that cc-mode users not infrequently report bugs from mail clients that don't support X- headers. So I suggest also putting "Package: cc-mode" at the start of the message body in c-submit-bug-report.) Tau wrote: > Methods with ref-qualifiers (& and &&) seem to get indented with > "brace-list-intro" which, as I understand it, is used for > initializer lists and not code blocks. It is set to > "c-lineup-arglist-intro-after-paren" in GNU style which is the > default. > > Functions that use the auto syntax for return types and return > a reference are affected as well. > > // Example of incorrect indentation in a program: > > #include <iostream> > > struct T { > void a_method() && { > std::cout << "rvalue ref\n"; > } > > void a_method() const& { > std::cout << "lvalue const ref\n"; > } > > void this_gets_properly_indented() const { > std::cout << "without a ref-qualifier\n"; > } > > auto this_too() && -> void { > std::cout << "rvalue ref; '->' notation\n"; > } > > auto this_breaks_again() -> T& { > return *this; > } > }; > > int main() { > T x; > > T().a_method(); > x.a_method(); > } > > Emacs : GNU Emacs 26.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version > 3.22.30) of 2018-07-05 > Package: CC Mode 5.33.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-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 '(c-gnu-impose-minimum) > 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-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 . c-lineup-under-anchor) > (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 . > c-lineup-arglist-intro-after-paren) (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 > "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)" )
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.