"make check-system" fails to report record-abi-mismatch-error

DoneSubmitted by Chris Marusich.
Details
2 participants
  • Chris Marusich
  • Ludovic Courtès
Owner
unassigned
Severity
normal
C
C
Chris Marusich wrote on 6 Oct 2018 09:19
(address . bug-guix@gnu.org)
875zyfv8y7.fsf@gmail.com
Hi Guix,
On commit d71078bc75d149c70dc573a259986f1731145693, "make check-system"failed for me with the following error message:
Toggle snippet (29 lines)[2] [env] marusich@garuda.local:~/guix$ make check-systemCompiling Scheme modules...warning: failed to load '(gnu tests install)':Backtrace: 9 (apply-smob/1 #<catch-closure d998a0>)In ice-9/boot-9.scm: 705:2 8 (call-with-prompt _ _ #<procedure default-prompt-handle…>)In ice-9/eval.scm: 619:8 7 (_ #(#(#<directory (guile-user) e24140>))) 619:8 6 (_ #(#(#(#<directory (run-system-tests) e47aa0>) (#)) #)) 626:19 5 (_ #(#(#(#<directory (run-system-tests) e47aa0>) (#)) #))In gnu/tests.scm: 277:11 4 (all-system-tests) 273:32 3 (fold-system-tests _ _)In srfi/srfi-1.scm: 697:23 2 (filter-map #<procedure 2e9da80 at guix/discovery.sc…> . #)In guix/discovery.scm: 113:22 1 (_ . _)In unknown file: 0 (display-error #f #<output: file /dev/pts/0> #<record-t…>)
ERROR: In procedure display-error:Wrong number of arguments to #<procedure display-error (_ _ _ _ _ _)>make: *** [Makefile:5454: check-system] Error 1[2] [env] marusich@garuda.local:~/guix$
Although it wasn't obvious, this problem was actually caused by arecord-abi-mismatch-error. When I deleted my $HOME/.cache/guile/ccachedirectory, this error went away, and I was able to run the system tests.However, it took some work to figure this out, since the error reportingmechanism itself suffered an error.
To figure this out, I added some debug statements (see attached patch).After I did that, "make check-system" failed with some more information:
Toggle snippet (42 lines)[2] [env] marusich@garuda.local:~/guix$ make check-systemCompiling Scheme modules...XXX before
;;; (#<procedure warn-about-load-error (file args)>)
;;; ((gnu tests install))
;;; ((record-abi-mismatch-error #<record-type <openssh-configuration>>))
;;; ((record-abi-mismatch-error #<record-type <openssh-configuration>>))warning: failed to load '(gnu tests install)':
;;; (#<output: file /dev/pts/0>)
;;; ((#<record-type <openssh-configuration>>))Backtrace: 9 (apply-smob/1 #<catch-closure cdc8a0>)In ice-9/boot-9.scm: 705:2 8 (call-with-prompt _ _ #<procedure default-prompt-handle…>)In ice-9/eval.scm: 619:8 7 (_ #(#(#<directory (guile-user) d67140>))) 619:8 6 (_ #(#(#(#<directory (run-system-tests) d8aaa0>) (#)) #)) 626:19 5 (_ #(#(#(#<directory (run-system-tests) d8aaa0>) (#)) #))In gnu/tests.scm: 277:11 4 (all-system-tests) 273:32 3 (fold-system-tests _ _)In srfi/srfi-1.scm: 697:23 2 (filter-map #<procedure 2dd9a80 at guix/discovery.sc…> . #)In guix/discovery.scm: 114:22 1 (_ record-abi-mismatch-error #<record-type <openssh-con…>)In unknown file: 0 (display-error #f #<output: file /dev/pts/0> #<record-t…>)
ERROR: In procedure display-error:Wrong number of arguments to #<procedure display-error (_ _ _ _ _ _)>make: *** [Makefile:5454: check-system] Error 1[2] [env] marusich@garuda.local:~/guix$
This output shows two problems. The first problem is that an ABImismatch error was thrown. The second problem is that display-errorencountered a problem while trying to display that error.
It's the second problem that I can't figure out. Why does display-errorfail in this case? For context, note that fold-system-tests ingnu/tests.scm calls test-modules (in the same file), and thattest-modules calls scheme-modules with #:warn set towarn-about-load-error.
The procedure warn-about-load-error is defined in guix/ui.scm. It callsdisplay-error. That seems to be where the problem occurs. Based on thedebug output I added, we can see that in warn-about-load-error, the argsvariable refers to the following list:
(record-abi-mismatch-error #<record-type <openssh-configuration>>)
This is strange, since the only place that throwsrecord-abi-mismatch-error is in guix/records.scm...
Toggle snippet (12 lines) (define (abi-check type cookie) "Return syntax that checks that the current \"application binaryinterface\" (ABI) for TYPE is equal to COOKIE." (with-syntax ((current-abi (current-abi-identifier type))) #`(unless (eq? current-abi #,cookie) ;; The source file where this exception is thrown must be ;; recompiled. (throw 'record-abi-mismatch-error 'abi-check "~a: record ABI mismatch; recompilation needed" (list #,type) '()))))
...and based on that code, I expected the args variable to contain manymore elements. I expected it to look more like this:
Toggle snippet (9 lines)scheme@(guile-user)> (throw 'record-abi-mismatch-error 'abi-check "~a: record ABI mismatch; recompilation needed" (list 'some-type) '())Throw to key `record-abi-mismatch-error' with args `(abi-check "~a: record ABI mismatch; recompilation needed" (some-type) ())'.
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.scheme@(guile-user) [1]>
I don't understand what happened to all the other arguments. It lookslike the throw invocation in guix/records.scm was written carefully sothat it would throw exactly the arguments that display-error expects toreceive, but some of the arguments apparently went missing (e.g., the"~a: record ABI mismatch; recompilation needed" message). I can'tfigure out why those arguments are missing.
How can I debug this further? I'd like to fix this if possible so that"make check-system" can reliably report errors like this.
Thank you in advance for your help!
-- Chris
From ac550495740ba4f8c87a9577145f6760a0ff00cd Mon Sep 17 00:00:00 2001From: Chris Marusich <cmmarusich@gmail.com>Date: Fri, 5 Oct 2018 23:39:57 -0700Subject: [PATCH] Add some debug statements
--- guix/discovery.scm | 4 +++- guix/ui.scm | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-)
Toggle diff (39 lines)diff --git a/guix/discovery.scm b/guix/discovery.scmindex 3fc6e2c9e..af428825e 100644--- a/guix/discovery.scm+++ b/guix/discovery.scm@@ -110,7 +110,9 @@ name and the exception key and arguments." (resolve-interface module)) (lambda args ;; Report the error, but keep going.- (warn module args)+ (display "XXX before\n")+ ((pk warn) (pk module) (pk args))+ (display "XXX after\n") #f)))) (scheme-files (if sub-directory (string-append directory "/" sub-directory)diff --git a/guix/ui.scm b/guix/ui.scmindex 96f403acf..f28f80d4b 100644--- a/guix/ui.scm+++ b/guix/ui.scm@@ -381,7 +381,7 @@ ARGS is the list of arguments received by the 'throw' handler." (define (warn-about-load-error file args) ;FIXME: factorize with ↑ "Report the failure to load FILE, a user-provided Scheme file, without exiting. ARGS is the list of arguments received by the 'throw' handler."- (match args+ (match (pk args) (('system-error . rest) (let ((err (system-error-errno args))) (warning (G_ "failed to load '~a': ~a~%") file (strerror err))))@@ -398,7 +398,7 @@ exiting. ARGS is the list of arguments received by the 'throw' handler." file obj))) ((error args ...) (warning (G_ "failed to load '~a':~%") file)- (apply display-error #f (current-error-port) args))))+ (apply display-error #f (pk (current-error-port)) (pk args))))) (define (call-with-unbound-variable-handling thunk) (define tag-- 2.18.0
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEy/WXVcvn5+/vGD+x3UCaFdgiRp0FAlu4YfAACgkQ3UCaFdgiRp2uXBAAwW6XRO+ZIbXzZDEr8kainGH+DGVPpl0YIlEZpLXjyOjNCNJ7Crzmck03v9MibuaFagolohPmZ2v2BrgXa1J9qBAv2xGzeFULN8PnvqsSZgjbocC3wJG6bLb8aj1pIreR0QLB35a+mSC450yZDsPTc7uwqfqe11H3xBM81BonjR8JTXR0dGDAQjDz8u2RgPfDP8FuO4sRJbTLYaG/OV/b1pJR84IyEWXMh9ByUFeqtqu6+0lmF2UqdEyFMenZobXXUPKt7aJ0SN/OjAuJzP6K27an38yRXWEasOtkClorfVdMDzvaPoGfzHn+o1lWi3jxO54u4A+9ZPhtLcu2lMORvKgNiwjcR3caQhCsqoPLRfNWVSo7voG0IEeml4piZ++S4huNQrrZ+k3ijmcxxpya2uD/O2AqLQHdHsPHDppsGqxNs4q/4ifYiTtfeFSzaPkLH0EtU+oIgZA53VC6HjvFIT1rvyvWrT3u5Tt6GSX2f3gSoMB9qPafR5mHji7XU2BDMRCgy731YVu3WVN8sjsZJ85UDY1D5sCFkVja+u9TlE+yoEw2gYaD8MAsC3BmvcMFS+Irj1BcnbIoqksFBcW8ieKiVTDfIDV0H6WrW/cmJ8qdnUXHGpZVDN5QNXHmsDyJjmo9nWo5KNDzPSVyiZmN0jnfSvXUK0eRI1x+xUGq+ew==ooNo-----END PGP SIGNATURE-----
L
L
Ludovic Courtès wrote on 8 Oct 2018 15:12
(name . Chris Marusich)(address . cmmarusich@gmail.com)(address . 32952@debbugs.gnu.org)
87woqsziod.fsf@gnu.org
Hi Chris,
Chris Marusich <cmmarusich@gmail.com> skribis:
Toggle quote (40 lines)> The procedure warn-about-load-error is defined in guix/ui.scm. It calls> display-error. That seems to be where the problem occurs. Based on the> debug output I added, we can see that in warn-about-load-error, the args> variable refers to the following list:>> (record-abi-mismatch-error #<record-type <openssh-configuration>>)>> This is strange, since the only place that throws> record-abi-mismatch-error is in guix/records.scm...>> (define (abi-check type cookie)> "Return syntax that checks that the current \"application binary> interface\" (ABI) for TYPE is equal to COOKIE."> (with-syntax ((current-abi (current-abi-identifier type)))> #`(unless (eq? current-abi #,cookie)> ;; The source file where this exception is thrown must be> ;; recompiled.> (throw 'record-abi-mismatch-error 'abi-check> "~a: record ABI mismatch; recompilation needed"> (list #,type) '()))))>>> ...and based on that code, I expected the args variable to contain many> more elements. I expected it to look more like this:>> scheme@(guile-user)> (throw 'record-abi-mismatch-error 'abi-check> "~a: record ABI mismatch; recompilation needed"> (list 'some-type) '())> Throw to key `record-abi-mismatch-error' with args `(abi-check "~a: record ABI mismatch; recompilation needed" (some-type) ())'.>> Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.> scheme@(guile-user) [1]> >> I don't understand what happened to all the other arguments. It looks> like the throw invocation in guix/records.scm was written carefully so> that it would throw exactly the arguments that display-error expects to> receive, but some of the arguments apparently went missing (e.g., the> "~a: record ABI mismatch; recompilation needed" message). I can't> figure out why those arguments are missing.
Commit de5cbd4a38a33e0412f1c481fe8e01a871dc13e5 changed the argumentspassed along ‘record-abi-mismatch-error’ exceptions precisely to fix theproblem you report I believe. :-)
What’s probably happening here is that you have a .go file built beforethis commit, which is why it’s passing only on argument (the recordtype) along the ‘record-abi-mismatch-error’ exception.
Does that make sense?
Thanks,Ludo’.
L
L
Ludovic Courtès wrote on 27 Oct 2018 17:18
control message for bug #32952
(address . control@debbugs.gnu.org)
87bm7f7705.fsf@gnu.org
tags 32952 notabugclose 32952
C
C
Chris Marusich wrote on 27 Oct 2018 21:18
Re: bug#32952: "make check-system" fails to report record-abi-mismatch-error
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 32952@debbugs.gnu.org)
87tvl7w64l.fsf@gmail.com
ludo@gnu.org (Ludovic Courtès) writes:
Toggle quote (10 lines)> Commit de5cbd4a38a33e0412f1c481fe8e01a871dc13e5 changed the arguments> passed along ‘record-abi-mismatch-error’ exceptions precisely to fix the> problem you report I believe. :-)>> What’s probably happening here is that you have a .go file built before> this commit, which is why it’s passing only on argument (the record> type) along the ‘record-abi-mismatch-error’ exception.>> Does that make sense?
Yes, this makes sense! You were right: this was the problem.
I forgot about this bug report, but I can confirm that it is nowresolved. Thank you for closing it, and for your help!
-- Chris
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEy/WXVcvn5+/vGD+x3UCaFdgiRp0FAlvUufoACgkQ3UCaFdgiRp1Bdg//d62tK2F+XZhq/MLp9vHX3n1eRFs9MueSfu4FIQbzckxOxdWuA1BT3PB3cua6gSAMS2H5okbY58ecPVXahSW0XTIyVicud73+3mkYZzlu5p+4rd643g9e9WB5GpSS942aOFLpuLufA+Wmq7UlhHa1uFvvDnNq6n/pa6AMNB6XgHPtlcZ/TsBWi/5911LEY2uNWLeIHCPXxlEmq456Z0zomLY+YYY+aFnCqvtQHEpv6eYnATG89JacqSfI/aNb4hEi0F3lesxY+rjFZ091M/scP7Q7RU81IMsHATuQwbKwVlr/yMGqeYISpNI/Ohguon76sLccWxwDhGXO3rYTE63/BvyeNUfF3MB8tOzdI+Lf974xYzxL0jm09ZSqmDyi4NMWYrGmh4Uq2ZJFFfty3wLTQ+Wfy/u8TTlwB57qY8tnXckrO2m2olOB5ZCe5Pa2vh0tAEaYlJbm2eXfbriV8dc5G2j8PHWBX6mvhSkQrASoIEJHpo+FUKYde9o1e3K6V3k+vtRoF68O/cH9Jg38nh7tGE0tBAe7T1VvNZZYdosNtATAhkVQlROcVASPTHsBoiMlPnx1BHuPvmI2M29gMgO8/hlg2ik2emcll9iKXHe8PChP5Klth7aRVfgcD841dfmsAmEct6Iqeg3roYIeTAKpF7tpA+kYoi9BcEf3/BQ8HzY==qhNw-----END PGP SIGNATURE-----
?
Your comment

This issue is archived.

To comment on this conversation send email to 32952@debbugs.gnu.org