* Emacs is not reproducible @ 2021-05-17 15:28 Bone Baboon 2021-05-17 15:45 ` Alan Mackenzie ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Bone Baboon @ 2021-05-17 15:28 UTC (permalink / raw) To: emacs-devel I am using the Guix operating system. It provides tools to verify if a software package is reproducible. <https://guix.gnu.org/en/manual/en/html_node/On-Trusting-Binaries.html#On-Trusting-Binaries> For details on how Emacs 27.2 is not reproducible see <https://issues.guix.gnu.org/issue/35085#7>. Previous versions of Emacs are also not reproducible as reported in that thread. For information on why reproducible software is important see <https://reproducible-builds.org/>. For information on how to make software reproducible see <https://reproducible-builds.org/docs/>. Is there currently any work underway to make Emacs reproducible? ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-17 15:28 Emacs is not reproducible Bone Baboon @ 2021-05-17 15:45 ` Alan Mackenzie 2021-05-17 15:55 ` Achim Gratz 2021-05-17 15:54 ` Eli Zaretskii 2021-05-17 16:40 ` Stefan Monnier 2 siblings, 1 reply; 19+ messages in thread From: Alan Mackenzie @ 2021-05-17 15:45 UTC (permalink / raw) To: Bone Baboon; +Cc: emacs-devel Hello, Bone. On Mon, May 17, 2021 at 11:28:18 -0400, Bone Baboon wrote: > I am using the Guix operating system. It provides tools to verify if > a software package is reproducible. What does it even mean to say a software package is "reproducible"? > <https://guix.gnu.org/en/manual/en/html_node/On-Trusting-Binaries.html#On-Trusting-Binaries> > For details on how Emacs 27.2 is not reproducible see > <https://issues.guix.gnu.org/issue/35085#7>. Previous versions of > Emacs are also not reproducible as reported in that thread. > For information on why reproducible software is important see > <https://reproducible-builds.org/>. > For information on how to make software reproducible see > <https://reproducible-builds.org/docs/>. > Is there currently any work underway to make Emacs reproducible? Without knowing what it means, I can't really say, but I suspect not. -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-17 15:45 ` Alan Mackenzie @ 2021-05-17 15:55 ` Achim Gratz 0 siblings, 0 replies; 19+ messages in thread From: Achim Gratz @ 2021-05-17 15:55 UTC (permalink / raw) To: emacs-devel Alan Mackenzie writes: > On Mon, May 17, 2021 at 11:28:18 -0400, Bone Baboon wrote: >> I am using the Guix operating system. It provides tools to verify if >> a software package is reproducible. > > What does it even mean to say a software package is "reproducible"? It means this: you can build it multiple times on the same or even on different systems (which need to enable the same configuration of course) and you get exactly identical build artefacts out of each such build. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-17 15:28 Emacs is not reproducible Bone Baboon 2021-05-17 15:45 ` Alan Mackenzie @ 2021-05-17 15:54 ` Eli Zaretskii 2021-05-17 16:40 ` Stefan Monnier 2 siblings, 0 replies; 19+ messages in thread From: Eli Zaretskii @ 2021-05-17 15:54 UTC (permalink / raw) To: Bone Baboon; +Cc: emacs-devel > From: Bone Baboon <bone.baboon@disroot.org> > Date: Mon, 17 May 2021 11:28:18 -0400 > > I am using the Guix operating system. It provides tools to verify if a software package is reproducible. <https://guix.gnu.org/en/manual/en/html_node/On-Trusting-Binaries.html#On-Trusting-Binaries> > > For details on how Emacs 27.2 is not reproducible see <https://issues.guix.gnu.org/issue/35085#7>. Previous versions of Emacs are also not reproducible as reported in that thread. > > For information on why reproducible software is important see <https://reproducible-builds.org/>. > > For information on how to make software reproducible see <https://reproducible-builds.org/docs/>. > > Is there currently any work underway to make Emacs reproducible? We are aware of the issues, and solve them as it becomes possible, yes. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-17 15:28 Emacs is not reproducible Bone Baboon 2021-05-17 15:45 ` Alan Mackenzie 2021-05-17 15:54 ` Eli Zaretskii @ 2021-05-17 16:40 ` Stefan Monnier 2021-05-23 3:31 ` Stefan Monnier 2 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2021-05-17 16:40 UTC (permalink / raw) To: Bone Baboon; +Cc: emacs-devel > Is there currently any work underway to make Emacs reproducible? There has been changes made in the past to fix some problems. I have a pending patch in bug#46502 (see below) which aims to fix some more of those problems, but still haven't heard confirmation that it helps. Stefan diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index e0feb95a46..06c925b7bf 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -268,32 +269,16 @@ byte-compile-inline-expand ;; The byte-code will be really inlined in byte-compile-unfold-bcf. `(,fn ,@(cdr form))) ((or `(lambda . ,_) `(closure . ,_)) - (if (not (or (eq fn localfn) ;From the same file => same mode. - (eq (car fn) ;Same mode. - (if lexical-binding 'closure 'lambda)))) - ;; While byte-compile-unfold-bcf can inline dynbind byte-code into - ;; letbind byte-code (or any other combination for that matter), we - ;; can only inline dynbind source into dynbind source or letbind - ;; source into letbind source. - (progn - ;; We can of course byte-compile the inlined function - ;; first, and then inline its byte-code. - (byte-compile name) - `(,(symbol-function name) ,@(cdr form))) - (let ((newfn (if (eq fn localfn) - ;; If `fn' is from the same file, it has already - ;; been preprocessed! - `(function ,fn) - ;; Try and process it "in its original environment". - (let ((byte-compile-bound-variables nil)) - (byte-compile-preprocess - (byte-compile--reify-function fn)))))) - (if (eq (car-safe newfn) 'function) - (macroexp--unfold-lambda `(,(cadr newfn) ,@(cdr form))) - ;; This can happen because of macroexp-warn-and-return &co. - (byte-compile-warn - "Inlining closure %S failed" name) - form)))) + (if (eq fn localfn) ;From the same file => same mode. + (macroexp--unfold-lambda `(,fn ,@(cdr form))) + ;; While byte-compile-unfold-bcf can inline dynbind byte-code into + ;; letbind byte-code (or any other combination for that matter), we + ;; can only inline dynbind source into dynbind source or letbind + ;; source into letbind source. + ;; We can of course byte-compile the inlined function + ;; first, and then inline its byte-code. + (byte-compile name) + `(,(symbol-function name) ,@(cdr form)))) (_ ;; Give up on inlining. form)))) ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-17 16:40 ` Stefan Monnier @ 2021-05-23 3:31 ` Stefan Monnier 2021-05-23 23:52 ` Glenn Morris 0 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2021-05-23 3:31 UTC (permalink / raw) To: Bone Baboon; +Cc: emacs-devel >> Is there currently any work underway to make Emacs reproducible? > There has been changes made in the past to fix some problems. > I have a pending patch in bug#46502 (see below) which aims to fix some > more of those problems, but still haven't heard confirmation that it > helps. This is quite odd: both in bug#46502 and here again I don't hear anything back from my proposal (not even some complaint that it doesn't apply or it breaks something), even tho all I'm asking if for someone to try and confirm whether it makes the build more (or less?) reproducible, which I thought should be reasonably easy to do. What am I missing? Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-23 3:31 ` Stefan Monnier @ 2021-05-23 23:52 ` Glenn Morris 2021-05-25 17:41 ` Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Glenn Morris @ 2021-05-23 23:52 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel Stefan Monnier wrote: >> There has been changes made in the past to fix some problems. >> I have a pending patch in bug#46502 (see below) which aims to fix some >> more of those problems, but still haven't heard confirmation that it >> helps. I did 10 builds with -j8; 5 without your patch and 5 with. The builds without your patch had changes in 12, 10, 9, 11 elc files. The builds with your patch had changes in 4, 4, 7, 4 elc files. Mostly tramp.elc, ox-odt.elc, ox.elc, cc-mode.elc; sometimes in eieio files. At least some of these seem to be https://debbugs.gnu.org/34322 So it seems better in terms of less elc variation. It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. > What am I missing? You forgot to make a grammar mistake, or propose changing the default value of a user option. That's how you get comments on Emacs patches. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-23 23:52 ` Glenn Morris @ 2021-05-25 17:41 ` Stefan Monnier 2021-05-25 17:52 ` T.V Raman ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Stefan Monnier @ 2021-05-25 17:41 UTC (permalink / raw) To: Glenn Morris; +Cc: emacs-devel Glenn Morris [2021-05-23 19:52:08] wrote: > Stefan Monnier wrote: >>> There has been changes made in the past to fix some problems. >>> I have a pending patch in bug#46502 (see below) which aims to fix some >>> more of those problems, but still haven't heard confirmation that it >>> helps. > I did 10 builds with -j8; 5 without your patch and 5 with. > The builds without your patch had changes in 12, 10, 9, 11 elc files. > The builds with your patch had changes in 4, 4, 7, 4 elc files. Thanks for confirming what I was seeing. I pushed the patch to `master`. > Mostly tramp.elc, ox-odt.elc, ox.elc, cc-mode.elc; sometimes in > eieio files. At least some of these seem to be https://debbugs.gnu.org/34322 The mystery for those remains, > So it seems better in terms of less elc variation. > It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. I'm indeed looking at it, Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-25 17:41 ` Stefan Monnier @ 2021-05-25 17:52 ` T.V Raman 2021-05-25 18:03 ` Glenn Morris 2021-05-25 18:27 ` Basil L. Contovounesios 2 siblings, 0 replies; 19+ messages in thread From: T.V Raman @ 2021-05-25 17:52 UTC (permalink / raw) To: Stefan Monnier; +Cc: Glenn Morris, emacs-devel [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset=gb18030, Size: 1579 bytes --] Stefan Monnier <monnier@iro.umontreal.ca> writes: This may or may not be related --- but I reported a few months ago that compiling emacspeak with make -j 4 resulted in unpredictable behavior -- I got rid of the parallel build and problems went away. 1. There were no warnings during the parallel build. 2. Things were "weird" in that some advice definitions were not active, reloading files fixed it. I decided to keep life simple at that point and got rid of the parallel build. > Glenn Morris [2021-05-23 19:52:08] wrote: >> Stefan Monnier wrote: >>>> There has been changes made in the past to fix some problems. >>>> I have a pending patch in bug#46502 (see below) which aims to fix some >>>> more of those problems, but still haven't heard confirmation that it >>>> helps. >> I did 10 builds with -j8; 5 without your patch and 5 with. >> The builds without your patch had changes in 12, 10, 9, 11 elc files. >> The builds with your patch had changes in 4, 4, 7, 4 elc files. > > Thanks for confirming what I was seeing. I pushed the patch to `master`. > >> Mostly tramp.elc, ox-odt.elc, ox.elc, cc-mode.elc; sometimes in >> eieio files. At least some of these seem to be https://debbugs.gnu.org/34322 > > The mystery for those remains, > >> So it seems better in terms of less elc variation. >> It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. > > I'm indeed looking at it, > > > Stefan > > -- Thanks, --Raman(I Search, I Find, I Misplace, I Research) 7©4 Id: kg:/m/0285kf1 0Ü8 ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-25 17:41 ` Stefan Monnier 2021-05-25 17:52 ` T.V Raman @ 2021-05-25 18:03 ` Glenn Morris 2021-05-26 20:58 ` Stefan Monnier 2021-05-25 18:27 ` Basil L. Contovounesios 2 siblings, 1 reply; 19+ messages in thread From: Glenn Morris @ 2021-05-25 18:03 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel >> It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. FTR, I should have said "four", not "all". ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-25 18:03 ` Glenn Morris @ 2021-05-26 20:58 ` Stefan Monnier 2021-05-27 12:24 ` Mattias Engdegård 0 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2021-05-26 20:58 UTC (permalink / raw) To: Glenn Morris, Mattias Engdegård; +Cc: emacs-devel Glenn Morris [2021-05-25 14:03:52] wrote: >>> It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. > FTR, I should have said "four", not "all". OK, I think I found the culprit! When `byte-compile-inline-expand` calls `byte-compile`, the nested compilation may end up using the outer value of `byte-optimize--lexvars` resulting in plain-old broken code. In the case at hand, during compilation of `semantic-analyze-find-tag-sequence-default` the call to `semantic-tag-of-class-p` gets miscompiled because `byte-optimize--lexvars` says that `tag` is known to be nil and that info gets propagated to the body of `semantic-tag-of-class-p` (where `tag` refers to another variable). Matthias, could you try and see where byte-opt.el should let-bind `byte-optimize--lexvars` to nil to avoid this problem? I guess we could add it to `byte-compile-top-level`, but it would be better if we could do it somewhere in `byte-opt.el`. See sample session below for "the evidence". Stefan % rm lisp/cedet/semantic/analyze.elc lisp/cedet/semantic/tag.elc; make -C lisp cedet/semantic/analyze.elc make : on entre dans le répertoire « /home/monnier/src/emacs/trunk/lisp » ELC cedet/semantic/analyze.elc Byte-compiling for inlinling: semantic-tag-p Byte-compiling for inlinling: semantic-tag-class Source = (closure (t) (tag) "Return the class of TAG. This is a symbol like `variable', `function', or `type'. There is no limit to the symbols that may represent the class of a tag. Each parser generates tags with classes defined by it. For functional languages, typical tag classes are: @table @code @item type Data types, named map for a memory block. @item function A function or method, or named execution location. @item variable A variable, or named storage for data. @item include Statement that represents a file from which more tags can be found. @item package Statement that declares this file's package name. @item code Code that has not name or binding to any other symbol, such as in a script. @end table " (nth 1 tag)) Byte-code = #[257 "\211A@\207" [] 2 "Return the class of TAG. This is a symbol like `variable', `function', or `type'. There is no limit to the symbols that may represent the class of a tag. Each parser generates tags with classes defined by it. For functional languages, typical tag classes are: @table @code @item type Data types, named map for a memory block. @item function A function or method, or named execution location. @item variable A variable, or named storage for data. @item include Statement that represents a file from which more tags can be found. @item package Statement that declares this file's package name. @item code Code that has not name or binding to any other symbol, such as in a script. @end table (fn TAG)"] lexvars = nil Disass: byte code: doc: Return the class of TAG. ... args: (arg1) 0 dup 1 cdr 2 car 3 return Byte-compiling for inlinling: semantic-tag-type Byte-compiling for inlinling: semantic-tag-get-attribute Byte-compiling for inlinling: semantic-tag-attributes Byte-compiling for inlinling: semantic-tag-of-class-p Source = (closure (t) (tag class) "Return non-nil if class of TAG is CLASS." (eq (semantic-tag-class tag) class)) Byte-code = #[514 "\211A@\262=\207" [] 4 "Return non-nil if class of TAG is CLASS. (fn TAG CLASS)"] lexvars = ((tagclass nil) (miniscope nil) (fname nil nil) (tagtype nil nil) (tag nil nil) (tmp t) (s nil)) Disass: byte code: doc: Return non-nil if class of TAG is CLASS. ... args: (arg1 arg2) 0 stack-ref 1 1 dup 2 cdr 3 car 4 stack-set 1 6 stack-ref 1 7 eq 8 return Byte-compiling for inlinling: semantic-tag-name Byte-compiling for inlinling: semantic-tag Byte-compiling for inlinling: semantic-tag-type-members Byte-compiling for inlinling: semantic-tag-function-arguments ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-26 20:58 ` Stefan Monnier @ 2021-05-27 12:24 ` Mattias Engdegård 2021-05-27 21:33 ` Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Mattias Engdegård @ 2021-05-27 12:24 UTC (permalink / raw) To: Stefan Monnier; +Cc: Glenn Morris, emacs-devel 26 maj 2021 kl. 22.58 skrev Stefan Monnier <monnier@iro.umontreal.ca>: > Matthias, could you try and see where byte-opt.el should let-bind > `byte-optimize--lexvars` to nil to avoid this problem? > I guess we could add it to `byte-compile-top-level`, but it would be > better if we could do it somewhere in `byte-opt.el`. Oh dear, I can't really find any good place to bind the variable either, but ended up doing it in `byte-compile-inline-expand` on the grounds that it's the only place we re-enter the compiler from the optimiser. It would probably be better if we had a single entry for `byte-optimize-form` that wasn't used recursively; then it could be done there. Anyway, feel free to improve. Writing the test was what took most of the time anyway! ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-27 12:24 ` Mattias Engdegård @ 2021-05-27 21:33 ` Stefan Monnier 0 siblings, 0 replies; 19+ messages in thread From: Stefan Monnier @ 2021-05-27 21:33 UTC (permalink / raw) To: Mattias Engdegård; +Cc: Glenn Morris, emacs-devel >> Matthias, could you try and see where byte-opt.el should let-bind >> `byte-optimize--lexvars` to nil to avoid this problem? >> I guess we could add it to `byte-compile-top-level`, but it would be >> better if we could do it somewhere in `byte-opt.el`. > Oh dear, I can't really find any good place to bind the variable either, but > ended up doing it in `byte-compile-inline-expand` on the grounds that it's > the only place we re-enter the compiler from the optimiser. Fair enough. > It would probably be better if we had a single entry for > `byte-optimize-form` that wasn't used recursively; then it could be > done there. Indeed, that was also my conclusion. > Anyway, feel free to improve. Writing the test was what took most of the time anyway! Thanks for the test, Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-25 17:41 ` Stefan Monnier 2021-05-25 17:52 ` T.V Raman 2021-05-25 18:03 ` Glenn Morris @ 2021-05-25 18:27 ` Basil L. Contovounesios 2021-05-27 21:32 ` Stefan Monnier 2 siblings, 1 reply; 19+ messages in thread From: Basil L. Contovounesios @ 2021-05-25 18:27 UTC (permalink / raw) To: Stefan Monnier; +Cc: Glenn Morris, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: > Glenn Morris [2021-05-23 19:52:08] wrote: >> Stefan Monnier wrote: >>>> There has been changes made in the past to fix some problems. >>>> I have a pending patch in bug#46502 (see below) which aims to fix some >>>> more of those problems, but still haven't heard confirmation that it >>>> helps. >> I did 10 builds with -j8; 5 without your patch and 5 with. >> The builds without your patch had changes in 12, 10, 9, 11 elc files. >> The builds with your patch had changes in 4, 4, 7, 4 elc files. > > Thanks for confirming what I was seeing. I pushed the patch to `master`. > >> So it seems better in terms of less elc variation. >> It causes all tests in test/lisp/cedet/semantic-utest-ia.el to fail. > > I'm indeed looking at it, FYI if those test failures prove too boring there are some new and exciting bootstrap warnings to play with too :). In end of data: calc/calc.el:3126:27: Warning: the function ‘math-compare’ is not known to be defined. calc/calc.el:2805:27: Warning: the function ‘math-zerop’ is not known to be defined. In tramp-handle-access-file: net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was defined net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was defined Thanks, -- Basil ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-25 18:27 ` Basil L. Contovounesios @ 2021-05-27 21:32 ` Stefan Monnier 2021-05-28 9:00 ` Basil L. Contovounesios 0 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2021-05-27 21:32 UTC (permalink / raw) To: Basil L. Contovounesios; +Cc: Glenn Morris, emacs-devel > FYI if those test failures prove too boring there are some new and > exciting bootstrap warnings to play with too :). > > In end of data: > calc/calc.el:3126:27: Warning: the function ‘math-compare’ is not known to be > defined. > calc/calc.el:2805:27: Warning: the function ‘math-zerop’ is not known to be > defined. > In tramp-handle-access-file: > net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was > defined > net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was > defined I believe these should be fixed now. Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Emacs is not reproducible 2021-05-27 21:32 ` Stefan Monnier @ 2021-05-28 9:00 ` Basil L. Contovounesios 2021-06-05 16:26 ` Warning in tramp.el (was: Emacs is not reproducible) Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Basil L. Contovounesios @ 2021-05-28 9:00 UTC (permalink / raw) To: Stefan Monnier; +Cc: Glenn Morris, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: >> FYI if those test failures prove too boring there are some new and >> exciting bootstrap warnings to play with too :). >> >> In end of data: >> calc/calc.el:3126:27: Warning: the function ‘math-compare’ is not known to be >> defined. >> calc/calc.el:2805:27: Warning: the function ‘math-zerop’ is not known to be >> defined. >> In tramp-handle-access-file: >> net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was >> defined >> net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was >> defined > > I believe these should be fixed now. All but the tramp-error one (at least with sufficiently parallel bootstrap)! Thanks, -- Basil ^ permalink raw reply [flat|nested] 19+ messages in thread
* Warning in tramp.el (was: Emacs is not reproducible) 2021-05-28 9:00 ` Basil L. Contovounesios @ 2021-06-05 16:26 ` Stefan Monnier 2021-06-06 6:42 ` Warning in tramp.el Michael Albinus 0 siblings, 1 reply; 19+ messages in thread From: Stefan Monnier @ 2021-06-05 16:26 UTC (permalink / raw) To: Basil L. Contovounesios, Michael Albinus; +Cc: Glenn Morris, emacs-devel Basil L. Contovounesios [2021-05-28 10:00:39] wrote: > Stefan Monnier <monnier@iro.umontreal.ca> writes: >>> FYI if those test failures prove too boring there are some new and >>> exciting bootstrap warnings to play with too :). >>> >>> In end of data: >>> calc/calc.el:3126:27: Warning: the function ‘math-compare’ is not known to be >>> defined. >>> calc/calc.el:2805:27: Warning: the function ‘math-zerop’ is not known to be >>> defined. >>> In tramp-handle-access-file: >>> net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was >>> defined >>> net/tramp.el:3238:43: Warning: attempt to inline ‘tramp-error’ before it was >>> defined >> >> I believe these should be fixed now. > > All but the tramp-error one (at least with sufficiently parallel > bootstrap)! This one is a bit more tricky: `tramp-handle-access-file` (in `tramp.el`) calls the inlinable `tramp-compat-file-missing` (from `tramp-compat.el`) which calls the inlinable `tramp-error` (from `tramp.el`). If `tramp-compat.el` is compiled first, we don't get any warning, but `tramp-error` is not inlined because `tramp-compat.el` doesn't require `tramp` (instead it `declare-function` on `tramp-error`). This case should arguably also signal a warning, because we fail to inline the function, and the only good fix for that would be to change the dependencies such that `tramp-compat.el` requires the file in which `tramp-error` is defined (which may require moving `tramp-error` to some other file to avoid circular dependencies). OTOH if `tramp-compat.el` is not yet compiled when we compile `tramp.el`, we get the above warning. In that case, we *could* actually do the right thing and inline `tramp-error` (and the old inlining code got that right), but the info about `tramp-error` is kept inside `byte-compile-function-environment` at that point, and we don't pass that down to the recursive `byte-compile` (and to some extent for good reason: the inlined function should be compiled in "its" environment rather than in the environment of the caller). So we could try and fix this warning in the byte-compiler, but it could require non-trivial (or ugly) changes to the compiler. I think the better fix is to change the Tramp code to avoid this circular dependency. This will not only avoid the warning but it will also make the inlining work in both cases (and avoid the need for `declare-function` here). Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Warning in tramp.el 2021-06-05 16:26 ` Warning in tramp.el (was: Emacs is not reproducible) Stefan Monnier @ 2021-06-06 6:42 ` Michael Albinus 2021-06-06 17:48 ` Stefan Monnier 0 siblings, 1 reply; 19+ messages in thread From: Michael Albinus @ 2021-06-06 6:42 UTC (permalink / raw) To: Stefan Monnier; +Cc: Basil L. Contovounesios, Glenn Morris, emacs-devel Stefan Monnier <monnier@iro.umontreal.ca> writes: Hi Stefan, > `tramp-handle-access-file` (in `tramp.el`) calls the inlinable > `tramp-compat-file-missing` (from `tramp-compat.el`) which calls the > inlinable `tramp-error` (from `tramp.el`). > > If `tramp-compat.el` is compiled first, we don't get any warning, but > `tramp-error` is not inlined because `tramp-compat.el` doesn't require > `tramp` (instead it `declare-function` on `tramp-error`). > This case should arguably also signal a warning, because we fail to > inline the function, and the only good fix for that would be to > change the dependencies such that `tramp-compat.el` requires the file in > which `tramp-error` is defined (which may require moving `tramp-error` > to some other file to avoid circular dependencies). > > OTOH if `tramp-compat.el` is not yet compiled when we compile > `tramp.el`, we get the above warning. In that case, we *could* actually > do the right thing and inline `tramp-error` (and the old inlining code > got that right), but the info about `tramp-error` is kept inside > `byte-compile-function-environment` at that point, and we don't pass > that down to the recursive `byte-compile` (and to some extent for good > reason: the inlined function should be compiled in "its" environment > rather than in the environment of the caller). > > So we could try and fix this warning in the byte-compiler, but it > could require non-trivial (or ugly) changes to the compiler. > > I think the better fix is to change the Tramp code to avoid this > circular dependency. This will not only avoid the warning but it will > also make the inlining work in both cases (and avoid the need for > `declare-function` here). I've converted tramp-error from defsubst to defun. Unlike other Tramp message functions, there's no reason for it to be a defsubst. > Stefan Best regards, Michael. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: Warning in tramp.el 2021-06-06 6:42 ` Warning in tramp.el Michael Albinus @ 2021-06-06 17:48 ` Stefan Monnier 0 siblings, 0 replies; 19+ messages in thread From: Stefan Monnier @ 2021-06-06 17:48 UTC (permalink / raw) To: Michael Albinus; +Cc: Basil L. Contovounesios, Glenn Morris, emacs-devel > I've converted tramp-error from defsubst to defun. Unlike other Tramp > message functions, there's no reason for it to be a defsubst. Ah, indeed, that's an even better way to solve this, thanks, Stefan ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2021-06-06 17:48 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-05-17 15:28 Emacs is not reproducible Bone Baboon 2021-05-17 15:45 ` Alan Mackenzie 2021-05-17 15:55 ` Achim Gratz 2021-05-17 15:54 ` Eli Zaretskii 2021-05-17 16:40 ` Stefan Monnier 2021-05-23 3:31 ` Stefan Monnier 2021-05-23 23:52 ` Glenn Morris 2021-05-25 17:41 ` Stefan Monnier 2021-05-25 17:52 ` T.V Raman 2021-05-25 18:03 ` Glenn Morris 2021-05-26 20:58 ` Stefan Monnier 2021-05-27 12:24 ` Mattias Engdegård 2021-05-27 21:33 ` Stefan Monnier 2021-05-25 18:27 ` Basil L. Contovounesios 2021-05-27 21:32 ` Stefan Monnier 2021-05-28 9:00 ` Basil L. Contovounesios 2021-06-05 16:26 ` Warning in tramp.el (was: Emacs is not reproducible) Stefan Monnier 2021-06-06 6:42 ` Warning in tramp.el Michael Albinus 2021-06-06 17:48 ` Stefan Monnier
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).