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

;; 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@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel

On 21 Apr 2014, at 18:22, Douglas Katzman <dougk@google.com> wrote:
;; 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'
Filed as [ticket-358][]. Thanks for the report! [ticket-358]: http://abcl.org/trac/ticket/358 -- "A screaming comes across the sky. It has happened before but there is nothing to compare to it now." _______________________________________________ Armedbear-devel mailing list Armedbear-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel
participants (2)
-
Douglas Katzman
-
Mark Evenson