fix sb-posix tests on OpenBSD
[sbcl.git] / tests / debug.impure.lisp
index 9d8c34b..4d8ae6b 100644 (file)
@@ -22,6 +22,8 @@
 \f
 ;;;; Check that we get debug arglists right.
 
+(defvar *p* (namestring *load-truename*))
+
 ;;; FIXME: This should use some get-argslist like functionality that
 ;;; we actually export.
 ;;;
     (assert (verify-backtrace
              (lambda () (test #'optimized))
              (list *undefined-function-frame*
-                   (list '(flet test) #'optimized)))))
+                   (list `(flet test :in ,*p*) #'optimized)))))
 
   ;; bug 353: This test fails at least most of the time for x86/linux
   ;; ca. 0.8.20.16. -- WHN
     (assert (verify-backtrace
              (lambda () (test #'not-optimized))
              (list *undefined-function-frame*
-                   (list '(flet not-optimized))
-                   (list '(flet test) #'not-optimized))))))
+                   (list `(flet not-optimized :in ,*p*))
+                   (list `(flet test :in ,*p*) #'not-optimized))))))
 
 (with-test (:name :backtrace-interrupted-condition-wait
             :skipped-on '(not :sb-thread)
               :fails-on :alpha)  ; bug 346
     (assert (verify-backtrace (lambda () (test #'optimized))
                               (list '(/ 42 &rest)
-                                    (list '(flet test) #'optimized)))))
+                                    (list `(flet test :in ,*p*) #'optimized)))))
   (with-test (:name (:divide-by-zero :bug-356)
               :fails-on :alpha)  ; bug 356
     (assert (verify-backtrace (lambda () (test #'not-optimized))
                               (list '(/ 42 &rest)
-                                    '((flet not-optimized))
-                                    (list '(flet test) #'not-optimized))))))
+                                    `((flet not-optimized :in ,*p*))
+                                    (list `(flet test :in ,*p*) #'not-optimized))))))
 
 (with-test (:name (:throw :no-such-tag)
             :fails-on '(or
 (defvar *compile-nil-non-tc* (compile nil '(lambda (y) (cons (funcall *compile-nil-error* y) nil))))
 (with-test (:name (:compile nil))
   (assert (verify-backtrace (lambda () (funcall *compile-nil-non-tc* 13))
-                            '(((lambda (x)) 13)
-                              ((lambda (y)) 13)))))
+                            `(((lambda (x) :in ,*p*) 13)
+                              ((lambda (y) :in ,*p*) 13)))))
 
 (with-test (:name :clos-slot-typecheckfun-named)
   (assert
     (assert
      (verify-backtrace (lambda ()
                          (funcall (make-fun 0) 10 11 0))
-                       '((sb-kernel:two-arg-/ 10/11 0)
+                       `((sb-kernel:two-arg-/ 10/11 0)
                          (/ 10 11 0)
-                         ((lambda (&rest rest)) 10 11 0))))
+                         ((lambda (&rest rest) :in ,*p*) 10 11 0))))
     (assert
      (verify-backtrace (lambda ()
                          (funcall (make-fun 1) 10 11 0))
-                       '((sb-kernel:two-arg-/ 10/11 0)
+                       `((sb-kernel:two-arg-/ 10/11 0)
                          (/ 10 11 0)
-                         ((lambda (a &rest rest)) 10 11 0))))
+                         ((lambda (a &rest rest) :in ,*p*) 10 11 0))))
     (assert
      (verify-backtrace (lambda ()
                          (funcall (make-fun 2) 10 11 0))
-                       '((sb-kernel:two-arg-/ 10/11 0)
+                       `((sb-kernel:two-arg-/ 10/11 0)
                          (/ 10 11 0)
-                         ((lambda (a b &rest rest)) 10 11 0))))))
+                         ((lambda (a b &rest rest) :in ,*p*) 10 11 0))))))
 
 ;;;; test TRACE
 
       (declare (notinline dx-arg-backtrace))
       (assert (member-if (lambda (frame)
                            (and (consp frame)
-                                (equal '(flet dx-arg-backtrace) (car frame))
+                                (consp (car frame))
+                                (equal '(flet dx-arg-backtrace :in) (butlast (car frame)))
                                 (notany #'sb-debug::stack-allocated-p (cdr frame))))
                          (dx-arg-backtrace dx-arg))))))
 
                  (sb-kernel:get-lisp-obj-address
                   #'identity))))))
 
+;;; Older CHENEYGC systems didn't perform any real pointer validity
+;;; checks beyond "is this pointer to somewhere in heap space".
+(with-test (:name (make-lisp-obj :pointer-validation))
+  ;; Fun and games: We need to test MAKE-LISP-OBJ with a known-bogus
+  ;; address, but we also need the GC to not pitch a fit if it sees an
+  ;; object with said bogus address.  Thus, construct our known-bogus
+  ;; object within an area of unboxed storage (a vector) in static
+  ;; space.  We'll make it a simple object, (CONS 0 0), which has an
+  ;; in-memory representation of two consecutive zero words.  We
+  ;; allocate a three-word vector so that we can guarantee a
+  ;; double-word aligned double-word of zeros no matter what happens
+  ;; with the vector-data-offset (currently double-word aligned).
+  (let* ((memory (sb-int:make-static-vector 3 :element-type `(unsigned-byte ,sb-vm:n-word-bits)
+                                            :initial-element 0))
+         (vector-data-address (sb-sys:sap-int (sb-kernel::vector-sap memory)))
+         (object-base-address (logandc2 (+ vector-data-address sb-vm:lowtag-mask) sb-vm:lowtag-mask))
+         (object-tagged-address (+ object-base-address sb-vm:list-pointer-lowtag)))
+    (multiple-value-bind
+          (object valid-p)
+        (sb-kernel:make-lisp-obj object-tagged-address nil)
+      (assert (not valid-p)))))
+
 (write-line "/debug.impure.lisp done")