[Armedbear-devel] Incorrect (un)dead-code-elimination
Mark Evenson
evenson at panix.com
Tue Apr 22 10:54:37 UTC 2014
On 21 Apr 2014, at 18:22, Douglas Katzman <dougk at 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 at common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/armedbear-devel
More information about the armedbear-devel
mailing list