GNU bug report logs -
#29293
CC Mode 5.33 (C//l); c-display-defun-name echoes return type not name of function
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 29293 in the body.
You can then email your comments to 29293 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#29293
; Package
cc-mode
.
(Tue, 14 Nov 2017 13:04:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
"Basil L. Contovounesios" <contovob <at> tcd.ie>
:
New bug report received and forwarded. Copy sent to
bug-cc-mode <at> gnu.org
.
(Tue, 14 Nov 2017 13:04:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Steps to reproduce:
1. emacs -Q
2. M-x find-function RET current-column RET
(i.e. visit file src/indent.c)
3. M-g g 59 RET
(i.e. move point to start of function
buffer_display_table)
4. C-c C-z
Expected result: Message "buffer_display_table. Line 1/12."
Actual result: Message "struct Lisp_Char_Table. Line 1/12."
Similar behaviour is observed for other
struct-pointer-returning functions in this file, such as
compute_motion and vmotion.
Contrast with the same procedure for some
non-struct-pointer-returning function, e.g. character_width:
3. M-g g 76 RET
(i.e. move point to start of function character_width)
4. C-c C-z
Result: Message "character_width. Line 1/29.", as expected.
The information collected by c-submit-bug-report follows my
signature.
Thanks,
--
Basil
Emacs : GNU Emacs 27.0.50 (build 4, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
of 2017-11-14
Package: CC Mode 5.33 (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 . +)
(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)
(arglist-intro . c-lineup-arglist-intro-after-paren)
(comment-intro c-lineup-knr-region-comment c-lineup-comment)
(catch-clause . 0)
(else-clause . 0)
(do-while-closure . 0)
(substatement . +)
(statement-case-open . +)
(statement-case-intro . +)
(statement . 0)
(brace-entry-open . 0)
(brace-list-entry . c-lineup-under-anchor)
(brace-list-intro . c-lineup-arglist-intro-after-paren)
(brace-list-close . 0)
(brace-list-open . +)
(block-close . 0)
(block-open . 0)
(inher-cont . c-lineup-multi-inher)
(member-init-cont . c-lineup-multi-inher)
(annotation-var-cont . +)
(annotation-top-cont . 0)
(topmost-intro-cont first c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont)
(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)
(statement-cont . +)
(label . 0)
(substatement-label . 0)
(substatement-open . +)
(knr-argdecl-intro . 5)
(statement-block-intro . +)
(member-init-intro . +)
(inher-intro . +)
(arglist-close . c-lineup-arglist)
(inline-open . 0)
(innamespace . +)
(case-label . 0)
(access-label . -)
)
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 . "blc"))
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 "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-–!|#%;>*·•‣⁃◦]+[ ]*\\)*\\)"
)
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29293
; Package
cc-mode
.
(Tue, 14 Nov 2017 13:21:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 29293 <at> debbugs.gnu.org (full text, mbox):
I am not sure if this issue is related to bug#25623.
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25623
--
Basil
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29293
; Package
cc-mode
.
(Thu, 16 Nov 2017 22:02:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 29293 <at> debbugs.gnu.org (full text, mbox):
Hello, Basil.
On Tue, Nov 14, 2017 at 13:03:44 +0000, Basil L. Contovounesios wrote:
> Steps to reproduce:
> 1. emacs -Q
> 2. M-x find-function RET current-column RET
> (i.e. visit file src/indent.c)
> 3. M-g g 59 RET
> (i.e. move point to start of function
> buffer_display_table)
> 4. C-c C-z
> Expected result: Message "buffer_display_table. Line 1/12."
> Actual result: Message "struct Lisp_Char_Table. Line 1/12."
Yes.
Thank you very much for taking the trouble to report this bug.
What is happening is that inside the CC Mode function c-defun-name,
struct Lisp_Char_Table *
buffer_display_table (void)
{
is triggering the "cond arm" (the lisp equivalent of C's switch case)
which picks up declarations of structs, etc., rather than the cond arm
dealing with functions.
The following provisional patch tightens up the analysis, so I hope it
solves the bug.
The reason I say provisional is that in the following fragment (which is
an unusual thing to write):
struct foo {
int bar;
} baz (int fred)
{
return barney;
}
with point on the } in line 3, C-c C-z triggers an error. With point at
other places, C-c C-z returns the correct "baz".
Anyhow, could I ask you, please, to apply the patch, recompile
cc-cmds.el, and try it out in any other code you found the bug in, and
let me know if the bug is indeed fixed. In the meantime, I'll work on
fixing the error in the analysis of that code fragment.
(If you want any help in applying the patch or compiling cc-cmds.el,
please feel free to send me private mail).
diff -r 52dfb2eca185 cc-cmds.el
--- a/cc-cmds.el Sun Nov 12 11:32:27 2017 +0000
+++ b/cc-cmds.el Thu Nov 16 21:50:47 2017 +0000
@@ -1804,7 +1804,15 @@
;; Pick out the defun name, according to the type of defun.
(cond
;; struct, union, enum, or similar:
- ((looking-at c-type-prefix-key)
+ ((save-excursion
+ (and
+ (looking-at c-type-prefix-key)
+ (consp (c-forward-decl-or-cast-1 (c-point 'bosws) 'top nil))
+ (or (not (or (eq (char-after) ?{)
+ (and c-recognize-knr-p
+ (c-in-knr-argdecl))))
+ (progn (c-backward-syntactic-ws)
+ (not (eq (char-before) ?\)))))))
(let ((key-pos (point)))
(c-forward-over-token-and-ws) ; over "struct ".
(cond
@@ -1834,8 +1842,16 @@
(t
;; Normal function or initializer.
- (when (c-syntactic-re-search-forward "[{(]" nil t)
- (backward-char)
+ (when
+ (and
+ (consp (c-forward-decl-or-cast-1 (c-point 'bosws) 'top nil))
+ (or (eq (char-after) ?{)
+ (and c-recognize-knr-p
+ (c-in-knr-argdecl)))
+ (progn
+ (c-backward-syntactic-ws)
+ (eq (char-before) ?\)))
+ (c-go-list-backward))
(c-backward-syntactic-ws)
(when (eq (char-before) ?\=) ; struct foo bar = {0, 0} ;
(c-backward-token-2)
[ .... ]
> The information collected by c-submit-bug-report follows my
> signature.
This is appreciated, thanks, even though I've snipped it. ;-)
> Thanks,
> --
> Basil
--
Alan Mackenzie (Nuremberg, Germany).
Information forwarded
to
bug-cc-mode <at> gnu.org
:
bug#29293
; Package
cc-mode
.
(Sat, 18 Nov 2017 14:01:02 GMT)
Full text and
rfc822 format available.
Message #14 received at 29293 <at> debbugs.gnu.org (full text, mbox):
Hi Alan,
Alan Mackenzie <acm <at> muc.de> writes:
> Thank you very much for taking the trouble to report this bug.
No, thank you for tending to it and for the detailed
explanation of its cause.
> Anyhow, could I ask you, please, to apply the patch, recompile
> cc-cmds.el, and try it out in any other code you found the bug in, and
> let me know if the bug is indeed fixed.
I have tested your patch over recent master
(bc462efec89c3317a6ee3ef9404356c1c7e52bda "Rebrand Windows
installer" of 2017-11-13) in several functions and DEFUNs in
the Emacs source tree, including all src/indent.c
definitions I mentioned in my previous email, and can
confirm the patch fixes the reported issue.
>> The information collected by c-submit-bug-report follows my
>> signature.
>
> This is appreciated, thanks, even though I've snipped it. ;-)
You're welcome to use a printed copy as a wall decoration. :)
Thanks again,
--
Basil
Reply sent
to
Alan Mackenzie <acm <at> muc.de>
:
You have taken responsibility.
(Tue, 21 Nov 2017 18:17:02 GMT)
Full text and
rfc822 format available.
Notification sent
to
"Basil L. Contovounesios" <contovob <at> tcd.ie>
:
bug acknowledged by developer.
(Tue, 21 Nov 2017 18:17:02 GMT)
Full text and
rfc822 format available.
Message #19 received at 29293-done <at> debbugs.gnu.org (full text, mbox):
Hello, Basil.
On Sat, Nov 18, 2017 at 13:59:51 +0000, Basil L. Contovounesios wrote:
> Hi Alan,
> Alan Mackenzie <acm <at> muc.de> writes:
[ .... ]
> > Anyhow, could I ask you, please, to apply the patch, recompile
> > cc-cmds.el, and try it out in any other code you found the bug in, and
> > let me know if the bug is indeed fixed.
> I have tested your patch over recent master
> (bc462efec89c3317a6ee3ef9404356c1c7e52bda "Rebrand Windows
> installer" of 2017-11-13) in several functions and DEFUNs in
> the Emacs source tree, including all src/indent.c
> definitions I mentioned in my previous email, and can
> confirm the patch fixes the reported issue.
Thanks. I've committed that patch to CC Mode, XEmacs, and Emacs branch
emacs-26, from where it will flow into the master branch.
That other problem I had with c-defun-nmae, I've decided is a separate
bug, and I'll be looking at it sometime. With this post, I'm closing
the bug.
[ .... ]
> Thanks again,
> --
> Basil
--
Alan Mackenzie (Nuremberg, Germany).
bug archived.
Request was from
Debbugs Internal Request <help-debbugs <at> gnu.org>
to
internal_control <at> debbugs.gnu.org
.
(Wed, 20 Dec 2017 12:24:08 GMT)
Full text and
rfc822 format available.
This bug report was last modified 7 years and 242 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.