libera/#sbcl - IRC Chatlog
Search
11:19:34
hayley
This is most odd; I seem to be missing a card mark, but it is possibly Lisp's fault, since GC cleared the card mark and it passed verify. So somehow old->new pointers were written, and the card mark was not affected.
11:38:14
hayley
I replaced a call to AREF (which called SB-KERNEL:HAIRY-DATA-VECTOR-SET/CHECK-BOUNDS) with SVREF, and now it appears to work. But it doesn't seem like AREF should be a problem in any way.
11:54:33
hayley
Really does look like it's related to replacing AREF with SVREF; also possible that the compiler runs differently, changing the heap layout and all, too, but this program runs long enough that I'd expect to get unlucky again.
12:23:58
hayley
I did a little experiement in another SBCL that I hadn't broken, to confirm if I understood how those get compiled correctly, and (SETF AREF) and (SETF SVREF) have the same behaviour with regards to setting card marks. So that's hopefully not how this misses a old->new pointer.
12:26:36
Krystof
hairy-data-vector-set is a full-call function with dispatch on type tags (and with-array-data) to a specialized function in the %%data-vector-setters/check-bounds%% table
12:27:11
Krystof
I suppose you could see if the entry in %%data-vector-setters/check-bounds%% for simple-vector actually does the card marking correctly?
13:01:04
hayley
Probably broke it myself. I just found another bug I invented, since what I had for "tracing" weak vectors and values won't dirty the card.