X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fcompiler.impure.lisp;h=a6df1eaf9e805e7fc5855f18216c9b707249d21a;hb=04a651e749befd65ffd8bf49f689b6e7d55607e2;hp=b3970e66dc86aa0552bd42c7601a3b25fcbfc000;hpb=52b1041d3a14eaa4e45f6d8edfbdc0dec4292239;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index b3970e6..a6df1ea 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -16,7 +16,7 @@ ;;;; more information. (when (eq sb-ext:*evaluator-mode* :interpret) - (sb-ext:quit :unix-status 104)) + (sb-ext:exit :code 104)) (load "test-util.lisp") (load "compiler-test-util.lisp") @@ -961,38 +961,27 @@ (defun foo-inline (x) (quux-marker x)) (declaim (maybe-inline foo-maybe-inline)) (defun foo-maybe-inline (x) (quux-marker x)) -;; Pretty horrible, but does the job -(defun count-full-calls (name function) - (let ((code (with-output-to-string (s) - (disassemble function :stream s))) - (n 0)) - (with-input-from-string (s code) - (loop for line = (read-line s nil nil) - while line - when (search name line) - do (incf n))) - n)) (with-test (:name :nested-inline-calls) (let ((fun (compile nil `(lambda (x) (foo-inline (foo-inline (foo-inline x))))))) - (assert (= 0 (count-full-calls "FOO-INLINE" fun))) - (assert (= 3 (count-full-calls "QUUX-MARKER" fun))))) + (assert (= 0 (ctu:count-full-calls "FOO-INLINE" fun))) + (assert (= 3 (ctu:count-full-calls "QUUX-MARKER" fun))))) (with-test (:name :nested-maybe-inline-calls) (let ((fun (compile nil `(lambda (x) (declare (optimize (space 0))) (foo-maybe-inline (foo-maybe-inline (foo-maybe-inline x))))))) - (assert (= 0 (count-full-calls "FOO-MAYBE-INLINE" fun))) - (assert (= 1 (count-full-calls "QUUX-MARKER" fun))))) + (assert (= 0 (ctu:count-full-calls "FOO-MAYBE-INLINE" fun))) + (assert (= 1 (ctu:count-full-calls "QUUX-MARKER" fun))))) (with-test (:name :inline-calls) (let ((fun (compile nil `(lambda (x) (list (foo-inline x) (foo-inline x) (foo-inline x)))))) - (assert (= 0 (count-full-calls "FOO-INLINE" fun))) - (assert (= 3 (count-full-calls "QUUX-MARKER" fun))))) + (assert (= 0 (ctu:count-full-calls "FOO-INLINE" fun))) + (assert (= 3 (ctu:count-full-calls "QUUX-MARKER" fun))))) (with-test (:name :maybe-inline-calls) (let ((fun (compile nil `(lambda (x) @@ -1000,8 +989,8 @@ (list (foo-maybe-inline x) (foo-maybe-inline x) (foo-maybe-inline x)))))) - (assert (= 0 (count-full-calls "FOO-MAYBE-INLINE" fun))) - (assert (= 1 (count-full-calls "QUUX-MARKER" fun))))) + (assert (= 0 (ctu:count-full-calls "FOO-MAYBE-INLINE" fun))) + (assert (= 1 (ctu:count-full-calls "QUUX-MARKER" fun))))) (with-test (:name :bug-405) ;; These used to break with a TYPE-ERROR @@ -1298,6 +1287,31 @@ (type-error (e) (and (eql 10 (type-error-datum e)) (eql 'list (type-error-expected-type e)))))) + +;;;; tests for compiler output +(with-test (:name :unexpected-compiler-output) + (let* ((*error-output* (make-string-output-stream)) + (output (with-output-to-string (*standard-output*) + (compile-file "compiler-output-test.lisp" + :print nil :verbose nil)))) + (unless (zerop (length output)) + (error "Unexpected output: ~S" output)))) + +(with-test (:name :bug-493380) + (flet ((test (forms) + (catch 'debug + (let ((*debugger-hook* (lambda (condition if) + (throw 'debug + (if (typep condition 'serious-condition) + :debug + :oops))))) + (multiple-value-bind (warned failed) (ctu:file-compile forms) + (when (and warned failed) + :failed)))))) + (assert (eq :failed (test "(defun"))) + (assert (eq :failed (test "(defun no-pkg::foo ())"))) + (assert (eq :failed (test "(cl:no-such-sym)"))) + (assert (eq :failed (test "..."))))) ;;;; tests not in the problem domain, but of the consistency of the ;;;; compiler machinery itself @@ -1365,14 +1379,6 @@ (grovel-results name)))))) (identify-suspect-vops) -;;;; tests for compiler output -(let* ((*error-output* (make-broadcast-stream)) - (output (with-output-to-string (*standard-output*) - (compile-file "compiler-output-test.lisp" - :print nil :verbose nil)))) - (print output) - (assert (zerop (length output)))) - ;;;; bug 305: INLINE/NOTINLINE causing local ftype to be lost (define-condition optimization-error (error) ()) @@ -2258,4 +2264,14 @@ (assert (= 7 (funcall fun 15 3)))))) (assert (string= "" trace-output)))) +(test-util:with-test (:name :bug-997528) + (let ((fun (compile nil '(lambda (x) + (declare (optimize (speed 0) (space 0)) + (type (integer -228645653448155482 -228645653447928749) x)) + (floor 1.0 (the (integer -228645653448151677 -228645653448150900) x)))))) + (multiple-value-bind (quo rem) + (funcall fun -228645653448151381) + (assert (= quo -1)) + (assert (= rem (float -228645653448151381)))))) + ;;; success