X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Flocall.lisp;h=18d051b0086056deaa550c1da7b68010301c4c7d;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=b6da50be6589cd05eaa2df57e859704e9a5b17bb;hpb=771b864c8f32af7734bc0550aeaf1539fc4df194;p=sbcl.git diff --git a/src/compiler/locall.lisp b/src/compiler/locall.lisp index b6da50b..18d051b 100644 --- a/src/compiler/locall.lisp +++ b/src/compiler/locall.lisp @@ -233,8 +233,8 @@ (leaf-ever-used res) t (functional-entry-fun res) fun (functional-entry-fun fun) res - (component-reanalyze *current-component*) t - (component-reoptimize *current-component*) t) + (component-reanalyze *current-component*) t) + (reoptimize-component *current-component* :maybe) (etypecase fun (clambda (locall-analyze-fun-1 fun)) @@ -378,7 +378,7 @@ (inline-expansion-ok call)) (let* ((end (component-last-block (node-component call))) (pred (block-prev end))) - (multiple-value-bind (losing-local-functional converted-lambda) + (multiple-value-bind (losing-local-object converted-lambda) (catch 'locall-already-let-converted (with-ir1-environment-from-node call (let ((*lexenv* (functional-lexenv original-functional))) @@ -389,12 +389,18 @@ "local inline " (leaf-debug-name original-functional))))))) - (cond (losing-local-functional - (let ((*compiler-error-context* call)) - (compiler-notify "couldn't inline expand because expansion ~ - calls this LET-converted local function:~ - ~% ~S" - (leaf-debug-name losing-local-functional))) + (cond (losing-local-object + (if (functional-p losing-local-object) + (let ((*compiler-error-context* call)) + (compiler-notify "couldn't inline expand because expansion ~ + calls this LET-converted local function:~ + ~% ~S" + (leaf-debug-name losing-local-object))) + (let ((*compiler-error-context* call)) + (compiler-notify "implementation limitation: couldn't inline ~ + expand because expansion refers to ~ + the optimized away object ~S." + losing-local-object))) (loop for block = (block-next pred) then (block-next block) until (eq block end) do (setf (block-delete-p block) t))