bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#28265: guix system build fails


From: Ludovic Courtès
Subject: bug#28265: guix system build fails
Date: Wed, 30 Aug 2017 11:07:21 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Hello!

Christopher Baines <address@hidden> skribis:

> On Mon, 28 Aug 2017 21:52:32 +0300
> Efraim Flashner <address@hidden> wrote:
>
>> address@hidden:~/workspace/guix$ time nice ./pre-inst-env guix
>> system build ~/lightweight-desktop.scm Backtrace:
>>           11 (primitive-load
>> "/home/efraim/workspace/guix/scripts/gu…") In guix/ui.scm:
>>   1331:12 10 (run-guix-command _ . _)
>> In ice-9/boot-9.scm:
>>     837:9  9 (catch _ _ #<procedure 7f4e83aea8c0 at guix/ui.scm:448…>
>> …) 837:9  8 (catch _ _ #<procedure 7f4e83aea8d8 at guix/ui.scm:536…>
>> …) In guix/scripts/system.scm:
>>    1022:8  7 (_)
>>     905:6  6 (process-action _ _ _)
>> In guix/store.scm:
>>   1441:24  5 (run-with-store _ _ #:guile-for-build _ #:system _)
>> In guix/scripts/system.scm:
>>     637:2  4 (_ _)
>> In gnu/system.scm:
>>     884:4  3 (_ _)
>> In gnu/bootloader/grub.scm:
>>    343:29  2 (grub-configuration-file #<<bootloader-configuration> …>
>> …) 207:30  1 (eye-candy #<<bootloader-configuration> bootloader: #<…>
>> …) 149:22  0 (grub-background-image #<<bootloader-configuration> bo…>
>> …)
>> 
>> gnu/bootloader/grub.scm:149:22: In procedure grub-background-image:
>> gnu/bootloader/grub.scm:149:22: In procedure struct_vtable: Wrong
>> type argument in position 1 (expecting struct): 5
>> 
>
> I tried this, and got the same error, but then I deleted all the .go
> files, re-ran make, and then tried again, and then it worked.

Yeah, this kind of error is typical of an ABI mismatch.  The reason is
that in Guile, record field accessors of SRFI-9 record types are
inlined:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(srfi srfi-9)
scheme@(guile-user)> (define-record-type <foo>
                       (make-foo x)
                       foo?
                       (x foo-x))
scheme@(guile-user)> ,expand (foo-x bar)
$2 = (let ((s bar))
  (if ((@@ (srfi srfi-9) eq?)
       ((@@ (srfi srfi-9) struct-vtable) s)
       <foo>)
    ((@@ (srfi srfi-9) struct-ref) s 0)
    (let ((s* s))
      ((@@ (srfi srfi-9) throw)
       'wrong-type-arg
       'foo-x
       "Wrong type argument: ~S"
       ((@@ (srfi srfi-9) list) s*)
       ((@@ (srfi srfi-9) list) s*)))))
--8<---------------cut here---------------end--------------->8---

The (struct-ref s 0) above becomes incorrect if, say, we add a field
right before ‘x’, because ‘x’ would now be at offset 1.

The safe solution here is to “make clean-go && make”.

Ludo’.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]