Hi, I stumbled upon this bug of the baseline compiler:
--8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (compile '(not (list 1 2)) #:optimization-level 2) $3 = #f scheme@(guile-user)> (compile '(not (list 1 2)) #:optimization-level 1) ice-9/boot-9.scm:1685:16: In procedure raise-exception: In procedure struct-vtable: Wrong type argument in position 1 (expecting struct): #f Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. scheme@(guile-user) [1]> ,bt In system/base/compile.scm: 352:28 5 (compile _ #:from _ #:to _ #:env _ #:optimization-level _ #:warning-level _ #:opts _) 265:44 4 (_ _ _) 261:27 3 (_ _ _) In language/tree-il/compile-bytecode.scm: 1386:14 2 (compile-bytecode #<tree-il (primcall not (primcall list (const 1) (const 2)))> #<module (#{ g446}#) …> …) 412:30 1 (_ _) In ice-9/boot-9.scm: 1685:16 0 (raise-exception _ #:continuable? _) scheme@(guile-user) [1]> (version) $4 = "3.0.8" --8<---------------cut here---------------end--------------->8--- The exception is raised in the ‘predicate?’ call below, where (lookup-primitive 'list) returns #f: (define (finish-conditional exp) (define (true? x) (match x (($ <const> _ val) val) (_ #f))) (define (false? x) (match x (($ <const> _ val) (not val)) (_ #f))) (define (predicate? name) (primitive-predicate? (lookup-primitive name))) (match exp (($ <conditional> src ($ <conditional> _ test (? true?) (? false?)) consequent alternate) (finish-conditional (make-conditional src test consequent alternate))) (($ <conditional> src ($ <conditional> _ test (? false?) (? true?)) consequent alternate) (finish-conditional (make-conditional src test alternate consequent))) (($ <conditional> src ($ <primcall> _ (? predicate?))) exp) (($ <conditional> src test consequent alternate) (make-conditional src (make-primcall src 'false? (list test)) alternate consequent)))) I believe this is fixed by changing ‘predicate?’ to: (define (predicate? name) (and=> (lookup-primitive name) primitive-predicate?)) Thoughts? Ludo’.