GNU bug report logs - #59671
CC Mode 5.35.2 (C/*l); More incorrect type recognition

Previous Next

Package: cc-mode;

Reported by: Po Lu <luangruo <at> yahoo.com>

Date: Tue, 29 Nov 2022 07:09: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 59671 in the body.
You can then email your comments to 59671 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#59671; Package cc-mode. (Tue, 29 Nov 2022 07:09:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Po Lu <luangruo <at> yahoo.com>:
New bug report received and forwarded. Copy sent to bug-cc-mode <at> gnu.org. (Tue, 29 Nov 2022 07:09:02 GMT) Full text and rfc822 format available.

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

From: Po Lu <luangruo <at> yahoo.com>
To: bug-gnu-emacs <at> gnu.org
Subject: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Tue, 29 Nov 2022 15:08:15 +0800
Package: cc-mode

Insert the following code in a buffer:

/* fns.c -- generic utility functions.  */

/* Allocate a scratch buffer with the given size.  The buffer must be
   used before the next call to allocscratch.  */

static void *
allocscratch (size_t size)
{

}

now, on the line below the first comment, type:

typedef struct foo

then pause for a second, and type:

bar;

c-found-types will then contain "allocscratch"!.

Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu)
 of 2022-11-29
Package: CC Mode 5.35.2 (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 category-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++-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 '(t c-gnu-impose-minimum)
 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 . +)
		   (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 . 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
		    first
		    c-lineup-topmost-intro-cont
		    c-lineup-gnu-DEFUN-intro-cont
		    )
		   (brace-list-intro
		    first
		    c-lineup-2nd-brace-entry-in-arglist
		    c-lineup-class-decl-init-+
		    +
		    )
		   (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 "[ 	]*\\(//+\\|\\**\\)[ 	]*\\([ 	]*\\([-–!|#%;>*·•‣⁃◦]+[ 	]*\\)*\\)"
 )




Information forwarded to bug-cc-mode <at> gnu.org:
bug#59671; Package cc-mode. (Thu, 08 Dec 2022 19:01:02 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Po Lu <luangruo <at> yahoo.com>
Cc: 59671 <at> debbugs.gnu.org
Subject: Re: bug#59671: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Thu, 8 Dec 2022 19:00:04 +0000
[Message part 1 (text/plain, inline)]
Hello, Po.

On Tue, Nov 29, 2022 at 15:08:15 +0800, Po Lu via CC-Mode-help wrote:
> Package: cc-mode

> Insert the following code in a buffer:

> /* fns.c -- generic utility functions.  */

> /* Allocate a scratch buffer with the given size.  The buffer must be
>    used before the next call to allocscratch.  */

> static void *
> allocscratch (size_t size)
> {

> }

> now, on the line below the first comment, type:

> typedef struct foo

> then pause for a second, and type:

> bar;

> c-found-types will then contain "allocscratch"!.

Yes.  This is not good.  Please try out the attached patch which applies
cleanly to the release branch (and almost certainly to the master branch
too).  This should fix the problem, in that although "allocscratch" gets
entered into c-found-types, it gets removed again as soon as a type and
declarator are typed in after the typedef.

> Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu)
>  of 2022-11-29
> Package: CC Mode 5.35.2 (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 category-properties 1-bit)

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).

[diff.20221208.diff (text/plain, attachment)]

Information forwarded to bug-cc-mode <at> gnu.org:
bug#59671; Package cc-mode. (Fri, 09 Dec 2022 01:06:02 GMT) Full text and rfc822 format available.

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

From: Po Lu <luangruo <at> yahoo.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 59671 <at> debbugs.gnu.org
Subject: Re: bug#59671: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Fri, 09 Dec 2022 09:05:35 +0800
Alan Mackenzie <acm <at> muc.de> writes:

> Yes.  This is not good.  Please try out the attached patch which applies
> cleanly to the release branch (and almost certainly to the master branch
> too).  This should fix the problem, in that although "allocscratch" gets
> entered into c-found-types, it gets removed again as soon as a type and
> declarator are typed in after the typedef.

This works for my example but I've yet to use the patch in the real
world.  Thanks.




Reply sent to Alan Mackenzie <acm <at> muc.de>:
You have taken responsibility. (Tue, 17 Jan 2023 18:27:02 GMT) Full text and rfc822 format available.

Notification sent to Po Lu <luangruo <at> yahoo.com>:
bug acknowledged by developer. (Tue, 17 Jan 2023 18:27:02 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Po Lu <luangruo <at> yahoo.com>
Cc: 59671-done <at> debbugs.gnu.org
Subject: Re: bug#59671: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Tue, 17 Jan 2023 18:26:03 +0000
Hello, Po.

On Fri, Dec 09, 2022 at 09:05:35 +0800, Po Lu wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > Yes.  This is not good.  Please try out the attached patch which applies
> > cleanly to the release branch (and almost certainly to the master branch
> > too).  This should fix the problem, in that although "allocscratch" gets
> > entered into c-found-types, it gets removed again as soon as a type and
> > declarator are typed in after the typedef.

> This works for my example but I've yet to use the patch in the real
> world.  Thanks.

I've committed the patch and I'm closing the bug with this post.

-- 
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, 15 Feb 2023 12:24:10 GMT) Full text and rfc822 format available.

This bug report was last modified 1 year and 68 days ago.

Previous Next


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