Subject: bug#34112: Guix 0.16.0-8 FTBFS: ">>= (bind) used outside of 'with-monad'"

From: Ludovic Courtès <[email-masked]>
Date: Tue, 22 Jan 2019 22:10:23 +0100

Hi Mark,

Ludovic Courtès <[email-masked]> skribis:

> Mark H Weaver <[email-masked]> skribis:
>
>> In the most recent evaluation of 'master' on hydra.gnu.org (eval 110393,
>> corresponding to git commit 5327e912a8a477e472da9ec03c99cdedcc04af75),
>> the 'guix' package failed to build on x86_64, with the following error:
>>
>> guix/hg-download.scm:93:2: >>=: >>= (bind) used outside of 'with-monad' in form (>>= (package->derivation guile system) (lambda (t-2c116650a85e261-45a) (mlet* %store-monad () (let ((guile t-2c116650a85e261-45a)) (gexp->derivation (or name "hg-checkout") build #:system system #:local-build? #t #:hash-algo hash-algo #:hash hash #:recursive? #t #:guile-for-build guile)))))
>
> This is the dreaded syntax parameter bug:
>
>   https://issues.guix.info/issue/27476

Today I noticed that building guix-core.drv on a 24-core machine would
trigger the bug roughly 70% of the time, with backtraces like this:

--8<---------------cut here---------------start------------->8---
building /gnu/store/rxx273f09jcxk72rjgl990k8191di0jw-guix-core.drv...
compiling...     15.4% of 39 filesIn ice-9/psyntax.scm:
  2338:44 19 (expand-let _ _ _ ((line . 1537) (column . 0) (filename . "guix/store.scm")) (hygiene guix store) #<procedure build-let (src ids vars val-exps body-exp)> _ _
 ((#<syntax match-one> # ?)))
compiling...     17.9% of 39 files  1679:45 18 (parse _ _ _ _ _ _ _)
In ice-9/boot-9.scm:
   222:17 17 (map1 (((("placeholder" placeholder) ("l-10a3c941d34314a1-4b93" lexical . failure-10a3c941d34314a1-4b94) ("placeholder" placeholder) ("placeholder" placeholder) ("l-10a3c9?" . #) ?) ?)))
In ice-9/psyntax.scm:
  1409:12 16 (_ _ _ #<syntax (#<syntax failure>)>)
  2338:44 15 (expand-let _ _ _ ((line . 1537) (column . 0) (filename . "guix/store.scm")) (hygiene guix store) #<procedure build-let (src ids vars val-exps body-exp)> _ _ ((#<syntax match-one> # ?)))
  1679:45 14 (parse _ _ _ _ _ _ _)
In ice-9/boot-9.scm:
   222:17 13 (map1 (((("l-10a3c941d34314a1-4b9e" macro . #<procedure 13ad6c0 at ice-9/eval.scm:333:13 (a)>) ("placeholder" placeholder) ("l-10a3c941d34314a1-4b99" lexical . #) ("l-10?" . #) ?) . #)))
In ice-9/psyntax.scm:
  2338:44 12 (expand-let _ _ _ ((line . 1537) (column . 0) (filename . "guix/store.scm")) (hygiene guix store) #<procedure build-let (src ids vars val-exps body-exp)> _ _ ((#<syntax match-one> # ?)))
  1679:45 11 (parse _ _ _ _ _ _ _)
In ice-9/boot-9.scm:
   222:17 10 (map1 (((("l-10a3c941d34314a1-4bba" macro . #<procedure c1b240 at ice-9/eval.scm:333:13 (a)>) ("placeholder" placeholder) ("l-10a3c941d34314a1-4bb6" lexical . #) ("l-10a?" . #) ?) . #)))
In ice-9/psyntax.scm:
  2338:44  9 (expand-let _ _ _ ((line . 1537) (column . 0) (filename . "guix/store.scm")) (hygiene guix store) #<procedure build-let (src ids vars val-exps body-exp)> _ _ ((#<syntax match-drop?> ?)))
  1612:33  8 (parse (((("placeholder" placeholder) ("l-10a3c941d34314a1-4bd2" lexical . tail-10a3c941d34314a1-4bd3) ("l-10a3c941d34314a1-4bba" macro . #<procedure c1b240 at ice-9/eval.s?>) ?) . #)) ?)
  1348:32  7 (syntax-type (#<syntax >>=> (#<syntax mproc> #<syntax head> #<syntax result>) (#<syntax lambda> (#<syntax result>) (#<syntax loop> #<syntax tail> #<syntax result>))) (("placeho?" ?) ?) ?)
  1559:32  6 (expand-macro #<procedure 136bbc0 at ice-9/eval.scm:333:13 (a)> _ _ _ _ _ _)
In ice-9/boot-9.scm:
   752:25  5 (dispatch-exception _ _ _)
   751:25  4 (dispatch-exception 1 syntax-error (>>= ">>= (bind) used outside of 'with-monad'" ((line . 1537) (column . 0) (filename . "guix/store.scm")) (>>= (mproc head result) (lambda (#) ?)) #))
In guix/build/compile.scm:
    123:6  3 (_ _ . _)
In ice-9/boot-9.scm:
    829:9  2 (catch #t #<procedure c3a4e0 at guix/build/compile.scm:123:6 ()> #<procedure 7fffefd02980 at guix/build/compile.scm:123:6 args> _)
In guix/build/compile.scm:
   126:21  1 (_)
In unknown file:
           0 (make-stack #t)
guix/build/compile.scm:126:21: Syntax error:
guix/store.scm:1538:0: >>=: >>= (bind) used outside of 'with-monad' in form (>>= (mproc head result) (lambda (result) (loop tail result)))
builder for `/gnu/store/rxx273f09jcxk72rjgl990k8191di0jw-guix-core.drv' failed with exit code 1
--8<---------------cut here---------------end--------------->8---

This is as of d1dfcc7c1b38d816dddc2868917ba490db7e7c3b (a commit from
today), where Guile 2.2.4 is used to build modules.

The bug doesn’t seem to be triggered on my 4-core laptop nor on the
8-core build machines behind berlin:

  https://ci.guix.info/jobset/guix-modular-master

Ludo’.