Opened 11 years ago

Last modified 18 months ago

#358 new defect

DEFMACRO incorrect (un)dead-code-elimination in

Reported by: Mark Evenson Owned by:
Priority: major Milestone: 1.9.3
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 (13)

comment:1 Changed 8 years ago by Mark Evenson

Milestone: 1.4.01.5.0

Ticket retargeted after milestone closed

comment:2 Changed 7 years ago by Mark Evenson

Milestone: 1.5.01.6.0

Ticket retargeted after milestone closed

comment:3 Changed 5 years ago by Mark Evenson

Milestone: 1.6.01.6.1

Ticket retargeted after milestone closed

comment:4 Changed 5 years ago by Mark Evenson

Milestone: 1.6.11.6.2

Ticket retargeted after milestone closed

comment:5 Changed 5 years ago by Mark Evenson

Milestone: 1.6.21.7.0

comment:6 Changed 5 years ago by Mark Evenson

Milestone: 1.7.01.7.1

Ticket retargeted after milestone closed

comment:7 Changed 4 years ago by Mark Evenson

Milestone: 1.7.11.7.2

Ticket retargeted after milestone closed

comment:8 Changed 4 years ago by Mark Evenson

Milestone: 1.7.21.8.0

Milestone renamed

comment:9 Changed 4 years ago by Mark Evenson

Milestone: 1.8.01.8.1

Ticket retargeted after milestone closed

comment:10 Changed 3 years ago by Mark Evenson

Milestone: 1.8.11.9.0

comment:11 Changed 22 months ago by Mark Evenson

Milestone: 1.9.01.9.1

comment:12 Changed 22 months ago by Mark Evenson

Milestone: 1.9.11.9.2

comment:13 Changed 18 months ago by Mark Evenson

Milestone: 1.9.21.9.3
Note: See TracTickets for help on using tickets.