GNU bug report logs - #29293
CC Mode 5.33 (C//l); c-display-defun-name echoes return type not name of function

Previous Next

Package: cc-mode;

Reported by: "Basil L. Contovounesios" <contovob <at> tcd.ie>

Date: Tue, 14 Nov 2017 13:04:02 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 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.

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


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):

From: "Basil L. Contovounesios" <contovob <at> tcd.ie>
To: submit <at> debbugs.gnu.org
Subject: CC Mode 5.33 (C//l);
 c-display-defun-name echoes return type not name of function
Date: Tue, 14 Nov 2017 13:03:44 +0000
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):

From: "Basil L. Contovounesios" <contovob <at> tcd.ie>
To: 29293 <at> debbugs.gnu.org
Cc: "Basil L. Contovounesios" <contovob <at> tcd.ie>
Subject: Re: CC Mode 5.33 (C//l);
 c-display-defun-name echoes return type not name of function
Date: Tue, 14 Nov 2017 13:20:45 +0000
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):

From: Alan Mackenzie <acm <at> muc.de>
To: "Basil L. Contovounesios" <contovob <at> tcd.ie>
Cc: 29293 <at> debbugs.gnu.org
Subject: Re: bug#29293: CC Mode 5.33 (C//l); c-display-defun-name echoes
 return type not name of function
Date: Thu, 16 Nov 2017 21:59:16 +0000
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):

From: "Basil L. Contovounesios" <contovob <at> tcd.ie>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 29293 <at> debbugs.gnu.org
Subject: Re: bug#29293: CC Mode 5.33 (C//l);
 c-display-defun-name echoes return type not name of function
Date: Sat, 18 Nov 2017 13:59:51 +0000
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):

From: Alan Mackenzie <acm <at> muc.de>
To: "Basil L. Contovounesios" <contovob <at> tcd.ie>
Cc: 29293-done <at> debbugs.gnu.org
Subject: Re: bug#29293: CC Mode 5.33 (C//l); c-display-defun-name echoes
 return type not name of function
Date: Tue, 21 Nov 2017 18:13:22 +0000
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.