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

  • Done
  • quality assurance status badge
Details
2 participants
  • Chris Marusich
  • Ludovic Courtès
Owner
unassigned
Submitted by
Chris Marusich
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-system
Compiling 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 a
record-abi-mismatch-error. When I deleted my $HOME/.cache/guile/ccache
directory, 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 reporting
mechanism 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-system
Compiling 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 ABI
mismatch error was thrown. The second problem is that display-error
encountered a problem while trying to display that error.

It's the second problem that I can't figure out. Why does display-error
fail in this case? For context, note that fold-system-tests in
gnu/tests.scm calls test-modules (in the same file), and that
test-modules calls scheme-modules with #:warn set to
warn-about-load-error.

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...

Toggle snippet (12 lines)
(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:

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 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.

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 2001
From: Chris Marusich <cmmarusich@gmail.com>
Date: Fri, 5 Oct 2018 23:39:57 -0700
Subject: [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.scm
index 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.scm
index 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+x3UCaFdgiRp0FAlu4YfAACgkQ3UCaFdgi
Rp2uXBAAwW6XRO+ZIbXzZDEr8kainGH+DGVPpl0YIlEZpLXjyOjNCNJ7Crzmck03
v9MibuaFagolohPmZ2v2BrgXa1J9qBAv2xGzeFULN8PnvqsSZgjbocC3wJG6bLb8
aj1pIreR0QLB35a+mSC450yZDsPTc7uwqfqe11H3xBM81BonjR8JTXR0dGDAQjDz
8u2RgPfDP8FuO4sRJbTLYaG/OV/b1pJR84IyEWXMh9ByUFeqtqu6+0lmF2UqdEyF
MenZobXXUPKt7aJ0SN/OjAuJzP6K27an38yRXWEasOtkClorfVdMDzvaPoGfzHn+
o1lWi3jxO54u4A+9ZPhtLcu2lMORvKgNiwjcR3caQhCsqoPLRfNWVSo7voG0IEem
l4piZ++S4huNQrrZ+k3ijmcxxpya2uD/O2AqLQHdHsPHDppsGqxNs4q/4ifYiTtf
eFSzaPkLH0EtU+oIgZA53VC6HjvFIT1rvyvWrT3u5Tt6GSX2f3gSoMB9qPafR5mH
ji7XU2BDMRCgy731YVu3WVN8sjsZJ85UDY1D5sCFkVja+u9TlE+yoEw2gYaD8MAs
C3BmvcMFS+Irj1BcnbIoqksFBcW8ieKiVTDfIDV0H6WrW/cmJ8qdnUXHGpZVDN5Q
NXHmsDyJjmo9nWo5KNDzPSVyiZmN0jnfSvXUK0eRI1x+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 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?

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 notabug
close 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 now
resolved. Thank you for closing it, and for your help!

--
Chris
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEy/WXVcvn5+/vGD+x3UCaFdgiRp0FAlvUufoACgkQ3UCaFdgi
Rp1Bdg//d62tK2F+XZhq/MLp9vHX3n1eRFs9MueSfu4FIQbzckxOxdWuA1BT3PB3
cua6gSAMS2H5okbY58ecPVXahSW0XTIyVicud73+3mkYZzlu5p+4rd643g9e9WB5
GpSS942aOFLpuLufA+Wmq7UlhHa1uFvvDnNq6n/pa6AMNB6XgHPtlcZ/TsBWi/59
11LEY2uNWLeIHCPXxlEmq456Z0zomLY+YYY+aFnCqvtQHEpv6eYnATG89JacqSfI
/aNb4hEi0F3lesxY+rjFZ091M/scP7Q7RU81IMsHATuQwbKwVlr/yMGqeYISpNI/
Ohguon76sLccWxwDhGXO3rYTE63/BvyeNUfF3MB8tOzdI+Lf974xYzxL0jm09ZSq
mDyi4NMWYrGmh4Uq2ZJFFfty3wLTQ+Wfy/u8TTlwB57qY8tnXckrO2m2olOB5ZCe
5Pa2vh0tAEaYlJbm2eXfbriV8dc5G2j8PHWBX6mvhSkQrASoIEJHpo+FUKYde9o1
e3K6V3k+vtRoF68O/cH9Jg38nh7tGE0tBAe7T1VvNZZYdosNtATAhkVQlROcVASP
THsBoiMlPnx1BHuPvmI2M29gMgO8/hlg2ik2emcll9iKXHe8PChP5Klth7aRVfgc
D841dfmsAmEct6Iqeg3roYIeTAKpF7tpA+kYoi9BcEf3/BQ8HzY=
=qhNw
-----END PGP SIGNATURE-----

?
Your comment

This issue is archived.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 32952
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch