* bug#39919: 26.3; Incorrect byte-compiler warning @ 2020-03-04 23:18 Mike Woolley 2020-03-05 13:50 ` Michael Heerdegen 0 siblings, 1 reply; 13+ messages in thread From: Mike Woolley @ 2020-03-04 23:18 UTC (permalink / raw) To: 39919 Compiling this minimal test: ;; -*- lexical-binding: t -*- (dotimes (i 10 t) (prin1 i)) Gives the incorrect warning: "Unused lexical variable ‘i’”, even though `i' is clearly used inside the loop. However the following version (dropping the [result] form from `dotimes') does not give the warning: (dotimes (i 10) (prin1 i)) This would seem like a bug to me. Please advise? Thanks, Mike In GNU Emacs 26.3 (build 1, x86_64-apple-darwin18.2.0, NS appkit-1671.20 Version 10.14.3 (Build 18D109)) of 2019-09-02 built on builder10-14.porkrind.org Windowing system distributor 'Apple', version 10.3.1894 Recent messages: Undo! next-line: End of buffer [2 times] Mark set [2 times] auto trimmed 0 chars Saving file /Users/mike/tmp/test.el... Wrote /Users/mike/tmp/test.el Mark saved where search started Saving file /Users/mike/tmp/test.el... Wrote /Users/mike/tmp/test.el Type "q" to restore previous buffer. [3 times] previous-line: Beginning of buffer [2 times] Configured using: 'configure --with-ns '--enable-locallisppath=/Library/Application Support/Emacs/${version}/site-lisp:/Library/Application Support/Emacs/site-lisp' --with-modules' Configured features: NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS MODULES THREADS Important settings: value of $LANG: en_GB.UTF-8 locale-coding-system: utf-8-unix Major mode: Emacs-Lisp Minor modes in effect: shell-dirtrack-mode: t diff-auto-refine-mode: t global-git-gutter-mode: t git-gutter-mode: t global-company-mode: t company-mode: t global-flycheck-mode: t flycheck-mode: t helm-mode: t async-bytecomp-package-mode: t clean-aindent-mode: t yas-global-mode: t yas-minor-mode: t global-auto-revert-mode: t global-semantic-decoration-mode: t global-semanticdb-minor-mode: t global-semantic-idle-scheduler-mode: t global-semantic-highlight-func-mode: t global-semantic-stickyfunc-mode: t semantic-mode: t helm-autoresize-mode: t which-function-mode: t show-paren-mode: t recentf-mode: t msb-mode: t gud-tooltip-mode: t display-time-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t temp-buffer-resize-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort face-remap flyspell ispell mail-extr gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source tls gnutls utf7 netrc nnoo gnus-spec gnus-int gnus-range gnus-win gnus nnheader emacsbug message rmc puny rfc822 mml mml-sec epa derived epg gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils helm-command eieio-opt speedbar sb-image dframe help-fns radix-tree windmove misearch multi-isearch ido wildcard-to-regexp dired-explore dired-sort-menu ls-lisp dired-x dired dired-loaddefs helm-x-files bs helm-for-files helm-bookmark helm-adaptive bookmark pp add-log winner image-file helm-external helm-net browse-url xml url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util mailcap tramp tramp-compat tramp-loaddefs trampver shell pcomplete parse-time ffap server gnuemacs-config my-commands rg rg-ibuffer rg-result wgrep-rg wgrep s rg-history rg-header rg-compat ibuf-ext ibuffer ibuffer-loaddefs grep helm-ls-git vc-git diff-mode vc vc-dispatcher git-gutter-fringe git-gutter helm-company helm-elisp helm-eval edebug helm-info company-oddmuse company-keywords company-etags company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-bbdb company pcase flycheck json map rx dash helm-mode helm-config helm-easymenu async-bytecomp xahk-mode thingatpt htmlize clean-aindent-mode yasnippet-snippets yasnippet elec-pair gc-info autorevert filenotify semantic/decorate/mode semantic/decorate semantic/db-mode semantic/db eieio-base semantic/idle semantic/format ezimage semantic/tag-ls semantic/find semantic/ctxt semantic/util-modes semantic/util semantic semantic/tag semantic/lex semantic/fw mode-local find-func cedet tempo filladapt helm-gtags subr-x pulse helm-files helm-buffers helm-tags helm-locate helm-grep helm-regexp format-spec helm-utils helm-help helm-types helm edmacro kmacro helm-source eieio-compat helm-multi-match helm-lib advice async ggtags etags xref project compile ewoc use-package-diminish my-generic generic generic-x jka-compr which-func imenu paren recentf tree-widget wid-edit msb gud easy-mmode comint ansi-color ring time cus-start cus-load redo+ b b-window b-undo b-movement b-editing b-marking b-bookmark fringe-helper b-compat diminish poet-theme use-package-ensure use-package-core finder-inf info package epg-config url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs password-cache url-vars seq byte-opt bytecomp byte-compile cconv cl-extra help-mode easymenu my-compat cl gv cl-loaddefs cl-lib time-date tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/ns-win ns-win ucs-normalize mule-util term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads kqueue cocoa ns multi-tty make-network-process emacs) Memory information: ((conses 16 676901 15049) (symbols 48 49397 24) (miscs 40 261 1018) (strings 32 171654 3031) (string-bytes 1 4841259) (vectors 16 78649) (vector-slots 8 1272975 58328) (floats 8 323 248) (intervals 56 1704 225) (buffers 992 24)) ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-04 23:18 bug#39919: 26.3; Incorrect byte-compiler warning Mike Woolley @ 2020-03-05 13:50 ` Michael Heerdegen 2020-03-05 14:01 ` Mike Woolley 0 siblings, 1 reply; 13+ messages in thread From: Michael Heerdegen @ 2020-03-05 13:50 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919 Mike Woolley <mike@bulsara.com> writes: > This would seem like a bug to me. Yes, the warning is wrong. There is already a corresponding "FIXME" in the source: | ;; FIXME: This let often leads to "unused var" warnings. Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-05 13:50 ` Michael Heerdegen @ 2020-03-05 14:01 ` Mike Woolley 2020-03-05 14:18 ` Michael Heerdegen 0 siblings, 1 reply; 13+ messages in thread From: Mike Woolley @ 2020-03-05 14:01 UTC (permalink / raw) To: Michael Heerdegen; +Cc: 39919 [-- Attachment #1: Type: text/plain, Size: 726 bytes --] Yes this was pointed out to me :-) Looks like we get the unused variable warning when there is a result form which does not contain the loop variable. [I guess the normal use case would indeed be to use the loop var in the result form and so writing it like this was probably a reasonable compromise…] I will adjust my code to work around it. Thanks, Mike > On 5 Mar 2020, at 13:50, Michael Heerdegen <michael_heerdegen@web.de> wrote: > > Mike Woolley <mike@bulsara.com> writes: > >> This would seem like a bug to me. > > Yes, the warning is wrong. There is already a corresponding "FIXME" in > the source: > > | ;; FIXME: This let often leads to "unused var" warnings. > > > Michael. [-- Attachment #2: Type: text/html, Size: 1992 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-05 14:01 ` Mike Woolley @ 2020-03-05 14:18 ` Michael Heerdegen 2020-03-05 22:20 ` Michael Heerdegen 0 siblings, 1 reply; 13+ messages in thread From: Michael Heerdegen @ 2020-03-05 14:18 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919 Mike Woolley <mike@bulsara.com> writes: > [I guess the normal use case would indeed be to use the loop var in > the result form and so writing it like this was probably a reasonable > compromise…] No, it's just the warning is not easy to avoid, it's not raised explicitly, it's an accident that it's raised in cases like yours which are valid cases, even if they are not the majority of uses. So I think it's worth to fix this. Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-05 14:18 ` Michael Heerdegen @ 2020-03-05 22:20 ` Michael Heerdegen 2020-03-07 4:23 ` Richard Stallman 0 siblings, 1 reply; 13+ messages in thread From: Michael Heerdegen @ 2020-03-05 22:20 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919 Michael Heerdegen <michael_heerdegen@web.de> writes: > So I think it's worth to fix this. Hmm, no, actually, there were already two old bug reports about this issue: bug#16206 and 31232. The RESULT argument of `dotimes' had been deprecated as a result of that discussion. So I'm going to merge this report with the others and close it. Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-05 22:20 ` Michael Heerdegen @ 2020-03-07 4:23 ` Richard Stallman 2020-03-07 12:52 ` Mike Woolley 2020-03-08 0:49 ` Michael Heerdegen 0 siblings, 2 replies; 13+ messages in thread From: Richard Stallman @ 2020-03-07 4:23 UTC (permalink / raw) To: Michael Heerdegen; +Cc: 39919, mike [[[ To any NSA and FBI agents reading my email: please consider ]]] [[[ whether defending the US Constitution against all enemies, ]]] [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > Hmm, no, actually, there were already two old bug reports about this > issue: bug#16206 and 31232. The RESULT argument of `dotimes' had been > deprecated as a result of that discussion. I can't easily obtain that discussion. Perhaps that discussion turned up some other reason to deprecated that argument. But if it was solely to avoid these warnings, I am surprised it is hard. Does this patch fix the problem? diff -u /home/rms/emacs-git/build-oct-2/lisp/subr.el.\~1\~ /home/rms/emacs-git/build-oct-2/lisp/subr.el --- /home/rms/emacs-git/build-oct-2/lisp/subr.el.~1~ 2019-10-02 11:07:09.046065358 -0400 +++ /home/rms/emacs-git/build-oct-2/lisp/subr.el 2020-03-06 19:31:20.053693281 -0500 @@ -281,7 +281,7 @@ (setq ,counter (1+ ,counter))) ,@(if (cddr spec) ;; FIXME: This let often leads to "unused var" warnings. - `((let ((,(car spec) ,counter)) ,@(cddr spec)))))) + `((let ((,(car spec) ,counter)) ,(car spec) ,@(cddr spec)))))) `(let ((,temp ,end) (,(car spec) ,start)) (while (< ,(car spec) ,temp) Diff finished. Fri Mar 6 19:34:23 2020 -- Dr Richard Stallman Chief GNUisance of the GNU Project (https://gnu.org) Founder, Free Software Foundation (https://fsf.org) Internet Hall-of-Famer (https://internethalloffame.org) ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-07 4:23 ` Richard Stallman @ 2020-03-07 12:52 ` Mike Woolley 2020-04-28 2:52 ` Michael Heerdegen 2020-03-08 0:49 ` Michael Heerdegen 1 sibling, 1 reply; 13+ messages in thread From: Mike Woolley @ 2020-03-07 12:52 UTC (permalink / raw) To: rms; +Cc: Michael Heerdegen, 39919 [-- Attachment #1: Type: text/plain, Size: 1886 bytes --] Yes that fixes the issue in the test cases I sent. Also looks good in my real code where I noticed the problem! Thanks Richard, Mike > On 7 Mar 2020, at 04:23, Richard Stallman <rms@gnu.org> wrote: > > [[[ To any NSA and FBI agents reading my email: please consider ]]] > [[[ whether defending the US Constitution against all enemies, ]]] > [[[ foreign or domestic, requires you to follow Snowden's example. ]]] > >> Hmm, no, actually, there were already two old bug reports about this >> issue: bug#16206 and 31232. The RESULT argument of `dotimes' had been >> deprecated as a result of that discussion. > > I can't easily obtain that discussion. Perhaps that discussion > turned up some other reason to deprecated that argument. But if it > was solely to avoid these warnings, I am surprised it is hard. > > Does this patch fix the problem? > > diff -u /home/rms/emacs-git/build-oct-2/lisp/subr.el.\~1\~ /home/rms/emacs-git/build-oct-2/lisp/subr.el > --- /home/rms/emacs-git/build-oct-2/lisp/subr.el.~1~ 2019-10-02 11:07:09.046065358 -0400 > +++ /home/rms/emacs-git/build-oct-2/lisp/subr.el 2020-03-06 19:31:20.053693281 -0500 > @@ -281,7 +281,7 @@ > (setq ,counter (1+ ,counter))) > ,@(if (cddr spec) > ;; FIXME: This let often leads to "unused var" warnings. > - `((let ((,(car spec) ,counter)) ,@(cddr spec)))))) > + `((let ((,(car spec) ,counter)) ,(car spec) ,@(cddr spec)))))) > `(let ((,temp ,end) > (,(car spec) ,start)) > (while (< ,(car spec) ,temp) > > Diff finished. Fri Mar 6 19:34:23 2020 > > -- > Dr Richard Stallman > Chief GNUisance of the GNU Project (https://gnu.org) > Founder, Free Software Foundation (https://fsf.org) > Internet Hall-of-Famer (https://internethalloffame.org) > > [-- Attachment #2: Type: text/html, Size: 4325 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-07 12:52 ` Mike Woolley @ 2020-04-28 2:52 ` Michael Heerdegen 2020-04-28 16:35 ` Mike Woolley 0 siblings, 1 reply; 13+ messages in thread From: Michael Heerdegen @ 2020-04-28 2:52 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919, 31232, rms Mike Woolley <mike@bulsara.com> writes: > Yes that fixes the issue in the test cases I sent. > Also looks good in my real code where I noticed the problem! Seems the current warning is a compromise. It is not perfect because it is not really clear what the warning means. I would vote for a clear "argument is deprecated" warning. Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-04-28 2:52 ` Michael Heerdegen @ 2020-04-28 16:35 ` Mike Woolley 2020-04-28 18:08 ` bug#31232: " Michael Heerdegen 0 siblings, 1 reply; 13+ messages in thread From: Mike Woolley @ 2020-04-28 16:35 UTC (permalink / raw) To: Michael Heerdegen; +Cc: 39919, 31232, rms [-- Attachment #1: Type: text/plain, Size: 710 bytes --] I think people using `dotimes' from `cl’ are going to expect it to work like in Common Lisp (as that’s the whole point). Just deprecating the result parameter because it’s too hard doesn’t seem like a good solution :-) Thanks, Mike > On 28 Apr 2020, at 03:52, Michael Heerdegen <michael_heerdegen@web.de> wrote: > > Mike Woolley <mike@bulsara.com> writes: > >> Yes that fixes the issue in the test cases I sent. >> Also looks good in my real code where I noticed the problem! > > Seems the current warning is a compromise. It is not perfect because it > is not really clear what the warning means. I would vote for a clear > "argument is deprecated" warning. > > Michael. [-- Attachment #2: Type: text/html, Size: 2208 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#31232: bug#39919: 26.3; Incorrect byte-compiler warning 2020-04-28 16:35 ` Mike Woolley @ 2020-04-28 18:08 ` Michael Heerdegen 2020-04-28 18:48 ` Mike Woolley 0 siblings, 1 reply; 13+ messages in thread From: Michael Heerdegen @ 2020-04-28 18:08 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919, 31232, rms Mike Woolley <mike@bulsara.com> writes: > I think people using `dotimes' from `cl’ are going to expect it to > work like in Common Lisp (as that’s the whole point). But note that dotimes is in subr.el, and cl-dotimes is separate (though it's currently implemented on top of dotimes). > Just deprecating the result parameter because it’s too hard doesn’t > seem like a good solution :-) I regret that I said it like that, no, that's not a reason. The main reason is that the whole existence (usefulness) of the RESULT argument and its position in the syntax are questionable. Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#31232: bug#39919: 26.3; Incorrect byte-compiler warning 2020-04-28 18:08 ` bug#31232: " Michael Heerdegen @ 2020-04-28 18:48 ` Mike Woolley 2020-04-28 20:14 ` Michael Heerdegen 0 siblings, 1 reply; 13+ messages in thread From: Mike Woolley @ 2020-04-28 18:48 UTC (permalink / raw) To: Michael Heerdegen; +Cc: 39919, 31232, rms Thanks for the explanation Michael. How about changing dotimes as you suggested, but making cl-dotimes have it’s own implementation with the result parameter fix applied? Then everyone’s a winner - those who want the CL behaviour can have it, but core Emacs will have a cleaner version. Thanks, Mike > On 28 Apr 2020, at 19:13, Michael Heerdegen <michael_heerdegen@web.de> wrote: > > Mike Woolley <mike@bulsara.com> writes: > >> I think people using `dotimes' from `cl’ are going to expect it to >> work like in Common Lisp (as that’s the whole point). > > But note that dotimes is in subr.el, and cl-dotimes is separate (though > it's currently implemented on top of dotimes). > >> Just deprecating the result parameter because it’s too hard doesn’t >> seem like a good solution :-) > > I regret that I said it like that, no, that's not a reason. The main > reason is that the whole existence (usefulness) of the RESULT argument > and its position in the syntax are questionable. > > Michael. > ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#31232: bug#39919: 26.3; Incorrect byte-compiler warning 2020-04-28 18:48 ` Mike Woolley @ 2020-04-28 20:14 ` Michael Heerdegen 0 siblings, 0 replies; 13+ messages in thread From: Michael Heerdegen @ 2020-04-28 20:14 UTC (permalink / raw) To: Mike Woolley; +Cc: 39919, 31232, rms Mike Woolley <mike@bulsara.com> writes: > Thanks for the explanation Michael. > > How about changing dotimes as you suggested, but making cl-dotimes > have it’s own implementation with the result parameter fix applied? > > Then everyone’s a winner - those who want the CL behaviour can have > it, but core Emacs will have a cleaner version. Exactly my idea after thinking about what I had written :-) Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
* bug#39919: 26.3; Incorrect byte-compiler warning 2020-03-07 4:23 ` Richard Stallman 2020-03-07 12:52 ` Mike Woolley @ 2020-03-08 0:49 ` Michael Heerdegen 1 sibling, 0 replies; 13+ messages in thread From: Michael Heerdegen @ 2020-03-08 0:49 UTC (permalink / raw) To: Richard Stallman; +Cc: 39919, mike Richard Stallman <rms@gnu.org> writes: > I can't easily obtain that discussion. Perhaps that discussion > turned up some other reason to deprecated that argument. Yes: the reason was that it's not very useful, the order of execution is strange, and it's easy to avoid, so, to cite Stefan, "Which is why I think the current behavior of complaining when the third field is used (except in the very rare case where the third field refers to the iteration variable) is a fairly good compromise." > But if it was solely to avoid these warnings, I am surprised it is > hard. > > Does this patch fix the problem? Yes, that should work. I don't consider it a good fix because it just hides the underlying problem (I guess that's why the original author added the FIXME instead of fixing it in this obvious way). We have manifestations of the same issue in other places that, AFAIR, can't be fixed in the same way. Anyway, I think the warning currently raised is not helpful, it is confusing if you didn't read the related bug reports. I guess we could just say that the argument is deprecated. Maybe that didn't happen because dotimes in Common Lisp has that third argument too (as mentioned in the other reports). Michael. ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2020-04-28 20:14 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-03-04 23:18 bug#39919: 26.3; Incorrect byte-compiler warning Mike Woolley 2020-03-05 13:50 ` Michael Heerdegen 2020-03-05 14:01 ` Mike Woolley 2020-03-05 14:18 ` Michael Heerdegen 2020-03-05 22:20 ` Michael Heerdegen 2020-03-07 4:23 ` Richard Stallman 2020-03-07 12:52 ` Mike Woolley 2020-04-28 2:52 ` Michael Heerdegen 2020-04-28 16:35 ` Mike Woolley 2020-04-28 18:08 ` bug#31232: " Michael Heerdegen 2020-04-28 18:48 ` Mike Woolley 2020-04-28 20:14 ` Michael Heerdegen 2020-03-08 0:49 ` Michael Heerdegen
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).