(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)))