The collector expects any pointers into CopiedSpace passed to copyLater are within 32 KB of the CopiedBlock header. This was always the case except for when flattening a dictionary caused the size of the Butterfly to decrease. This was equivalent to moving the base of the Butterfly to higher addresses. If the object was reduced sufficiently in size, the base would no longer be within the first 32 KB of the CopiedBlock and the next collection would choke on the Butterfly pointer.
The fix is to detect this situation during flattening and to memmove the Butterfly down to where the old base was.
Created attachment 234884 [details]
Comment on attachment 234884 [details]
Clearing flags on attachment: 234884
Committed r171092: <http://trac.webkit.org/changeset/171092>
All reviewed patches have been landed. Closing bug.