X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir1tran-lambda.lisp;h=d8821958f863af85409eb3d3ab635a1e7f78dd0d;hb=8c12bc813114d4bbfa9c05e450e013167ad6cca3;hp=f424f51372be7d2dcde3f81320ac3df88685ccf7;hpb=bc382783a653d8051718b9712c8c873eea2c8bbf;p=sbcl.git diff --git a/src/compiler/ir1tran-lambda.lisp b/src/compiler/ir1tran-lambda.lisp index f424f51..d882195 100644 --- a/src/compiler/ir1tran-lambda.lisp +++ b/src/compiler/ir1tran-lambda.lisp @@ -906,9 +906,11 @@ (binding* (((*lexenv* result-type post-binding-lexenv) (process-decls decls (append aux-vars vars) nil :binding-form-p t)) - (forms (if (and maybe-add-debug-catch - *allow-instrumenting* - (policy *lexenv* (>= insert-debug-catch 2))) + (debug-catch-p (and maybe-add-debug-catch + *allow-instrumenting* + (policy *lexenv* + (>= insert-debug-catch 2)))) + (forms (if debug-catch-p (wrap-forms-in-debug-catch forms) forms)) (forms (if (eq result-type *wild-type*) @@ -932,6 +934,14 @@ res)))) (defun wrap-forms-in-debug-catch (forms) + #!+unwind-to-frame-and-call-vop + `((multiple-value-prog1 + (progn + ,@forms) + ;; Just ensure that there won't be any tail-calls, IR2 magic will + ;; handle the rest. + (values))) + #!-unwind-to-frame-and-call-vop `( ;; Normally, we'll return from this block with the below RETURN-FROM. (block return-value-tag