[Armedbear-devel] Incorrect (un)dead-code-elimination

Douglas Katzman dougk at google.com
Mon Apr 21 16:22:28 UTC 2014


;; 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'


_______________________________________________
Armedbear-devel mailing list
Armedbear-devel at common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel



More information about the armedbear-devel mailing list