X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.impure.lisp;h=94fa6390036967be1f51e38a1ad62cbfbb6eadab;hb=dc4be57ff0baeee18d43fbee1bfc1af4af50e522;hp=cf2a75ea0a12cda8822bf5222cb011fa795b3268;hpb=d4f4b68910a64640f9b8c67560ffd7f4d57c54b9;p=sbcl.git diff --git a/tests/compiler.impure.lisp b/tests/compiler.impure.lisp index cf2a75e..94fa639 100644 --- a/tests/compiler.impure.lisp +++ b/tests/compiler.impure.lisp @@ -998,5 +998,36 @@ (print output) (assert (zerop (length output)))) +;;;; bug 305: INLINE/NOTINLINE causing local ftype to be lost + +(define-condition optimization-error (error) ()) + +(labels ((compile-lambda (type sense) + (handler-bind ((compiler-note (lambda (_) + (declare (ignore _)) + (error 'optimization-error)))) + (values + (compile + nil + `(lambda () + (declare + ,@(when type '((ftype (function () (integer 0 10)) bug-305))) + (,sense bug-305) + (optimize speed)) + (1+ (bug-305)))) + nil))) + (expect-error (sense) + (multiple-value-bind (f e) (ignore-errors (compile-lambda nil sense)) + (assert (not f)) + (assert (typep e 'optimization-error)))) + (expect-pass (sense) + (multiple-value-bind (f e) (ignore-errors (compile-lambda t sense)) + (assert f) + (assert (not e))))) + (expect-error 'inline) + (expect-error 'notinline) + (expect-pass 'inline) + (expect-pass 'notinline)) + ;;; success (quit :unix-status 104)