Opened 9 years ago
Last modified 9 months ago
#358 new defect
DEFMACRO incorrect (un)dead-code-elimination in
Reported by: | Mark Evenson | Owned by: | |
---|---|---|---|
Priority: | major | Milestone: | 1.9.0 |
Component: | interpreter | Version: | 1.4.0-dev |
Keywords: | Cc: | ||
Parent Tickets: |
Description
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'
Change History (10)
comment:1 Changed 6 years ago by
Milestone: | 1.4.0 → 1.5.0 |
---|
comment:5 Changed 3 years ago by
Milestone: | 1.6.2 → 1.7.0 |
---|
comment:10 Changed 9 months ago by
Milestone: | 1.8.1 → 1.9.0 |
---|
Note: See
TracTickets for help on using
tickets.
Ticket retargeted after milestone closed