Index: /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp
===================================================================
--- /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp	(revision 15258)
+++ /trunk/source/compiler/X86/X8632/x8632-vinsns.lisp	(revision 15259)
@@ -3402,5 +3402,4 @@
   (movb (:$b 6) (:@ x8632::misc-data-offset (:%l closure))) ;imm word count
   (movb (:$b #xbf) (:@ (+ x8632::misc-data-offset 2) (:%l closure))) ;movl $self, %fn
-  (movl (:%l closure) (:@ (+ x8632::misc-data-offset 3) (:%l closure)))
   (movb (:$b #xff) (:@ (+ x8632::misc-data-offset 7) (:%l closure))) ;jmp
   (movl (:$l #x0150b425) (:@ (+ x8632::misc-data-offset 8) (:%l closure))) ;.SPcall-closure
@@ -3408,5 +3407,8 @@
   ;; (movl ($ 0) (:@ (+ x8632::misc-data-offset 12))) ;"end" of self-references
   (movb (:$b 7) (:@ (+ x8632::misc-data-offset 16) (:%l closure))) ;self-reference offset
-  (movb (:$b x8632::function-boundary-marker) (:@ (+ x8632::misc-data-offset 20) (:%l closure))))
+  (movb (:$b x8632::function-boundary-marker) (:@ (+ x8632::misc-data-offset 20) (:%l closure)))
+  ;; If the GC moved the closure before we finished creating its
+  ;; self-reference table, it wouldn't have updated this self-reference
+  (movl (:%l closure) (:@ (+ x8632::misc-data-offset 3) (:%l closure))))
 
 (define-x8632-vinsn finalize-closure (((closure :lisp))
