Different values returns depending on optimize, notinline settings

Bug #1804943 reported by Paul F. Dietz
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
SBCL
Fix Released
Undecided
Unassigned

Bug Description

(defparameter *f338-form*
  '(loop for lv3 below 1
         count (typep
                (progv nil nil
                  (prog2
                      (loop for lv3 below 2
                            count (not
                                   (and
                                    (and (eql 8388617 14665080615)
                                         (or nil (= -91539403 lv3)))
                                    (or
                                     (if nil
                                         (plusp b)
                                         t)
                                     (find
                                      (progv
                                          nil
                                          nil
                                        (progv '(*s4* *s2*) (list 65535 c) b))
                                      #(4 4087 14100 -181 1371 2199023255544
                                        32808097947355 -27183 -14820441585
                                        8380066967)
                                      :test '/=)))))
                      (let* ((*s1* (cons -6636880 -16508084)))
                        (declare (dynamic-extent *s1*))
                        (cdr *s1*))
                    38
                    (progv '(*s9* *s5* *s1*)
                        (list c b a) 536870918)
                    ))
                'fixnum)))

(declaim (special *s1* *s2* *s4* *s5* *s9*))

(fmakunbound 'f338a)
(fmakunbound 'f338b)

(defun f338 ()
  (let* ((vals '(1 2 3))
         (vars '(a b c))
         (form *f338-form*)
         (def1
          `(defun f338a ,vars
            (declare (optimize (speed 3) (debug 3)))
            ,form))
         (def2
          `(defun f338b ,vars
             (declare (notinline list cdr cons find plusp = eql not typep))
             ,form)))
    (eval def1)
    (eval def2)
    (values (apply (symbol-function 'f338a) vals)
            (apply (symbol-function 'f338b) vals))))

(f338) ==> 0, 1

Revision history for this message
Stas Boukarev (stassats) wrote :

Preliminary reduction:

(defun f338 ()
  (let* ((vals '(0 0 0))
         (vars '(a b c))
         (form '(loop for lv3 below 1
                 count (typep
                        (let ((y (let* ((s (cons 1 2)))
                                   (declare (dynamic-extent s))
                                   (cdr s))))
                          (progv '(* ** ***) (list a b c))
                          y)
                        'fixnum)))
         (def1
           `(lambda ,vars
              (declare (optimize speed debug))
              ,form))
         (def2
           `(lambda ,vars
              (declare (optimize (speed 1) (debug 2)))
              ,form)))
    (values (apply (compile nil def1) vals)
            (apply (compile nil def2) vals))))

Revision history for this message
Stas Boukarev (stassats) wrote :

(defun f ()
  (let* ((vals '(0 0 0))
         (vars '(a b c))
         (form '(progn
                 (if (typep
                      (let ((y (let ((s (cons 1 2)))
                                 (declare (dynamic-extent s))
                                 (cdr s))))
                        (progv '(* ** ***) (list a b c))
                        y)
                      'fixnum)
                     (setq a t))
                 (if (eql b 0)
                     a)))
         (def1
           `(lambda ,vars
              (declare (optimize speed debug))
              ,form))
         (def2
           `(lambda ,vars
              (declare (optimize (speed 2) (debug 2)))
              ,form)))
    (values (apply (compile nil def1) vals)
            (apply (compile nil def2) vals))))

Revision history for this message
Stas Boukarev (stassats) wrote :

ea6366ba5409b8541cece7e7c5054e0d64e57175

Changed in sbcl:
status: New → Fix Committed
Stas Boukarev (stassats)
Changed in sbcl:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.