[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