GNU bug report logs - #32952
"make check-system" fails to report record-abi-mismatch-error

Previous Next

Package: guix;

Reported by: Chris Marusich <cmmarusich <at> gmail.com>

Date: Sat, 6 Oct 2018 07:31:02 UTC

Severity: normal

Tags: notabug

Done: ludo <at> gnu.org (Ludovic Courtès)

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 32952 in the body.
You can then email your comments to 32952 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-guix <at> gnu.org:
bug#32952; Package guix. (Sat, 06 Oct 2018 07:31:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Chris Marusich <cmmarusich <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Sat, 06 Oct 2018 07:31:02 GMT) Full text and rfc822 format available.

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

From: Chris Marusich <cmmarusich <at> gmail.com>
To: bug-guix <at> gnu.org
Subject: "make check-system" fails to report record-abi-mismatch-error
Date: Sat, 06 Oct 2018 00:19:12 -0700
[Message part 1 (text/plain, inline)]
Hi Guix,

On commit d71078bc75d149c70dc573a259986f1731145693, "make check-system"
failed for me with the following error message:

--8<---------------cut here---------------start------------->8---
[2] [env] marusich <at> 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 <at> garuda.local:~/guix
$ 
--8<---------------cut here---------------end--------------->8---

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:

--8<---------------cut here---------------start------------->8---
[2] [env] marusich <at> 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 <at> garuda.local:~/guix
$ 
--8<---------------cut here---------------end--------------->8---

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

--8<---------------cut here---------------start------------->8---
  (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) '()))))
--8<---------------cut here---------------end--------------->8---

...and based on that code, I expected the args variable to contain many
more elements.  I expected it to look more like this:

--8<---------------cut here---------------start------------->8---
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]> 
--8<---------------cut here---------------end--------------->8---

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
[0001-Add-some-debug-statements.patch (text/x-patch, attachment)]
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#32952; Package guix. (Mon, 08 Oct 2018 13:13:02 GMT) Full text and rfc822 format available.

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

From: ludo <at> gnu.org (Ludovic Courtès)
To: Chris Marusich <cmmarusich <at> gmail.com>
Cc: 32952 <at> debbugs.gnu.org
Subject: Re: bug#32952: "make check-system" fails to report
 record-abi-mismatch-error
Date: Mon, 08 Oct 2018 15:12:18 +0200
Hi Chris,

Chris Marusich <cmmarusich <at> gmail.com> skribis:

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




Added tag(s) notabug. Request was from ludo <at> gnu.org (Ludovic Courtès) to control <at> debbugs.gnu.org. (Sat, 27 Oct 2018 15:19:01 GMT) Full text and rfc822 format available.

bug closed, send any further explanations to 32952 <at> debbugs.gnu.org and Chris Marusich <cmmarusich <at> gmail.com> Request was from ludo <at> gnu.org (Ludovic Courtès) to control <at> debbugs.gnu.org. (Sat, 27 Oct 2018 15:19:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#32952; Package guix. (Sat, 27 Oct 2018 19:19:01 GMT) Full text and rfc822 format available.

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

From: Chris Marusich <cmmarusich <at> gmail.com>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 32952 <at> debbugs.gnu.org
Subject: Re: bug#32952: "make check-system" fails to report
 record-abi-mismatch-error
Date: Sat, 27 Oct 2018 12:18:18 -0700
[Message part 1 (text/plain, inline)]
ludo <at> gnu.org (Ludovic Courtès) writes:

> 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
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 25 Nov 2018 12:24:08 GMT) Full text and rfc822 format available.

This bug report was last modified 6 years and 210 days ago.

Previous Next


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