restart-frame in debugger always passes &key args, and gets non-constant defaults wrong

Bug #861993 reported by 3b
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
SBCL
Triaged
Wishlist
Unassigned

Bug Description

(defun foo (a &key (b a bp))
  (declare (optimize (debug 3)))
  (break)
  (format t "~a ~a ~a~%" a b bp))

(foo 1)

debugger is entered due to BREAK, with FOO call shown as "1: (FOO 3 :B NIL)"
restarting the frame then continuing from the BREAK causes it to print "1 NIL T" instead of "1 1 NIL" as expected

if B defaults to a constant (number, string, symbol, etc) it shows up in the backtrace and the function gets the correct value for B, but it still gets BP set to T, even if B wasn't originally passed to the call.

tested on 1.0.51.32-0202ed4, x8664 linux, with and without slime

Revision history for this message
Nikodemus Siivola (nikodemus) wrote :

While this would be nice to have, it is surprisingly hard due to the way we compile functions with complex lambda-lists.

Hard enough that I was -><- this close to calling this WONTFIX... but you never know when a clever person might come up with a way to do this nicely.

Changed in sbcl:
importance: Undecided → Wishlist
status: New → Triaged
tags: added: compiler-ir1 feature
tags: removed: feature
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.