From 412fb51c01281e2bdf2805415267545f64b0ab0e Mon Sep 17 00:00:00 2001 From: Nikodemus Siivola Date: Wed, 16 Feb 2005 06:02:04 +0000 Subject: [PATCH] 0.8.19.28: fix loading of multiply forward-refrenced layouts Bug orginally reported and fix provided by Cheuksan Wang, basis for test-case provided by Jason Dagit. --- NEWS | 2 ++ src/code/class.lisp | 2 +- tests/undefined-classoid-bug-1.lisp | 5 +++++ tests/undefined-classoid-bug-2.lisp | 6 ++++++ tests/undefined-classoid-bug.test.sh | 26 ++++++++++++++++++++++++++ version.lisp-expr | 2 +- 6 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 tests/undefined-classoid-bug-1.lisp create mode 100644 tests/undefined-classoid-bug-2.lisp create mode 100644 tests/undefined-classoid-bug.test.sh diff --git a/NEWS b/NEWS index f00749316..a0d97640d 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ changes in sbcl-0.8.20 (0.9alpha.0?) relative to sbcl-0.8.19: * fixed disassembly of SHLD and SHRD on x86. (thanks to David Lichteblau) + * fixed loading of multiply forward-referenced layouts. + (thanks to Cheuksan Wang) * fixed bugs 19 and 317: fixed-format floating point printing is more accurate. This also fixes a bug reported by Adam Warner related to the ~@F format directive. diff --git a/src/code/class.lisp b/src/code/class.lisp index 57ef6097c..3b0b40de4 100644 --- a/src/code/class.lisp +++ b/src/code/class.lisp @@ -431,7 +431,7 @@ (let ((layout (find-layout name))) (init-or-check-layout layout (or (find-classoid name nil) - (make-undefined-classoid name)) + (layout-classoid layout)) length inherits depthoid))) diff --git a/tests/undefined-classoid-bug-1.lisp b/tests/undefined-classoid-bug-1.lisp new file mode 100644 index 000000000..9d93fca9d --- /dev/null +++ b/tests/undefined-classoid-bug-1.lisp @@ -0,0 +1,5 @@ +(in-package "CL-USER") + +(defun a-struct-referencer-1 (struct) + (a-struct-slot struct)) + diff --git a/tests/undefined-classoid-bug-2.lisp b/tests/undefined-classoid-bug-2.lisp new file mode 100644 index 000000000..39a0fe86c --- /dev/null +++ b/tests/undefined-classoid-bug-2.lisp @@ -0,0 +1,6 @@ +(in-package "CL-USER") + +(defun a-struct-referencer-2 (struct) + (a-struct-slot struct)) + +(defstruct a-struct slot) diff --git a/tests/undefined-classoid-bug.test.sh b/tests/undefined-classoid-bug.test.sh new file mode 100644 index 000000000..ad05e7725 --- /dev/null +++ b/tests/undefined-classoid-bug.test.sh @@ -0,0 +1,26 @@ +# This file run a regression test for a bug in loading +# forward-referenced layouts. + +FILES='"undefined-classoid-bug-1.lisp" "undefined-classoid-bug-2.lisp"' +FASLS='"undefined-classoid-bug-1.fasl" "undefined-classoid-bug-2.fasl"' + +${SBCL:-sbcl} <