#358: DEFMACRO incorrect (un)dead-code-elimination in -------------------------+----------------------- Reporter: mevenson | Owner: Type: defect | Status: new Priority: major | Milestone: 1.4.0 Component: interpreter | Version: 1.4.0-dev Keywords: | -------------------------+----------------------- Douglas Katzman notes in http://article.gmane.org/gmane.lisp.armedbear.devel/3171:
{{{ ;; In the test below, COMPUTE-INSIDES should be called by EXAMP-FAIL
java -jar abcl-bin-1.3.0/abcl.jar ... CL-USER(1): (defmacro ultra-fancy-macro (&optional (x 'compute-insides)) (list 'cons ''loop (list x))) ULTRA-FANCY-MACRO
CL-USER(2): (defun examp-fail (directives) (labels ((compute-insides () '((here-are-the-guts))) (compute-loop () (ultra-fancy-macro))) (compute-loop))) ; Note: deleting unused local function LABELS COMPUTE-INSIDES EXAMP-FAIL
CL-USER(3): (examp-fail nil) ; just checking.. maybe the Note was wrong? (examp-fail nil) #<THREAD "interpreter" {652D03DC}>: Debugger invoked on condition of type UNDEFINED-FUNCTION The function COMPUTE-INSIDES is undefined. Restarts: ... 3: TOP-LEVEL Return to top level. [1] CL-USER(4): 3
CL-USER(5): (defun examp-works (directives) (labels ((compute-insides () '((here-are-the-guts))) (compute-loop () (ultra-fancy-macro))) #'compute-insides ; spuriously reference it (compute-loop))) EXAMP-WORKS
CL-USER(6): (examp-works nil) (LOOP (HERE-ARE-THE-GUTS))
Without a statically observable use of compute-insides it is considered unused. Macros have expanded *before* deciding that. It is clear that the macro expands correctly based on 'examp-works' }}}
-- Ticket URL: http://abcl.org/trac/ticket/358 armedbear http://abcl.org armedbear
armedbear-ticket@common-lisp.net