From 059b8dcf4d34fe9e7b96ed889e19e43b8b98906c Mon Sep 17 00:00:00 2001 From: Christophe Rhodes Date: Fri, 17 Feb 2006 17:32:37 +0000 Subject: [PATCH] 0.9.9.33: Fix the gencgc verification code for raw-slot-at-end structure layout. --- src/runtime/gencgc.c | 17 ++++++++++++++++- version.lisp-expr | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/runtime/gencgc.c b/src/runtime/gencgc.c index 3721c88..837ada6 100644 --- a/src/runtime/gencgc.c +++ b/src/runtime/gencgc.c @@ -46,6 +46,8 @@ #include "genesis/simple-fun.h" #include "save.h" #include "genesis/hash-table.h" +#include "genesis/instance.h" +#include "genesis/layout.h" /* forward declarations */ page_index_t gc_find_freeish_pages(long *restart_page_ptr, long nbytes, @@ -3279,11 +3281,24 @@ verify_space(lispobj *start, size_t words) case SINGLE_FLOAT_WIDETAG: #endif case UNBOUND_MARKER_WIDETAG: - case INSTANCE_HEADER_WIDETAG: case FDEFN_WIDETAG: count = 1; break; + case INSTANCE_HEADER_WIDETAG: + { + lispobj nuntagged; + long ntotal = HeaderValue(thing); + lispobj layout = ((struct instance *)start)->slots[0]; + if (!layout) { + count = 1; + break; + } + nuntagged = ((struct layout *)native_pointer(layout))->n_untagged_slots; + verify_space(start + 1, ntotal - fixnum_value(nuntagged)); + count = ntotal + 1; + break; + } case CODE_HEADER_WIDETAG: { lispobj object = *start; diff --git a/version.lisp-expr b/version.lisp-expr index 29d8be7..df55c64 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.9.32" +"0.9.9.33" -- 1.7.10.4