Inherit FP modes for new threads on Windows.
[sbcl.git] / tests / threads.impure.lisp
index c5ff8f2..788862b 100644 (file)
     (format o "void loop_forever() { while(1) ; }~%"))
   (sb-ext:run-program "/bin/sh"
                       '("run-compiler.sh" "-sbcl-pic" "-sbcl-shared"
-                        "-o" "threads-foreign.so" "threads-foreign.c")
-                      :environment (test-util::test-env))
+                        "-o" "threads-foreign.so" "threads-foreign.c"))
   (sb-alien:load-shared-object (truename "threads-foreign.so"))
   (sb-alien:define-alien-routine loop-forever sb-alien:void)
   (delete-file "threads-foreign.c"))
     (assert (eq result :ok))))
 
 (with-test (:name :thread-alloca)
-  (sb-ext:run-program "/bin/sh"
+  (sb-ext:run-program "sh"
                       '("run-compiler.sh" "-sbcl-pic" "-sbcl-shared"
                         "alloca.c" "-o" "alloca.so")
-                      :environment (test-util::test-env))
-
+                      :search t)
   (load-shared-object (truename "alloca.so"))
 
   (alien-funcall (extern-alien "alloca_test" (function void)))
    (sb-thread:make-thread
     (lambda ()
       (alien-funcall (extern-alien "alloca_test" (function void)))))))
+
+(with-test (:name :fp-mode-inheritance-threads)
+  (flet ((test ()
+           (let ((thread-fp-mode)
+                 (fp-mode (dpb 0 sb-vm::float-sticky-bits (sb-vm:floating-point-modes))))
+             (sb-thread:join-thread
+              (sb-thread:make-thread
+               (lambda ()
+                 (setf thread-fp-mode
+                       (dpb 0 sb-vm::float-sticky-bits (sb-vm:floating-point-modes))))))
+             (assert (= fp-mode thread-fp-mode)))))
+    (test)
+    (sb-int:with-float-traps-masked (:divide-by-zero)
+      (test))
+    (setf (sb-vm:floating-point-modes)
+          (dpb sb-vm:float-divide-by-zero-trap-bit
+               sb-vm::float-traps-byte
+               (sb-vm:floating-point-modes)))
+    (test)))