GNU bug report logs - #60769
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: Fri, 13 Jan 2023 03:03:01 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 60769 in the body.
You can then email your comments to 60769 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#60769; Package cc-mode. (Fri, 13 Jan 2023 03:03: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. (Fri, 13 Jan 2023 03:03: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: Fri, 13 Jan 2023 11:01:44 +0800
Package: cc-mode

Here is another example of incorrect type recognition in C Mode as a
result of a typo:

static Lisp_Object
frame_geometry (Lisp_Object frame, Lisp_Object attribute)
{
  struct frame *f = decode_live_frame (frame);
  /**   XWindowAttributes atts; **/
  Window rootw;
  unsigned int ign, native_width, native_height, x_border_width = 0;
  int x_native = 0, y_native = 0, xptr = 0, yptr = 0;
  int left_off = 0, right_off = 0, top_off = 0, bottom_off = 0;
  int outer_left, outer_top, outer_right, outer_bottom;
  int native_left, native_top, native_right, native_bottom;
  int inner_left, inner_top, inner_right, inner_bottom;
  int internal_border_width;
  bool menu_bar_external = false, tool_bar_external = false;
  int menu_bar_height = 0, menu_bar_width = 0;
  int tab_bar_height = 0, tab_bar_width = 0;
  int tool_bar_height = 0, tool_bar_width = 0;

  if (FRAME_INITIAL_P (f) || !FRAME_ANDROID_P (f)
      || !FRAME_ANDROID_WINDOW (f))
    return Qnil;

  block_input ();
  android_get_geometry (FRAME_ANDROID_WINDOW (f),
			&rootw, &x_native, &y_native,
			&native_width, &native_height, &x_border_width,
			&ign);
  unblock_input ();
}

Place point after "android_get_geometry (", and accidentally type:

  d

(this was meant to be C-M-d.)

Now, FRAME_ANDROID_WINDOW and android_get_geometry are stuck in
c-found-types.

Thanks.

Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu)
 of 2023-01-13
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#60769; Package cc-mode. (Mon, 16 Jan 2023 18:09:02 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Po Lu <luangruo <at> yahoo.com>
Cc: 60769 <at> debbugs.gnu.org
Subject: Re: bug#60769: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Mon, 16 Jan 2023 18:07:51 +0000
Hello, Po.

On Fri, Jan 13, 2023 at 11:01:44 +0800, Po Lu via CC-Mode-help wrote:
> Package: cc-mode

> Here is another example of incorrect type recognition in C Mode as a
> result of a typo:

> static Lisp_Object
> frame_geometry (Lisp_Object frame, Lisp_Object attribute)
> {
>   struct frame *f = decode_live_frame (frame);
>   /**   XWindowAttributes atts; **/
>   Window rootw;
>   unsigned int ign, native_width, native_height, x_border_width = 0;
>   int x_native = 0, y_native = 0, xptr = 0, yptr = 0;
>   int left_off = 0, right_off = 0, top_off = 0, bottom_off = 0;
>   int outer_left, outer_top, outer_right, outer_bottom;
>   int native_left, native_top, native_right, native_bottom;
>   int inner_left, inner_top, inner_right, inner_bottom;
>   int internal_border_width;
>   bool menu_bar_external = false, tool_bar_external = false;
>   int menu_bar_height = 0, menu_bar_width = 0;
>   int tab_bar_height = 0, tab_bar_width = 0;
>   int tool_bar_height = 0, tool_bar_width = 0;

>   if (FRAME_INITIAL_P (f) || !FRAME_ANDROID_P (f)
>       || !FRAME_ANDROID_WINDOW (f))
>     return Qnil;

>   block_input ();
>   android_get_geometry (FRAME_ANDROID_WINDOW (f),
> 			&rootw, &x_native, &y_native,
> 			&native_width, &native_height, &x_border_width,
> 			&ign);
>   unblock_input ();
> }

> Place point after "android_get_geometry (", and accidentally type:

>   d

> (this was meant to be C-M-d.)

> Now, FRAME_ANDROID_WINDOW and android_get_geometry are stuck in
> c-found-types.

I'm afraid I can't reproduce this on either master or emacs-29.  Am I
correct in assuming that you mean insert the one single character "d"
after the "(" in that line?  Even when I additionally insert a space,
M-: (c-list-found-types) just lists "Window", which seems correct.

> Thanks.

> Emacs  : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu)
>  of 2023-01-13
> 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).




Information forwarded to bug-cc-mode <at> gnu.org:
bug#60769; Package cc-mode. (Tue, 17 Jan 2023 05:18:02 GMT) Full text and rfc822 format available.

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

From: Po Lu <luangruo <at> yahoo.com>
To: Alan Mackenzie <acm <at> muc.de>
Cc: 60769 <at> debbugs.gnu.org
Subject: Re: bug#60769: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Tue, 17 Jan 2023 13:16:22 +0800
Alan Mackenzie <acm <at> muc.de> writes:

> Hello, Po.
>
> On Fri, Jan 13, 2023 at 11:01:44 +0800, Po Lu via CC-Mode-help wrote:
>> Package: cc-mode
>
>> Here is another example of incorrect type recognition in C Mode as a
>> result of a typo:
>
>> static Lisp_Object
>> frame_geometry (Lisp_Object frame, Lisp_Object attribute)
>> {
>>   struct frame *f = decode_live_frame (frame);
>>   /**   XWindowAttributes atts; **/
>>   Window rootw;
>>   unsigned int ign, native_width, native_height, x_border_width = 0;
>>   int x_native = 0, y_native = 0, xptr = 0, yptr = 0;
>>   int left_off = 0, right_off = 0, top_off = 0, bottom_off = 0;
>>   int outer_left, outer_top, outer_right, outer_bottom;
>>   int native_left, native_top, native_right, native_bottom;
>>   int inner_left, inner_top, inner_right, inner_bottom;
>>   int internal_border_width;
>>   bool menu_bar_external = false, tool_bar_external = false;
>>   int menu_bar_height = 0, menu_bar_width = 0;
>>   int tab_bar_height = 0, tab_bar_width = 0;
>>   int tool_bar_height = 0, tool_bar_width = 0;
>
>>   if (FRAME_INITIAL_P (f) || !FRAME_ANDROID_P (f)
>>       || !FRAME_ANDROID_WINDOW (f))
>>     return Qnil;
>
>>   block_input ();
>>   android_get_geometry (FRAME_ANDROID_WINDOW (f),
>> 			&rootw, &x_native, &y_native,
>> 			&native_width, &native_height, &x_border_width,
>> 			&ign);
>>   unblock_input ();
>> }
>
>> Place point after "android_get_geometry (", and accidentally type:
>
>>   d
>
>> (this was meant to be C-M-d.)
>
>> Now, FRAME_ANDROID_WINDOW and android_get_geometry are stuck in
>> c-found-types.
>
> I'm afraid I can't reproduce this on either master or emacs-29.  Am I
> correct in assuming that you mean insert the one single character "d"
> after the "(" in that line?  Even when I additionally insert a space,
> M-: (c-list-found-types) just lists "Window", which seems correct.

Sorry for the confusion, Alan.  I meant to insert the character "d"
immediately before "(".

Thanks.




Information forwarded to bug-cc-mode <at> gnu.org:
bug#60769; Package cc-mode. (Wed, 18 Jan 2023 15:25:02 GMT) Full text and rfc822 format available.

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

From: Alan Mackenzie <acm <at> muc.de>
To: Po Lu <luangruo <at> yahoo.com>
Cc: 60769 <at> debbugs.gnu.org
Subject: Re: bug#60769: CC Mode 5.35.2 (C/*l); More incorrect type recognition
Date: Wed, 18 Jan 2023 15:24:15 +0000
[Message part 1 (text/plain, inline)]
Hello, Po.

On Tue, Jan 17, 2023 at 13:16:22 +0800, Po Lu wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > Hello, Po.

> > On Fri, Jan 13, 2023 at 11:01:44 +0800, Po Lu via CC-Mode-help wrote:
> >> Package: cc-mode

> >> Here is another example of incorrect type recognition in C Mode as a
> >> result of a typo:

> >> static Lisp_Object
> >> frame_geometry (Lisp_Object frame, Lisp_Object attribute)
> >> {
> >>   struct frame *f = decode_live_frame (frame);
> >>   /**   XWindowAttributes atts; **/
> >>   Window rootw;
> >>   unsigned int ign, native_width, native_height, x_border_width = 0;
> >>   int x_native = 0, y_native = 0, xptr = 0, yptr = 0;
> >>   int left_off = 0, right_off = 0, top_off = 0, bottom_off = 0;
> >>   int outer_left, outer_top, outer_right, outer_bottom;
> >>   int native_left, native_top, native_right, native_bottom;
> >>   int inner_left, inner_top, inner_right, inner_bottom;
> >>   int internal_border_width;
> >>   bool menu_bar_external = false, tool_bar_external = false;
> >>   int menu_bar_height = 0, menu_bar_width = 0;
> >>   int tab_bar_height = 0, tab_bar_width = 0;
> >>   int tool_bar_height = 0, tool_bar_width = 0;

> >>   if (FRAME_INITIAL_P (f) || !FRAME_ANDROID_P (f)
> >>       || !FRAME_ANDROID_WINDOW (f))
> >>     return Qnil;

> >>   block_input ();
> >>   android_get_geometry (FRAME_ANDROID_WINDOW (f),
> >> 			&rootw, &x_native, &y_native,
> >> 			&native_width, &native_height, &x_border_width,
> >> 			&ign);
> >>   unblock_input ();
> >> }

> >> Place point after "android_get_geometry (", and accidentally type:

> >>   d

> >> (this was meant to be C-M-d.)

> >> Now, FRAME_ANDROID_WINDOW and android_get_geometry are stuck in
> >> c-found-types.

> > I'm afraid I can't reproduce this on either master or emacs-29.  Am I
> > correct in assuming that you mean insert the one single character "d"
> > after the "(" in that line?  Even when I additionally insert a space,
> > M-: (c-list-found-types) just lists "Window", which seems correct.

> Sorry for the confusion, Alan.  I meant to insert the character "d"
> immediately before "(".

Ah!  Yes, that's different.  ;-)

I can now reproduce the bug, and analysing it, it actually turned out to
be two distinct cases, one for android_get_geometry and the other for
FRAME_ANDROID_WINDOW.  I've fixed both of them with the now familiar
"unsafe-maybe" mechanism.

Would you please do the usual with the attached patch, and let me know if
anything is amiss.  In particular, if you notice any types which were
(correctly) fontified as types, but now no longer get fontified, please
tell me.  Thanks!

I look forward to hearing from you again.

-- 
Alan Mackenzie (Nuremberg, Germany).


> Thanks.
[diff.20230118.diff (text/plain, attachment)]

Information forwarded to bug-cc-mode <at> gnu.org:
bug#60769; Package cc-mode. (Thu, 19 Jan 2023 01:07:01 GMT) Full text and rfc822 format available.

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

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

> Ah!  Yes, that's different.  ;-)
>
> I can now reproduce the bug, and analysing it, it actually turned out to
> be two distinct cases, one for android_get_geometry and the other for
> FRAME_ANDROID_WINDOW.  I've fixed both of them with the now familiar
> "unsafe-maybe" mechanism.
>
> Would you please do the usual with the attached patch, and let me know if
> anything is amiss.  In particular, if you notice any types which were
> (correctly) fontified as types, but now no longer get fontified, please
> tell me.  Thanks!
>
> I look forward to hearing from you again.

Seems to work nicely here, thank you.




Reply sent to Alan Mackenzie <acm <at> muc.de>:
You have taken responsibility. (Thu, 19 Jan 2023 11:22:02 GMT) Full text and rfc822 format available.

Notification sent to Po Lu <luangruo <at> yahoo.com>:
bug acknowledged by developer. (Thu, 19 Jan 2023 11:22:02 GMT) Full text and rfc822 format available.

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

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

On Thu, Jan 19, 2023 at 09:05:54 +0800, Po Lu wrote:
> Alan Mackenzie <acm <at> muc.de> writes:

> > Ah!  Yes, that's different.  ;-)

> > I can now reproduce the bug, and analysing it, it actually turned out to
> > be two distinct cases, one for android_get_geometry and the other for
> > FRAME_ANDROID_WINDOW.  I've fixed both of them with the now familiar
> > "unsafe-maybe" mechanism.

> > Would you please do the usual with the attached patch, and let me know if
> > anything is amiss.  In particular, if you notice any types which were
> > (correctly) fontified as types, but now no longer get fontified, please
> > tell me.  Thanks!

> > I look forward to hearing from you again.

> Seems to work nicely here, thank you.

Thanks!  I've now committed that 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. (Thu, 16 Feb 2023 12:24:09 GMT) Full text and rfc822 format available.

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

Previous Next


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