I'm not exactly sure how to even ask this question, as I've seen various packages fail to natively compile circular lists or optimize it wrongly . So I've come up with a simple test case for me to be able to disassemble the bytecode and the native code, and see if I could spot the problem, but disassembling natively compiled code doesn't seem to work. Test case: (defun test-circular-list () (let ((l (list 1 2 3))) (setcdr (last l) l) l)) (print (test-circular-list)) (provide 'test-circular-list) M-x emacs-lisp-byte-compile-and-load M-x disassemble RET test-circular-list (works) M-x emacs-lisp-native-compile-and-load M-x disassemble RET test-circular-list (doesn't work) Debugger entered--Lisp error: (search-failed "^.*