GNU bug report logs - #58217
tree-il->bytecode compilation of (not (list …)) fails

Previous Next

Package: guile;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Sat, 1 Oct 2022 10:28:02 UTC

Severity: normal

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

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Ludovic Courtès <ludo <at> gnu.org>
Subject: bug#58217: closed (Re: bug#58217: tree-il->bytecode compilation
 of (not (list …)) fails)
Date: Sat, 01 Oct 2022 14:03:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#58217: tree-il->bytecode compilation of (not (list …)) fails

which was filed against the guile package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to 58217 <at> debbugs.gnu.org.

-- 
58217: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=58217
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Ludovic Courtès <ludo <at> gnu.org>
To: 58217-done <at> debbugs.gnu.org
Subject: Re: bug#58217: tree-il->bytecode compilation of (not (list
 …)) fails
Date: Sat, 01 Oct 2022 16:02:37 +0200
Ludovic Courtès <ludo <at> gnu.org> skribis:

> I believe this is fixed by changing ‘predicate?’ to:
>
>     (define (predicate? name)
>       (and=> (lookup-primitive name) primitive-predicate?))

Done in e2797f529b8934b0a11b9f6aebbf937b183ece77!

Ludo’.

[Message part 3 (message/rfc822, inline)]
From: Ludovic Courtès <ludo <at> gnu.org>
To: bug-guile <at> gnu.org
Subject: tree-il->bytecode compilation of (not (list …)) fails
Date: Sat, 01 Oct 2022 12:27:30 +0200
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’.



This bug report was last modified 2 years and 292 days ago.

Previous Next


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