[Armedbear-ticket] [armedbear] #358: DEFMACRO incorrect (un)dead-code-elimination in
armedbear
armedbear-devel at common-lisp.net
Tue Apr 22 10:53:23 UTC 2014
#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
More information about the armedbear-ticket
mailing list