Understand the failure.
Verify the repair.
Small, reproducible software failures. The broken implementation, the fix that didn’t work, and the one that passed—preserved together.
Explore the cases ↓How results are verified ↗WHAT THE ARCHIVE CONTAINS
100840 executable cases. 20168 are open.
Every case records the implementation that fails, the fix that did not work, and the repair that passed its checks—with recorded outputs and source hashes. This release adds 100840 cases across 20168 failure mechanisms and 254 domains.
The open tier gives you the failure and the unsuccessful fix for one case in every mechanism. The remaining 80672 cases, 5 variants per mechanism, are member-only: the verified repair, its recorded checks, and the full fixture suite are held in the member archive. Read the methodology ↗
A RECORD OF WHAT WENT WRONG
Browse the archive / 100840
Block offset table: first object in the card returned even when it starts after the address · case 01
Addresses at the beginning of a card are attributed to the next object.
Block offset table: first object in the card returned even when it starts after the address · case 02
Addresses at the beginning of a card are attributed to the next object.
Block offset table: first object in the card returned even when it starts after the address · case 03
Addresses at the beginning of a card are attributed to the next object.
Block offset table: first object in the card returned even when it starts after the address · case 04
Addresses at the beginning of a card are attributed to the next object.
Block offset table: first object in the card returned even when it starts after the address · case 05
Addresses at the beginning of a card are attributed to the next object.
Block offset table: address at an object end attributed to that object · case 01
The first byte of an object is reported as belonging to its predecessor.
Block offset table: address at an object end attributed to that object · case 02
The first byte of an object is reported as belonging to its predecessor.
Block offset table: address at an object end attributed to that object · case 03
The first byte of an object is reported as belonging to its predecessor.
Block offset table: address at an object end attributed to that object · case 04
The first byte of an object is reported as belonging to its predecessor.
Block offset table: address at an object end attributed to that object · case 05
The first byte of an object is reported as belonging to its predecessor.
Identity hash: every move re-stores the hash · case 01
After a second move the hash changes and the object grows another 8 bytes.
Identity hash: every move re-stores the hash · case 02
After a second move the hash changes and the object grows another 8 bytes.
Identity hash: every move re-stores the hash · case 03
After a second move the hash changes and the object grows another 8 bytes.
Identity hash: every move re-stores the hash · case 04
After a second move the hash changes and the object grows another 8 bytes.
Identity hash: every move re-stores the hash · case 05
After a second move the hash changes and the object grows another 8 bytes.
Identity hash: stored hash computed from the destination address · case 01
The hash observed before a move differs from the one observed after it.
Identity hash: stored hash computed from the destination address · case 02
The hash observed before a move differs from the one observed after it.
Identity hash: stored hash computed from the destination address · case 03
The hash observed before a move differs from the one observed after it.
Identity hash: stored hash computed from the destination address · case 04
The hash observed before a move differs from the one observed after it.
Identity hash: stored hash computed from the destination address · case 05
The hash observed before a move differs from the one observed after it.
Identity hash: moved objects hash their current address · case 01
hashCode changes after every collection that moves the object.
Identity hash: moved objects hash their current address · case 02
hashCode changes after every collection that moves the object.
Identity hash: moved objects hash their current address · case 03
hashCode changes after every collection that moves the object.
Identity hash: moved objects hash their current address · case 04
hashCode changes after every collection that moves the object.
Identity hash: moved objects hash their current address · case 05
hashCode changes after every collection that moves the object.
Identity hash: mask applied before the shift · case 01
Hashes of unmoved objects disagree with the value later stored on move.
Identity hash: mask applied before the shift · case 02
Hashes of unmoved objects disagree with the value later stored on move.
Identity hash: mask applied before the shift · case 03
Hashes of unmoved objects disagree with the value later stored on move.
Identity hash: mask applied before the shift · case 04
Hashes of unmoved objects disagree with the value later stored on move.
Identity hash: mask applied before the shift · case 05
Hashes of unmoved objects disagree with the value later stored on move.
Remembered sets: intra-region pointers recorded · case 01
Remembered sets fill with pointers that never cross a region boundary.
Remembered sets: intra-region pointers recorded · case 02
Remembered sets fill with pointers that never cross a region boundary.
Remembered sets: intra-region pointers recorded · case 03
Remembered sets fill with pointers that never cross a region boundary.
Remembered sets: intra-region pointers recorded · case 04
Remembered sets fill with pointers that never cross a region boundary.
Remembered sets: intra-region pointers recorded · case 05
Remembered sets fill with pointers that never cross a region boundary.
Remembered sets: pointers into young regions dropped · case 01
Old-to-young references are missing and young evacuation loses live objects.
Remembered sets: pointers into young regions dropped · case 02
Old-to-young references are missing and young evacuation loses live objects.
Remembered sets: pointers into young regions dropped · case 03
Old-to-young references are missing and young evacuation loses live objects.
Remembered sets: pointers into young regions dropped · case 04
Old-to-young references are missing and young evacuation loses live objects.
Remembered sets: pointers into young regions dropped · case 05
Old-to-young references are missing and young evacuation loses live objects.
Remembered sets: target card recorded instead of the slot card · case 01
Evacuation rescans cards in the target region, which do not contain the referencing slot.
Remembered sets: target card recorded instead of the slot card · case 02
Evacuation rescans cards in the target region, which do not contain the referencing slot.
Remembered sets: target card recorded instead of the slot card · case 03
Evacuation rescans cards in the target region, which do not contain the referencing slot.
Remembered sets: target card recorded instead of the slot card · case 04
Evacuation rescans cards in the target region, which do not contain the referencing slot.
Remembered sets: target card recorded instead of the slot card · case 05
Evacuation rescans cards in the target region, which do not contain the referencing slot.
Remembered sets: continuation regions get their own sets · case 01
References into the tail of a humongous object are filed under a continuation region nobody scans.
Remembered sets: continuation regions get their own sets · case 02
References into the tail of a humongous object are filed under a continuation region nobody scans.
Remembered sets: continuation regions get their own sets · case 03
References into the tail of a humongous object are filed under a continuation region nobody scans.
Remembered sets: continuation regions get their own sets · case 04
References into the tail of a humongous object are filed under a continuation region nobody scans.
Remembered sets: continuation regions get their own sets · case 05
References into the tail of a humongous object are filed under a continuation region nobody scans.
TLAB: allocation ending exactly at the buffer end refused · case 01
The last slot of every TLAB is wasted and extra refills happen.
TLAB: allocation ending exactly at the buffer end refused · case 02
The last slot of every TLAB is wasted and extra refills happen.
TLAB: allocation ending exactly at the buffer end refused · case 03
The last slot of every TLAB is wasted and extra refills happen.
TLAB: allocation ending exactly at the buffer end refused · case 04
The last slot of every TLAB is wasted and extra refills happen.
TLAB: allocation ending exactly at the buffer end refused · case 05
The last slot of every TLAB is wasted and extra refills happen.
TLAB: nearly empty buffers kept and nearly full ones discarded · case 01
Buffers with plenty of free space are retired while almost-full ones force slow-path allocations.
TLAB: nearly empty buffers kept and nearly full ones discarded · case 02
Buffers with plenty of free space are retired while almost-full ones force slow-path allocations.
TLAB: nearly empty buffers kept and nearly full ones discarded · case 03
Buffers with plenty of free space are retired while almost-full ones force slow-path allocations.
TLAB: nearly empty buffers kept and nearly full ones discarded · case 04
Buffers with plenty of free space are retired while almost-full ones force slow-path allocations.
TLAB: nearly empty buffers kept and nearly full ones discarded · case 05
Buffers with plenty of free space are retired while almost-full ones force slow-path allocations.
TLAB: refill waste limit reset instead of raised · case 01
After a slow-path allocation the limit collapses, so a thread keeps retiring buffers too eagerly or never adapts.
TLAB: refill waste limit reset instead of raised · case 02
After a slow-path allocation the limit collapses, so a thread keeps retiring buffers too eagerly or never adapts.
TLAB: refill waste limit reset instead of raised · case 03
After a slow-path allocation the limit collapses, so a thread keeps retiring buffers too eagerly or never adapts.
TLAB: refill waste limit reset instead of raised · case 04
After a slow-path allocation the limit collapses, so a thread keeps retiring buffers too eagerly or never adapts.
TLAB: refill waste limit reset instead of raised · case 05
After a slow-path allocation the limit collapses, so a thread keeps retiring buffers too eagerly or never adapts.
TLAB: half-buffer objects allocated inside TLABs · case 01
Medium-sized objects retire TLABs early and waste most of each buffer.
TLAB: half-buffer objects allocated inside TLABs · case 02
Medium-sized objects retire TLABs early and waste most of each buffer.
TLAB: half-buffer objects allocated inside TLABs · case 03
Medium-sized objects retire TLABs early and waste most of each buffer.
TLAB: half-buffer objects allocated inside TLABs · case 04
Medium-sized objects retire TLABs early and waste most of each buffer.
TLAB: half-buffer objects allocated inside TLABs · case 05
Medium-sized objects retire TLABs early and waste most of each buffer.
TLAB: eden cannot be filled exactly · case 01
The final buffer or object that would end exactly at eden_end fails.
TLAB: eden cannot be filled exactly · case 02
The final buffer or object that would end exactly at eden_end fails.
TLAB: eden cannot be filled exactly · case 03
The final buffer or object that would end exactly at eden_end fails.
TLAB: eden cannot be filled exactly · case 04
The final buffer or object that would end exactly at eden_end fails.
TLAB: eden cannot be filled exactly · case 05
The final buffer or object that would end exactly at eden_end fails.
TAMS: object allocated exactly at TAMS judged by marks · case 01
The first object allocated after marking started is freed although it is implicitly live.
TAMS: object allocated exactly at TAMS judged by marks · case 02
The first object allocated after marking started is freed although it is implicitly live.
TAMS: object allocated exactly at TAMS judged by marks · case 03
The first object allocated after marking started is freed although it is implicitly live.
TAMS: object allocated exactly at TAMS judged by marks · case 04
The first object allocated after marking started is freed although it is implicitly live.
TAMS: object allocated exactly at TAMS judged by marks · case 05
The first object allocated after marking started is freed although it is implicitly live.
TAMS: untouched regions treated as full at mark start · case 01
Objects allocated during marking into a previously empty region are freed.
TAMS: untouched regions treated as full at mark start · case 02
Objects allocated during marking into a previously empty region are freed.
TAMS: untouched regions treated as full at mark start · case 03
Objects allocated during marking into a previously empty region are freed.
TAMS: untouched regions treated as full at mark start · case 04
Objects allocated during marking into a previously empty region are freed.
TAMS: untouched regions treated as full at mark start · case 05
Objects allocated during marking into a previously empty region are freed.
TAMS: watermark aliases the live allocation top · case 01
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
TAMS: watermark aliases the live allocation top · case 02
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
TAMS: watermark aliases the live allocation top · case 03
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
TAMS: watermark aliases the live allocation top · case 04
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
TAMS: watermark aliases the live allocation top · case 05
TAMS moves with allocation, so objects allocated during marking must be marked or are freed.
TAMS: marks carried over into the next cycle · case 01
Objects marked in an earlier cycle survive later cycles without being reached.
TAMS: marks carried over into the next cycle · case 02
Objects marked in an earlier cycle survive later cycles without being reached.
TAMS: marks carried over into the next cycle · case 03
Objects marked in an earlier cycle survive later cycles without being reached.
TAMS: marks carried over into the next cycle · case 04
Objects marked in an earlier cycle survive later cycles without being reached.
TAMS: marks carried over into the next cycle · case 05
Objects marked in an earlier cycle survive later cycles without being reached.
Oop maps: array length word traced as an element · case 01
The length of an object array is treated as a reference and the last element is skipped.
Oop maps: array length word traced as an element · case 02
The length of an object array is treated as a reference and the last element is skipped.
Oop maps: array length word traced as an element · case 03
The length of an object array is treated as a reference and the last element is skipped.
Oop maps: array length word traced as an element · case 04
The length of an object array is treated as a reference and the last element is skipped.
Oop maps: array length word traced as an element · case 05
The length of an object array is treated as a reference and the last element is skipped.
INSPECTABLE BY DESIGN
Every result has a runnable source.
Runnable implementations with recorded outputs, source hashes, and explicit contracts. Related variants share a failure mechanism and belong together in evaluation splits.
Read the methodology ↗