WIP: Deterministic HeapHashSet iteration draft #584
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Work in progress toward getting all uses of
HeapHashSet
iteration to have stable ordering between record and replay.There's a lot to be improved here but it mostly demonstrates what kind of changes might be required to get more coverage using compile-time techniques.
After working through these changes over the past few days, I think @oridb's upcoming container changes (iteration order based on insertion order) might be a more maintainable path toward consistent ordering, in general.
Some of the challenges with the compile-time techniques:
static_assert
toHeapHashSet::begin
was the most reliable way that I found to easily identify forward declaration issues. But there's no good way to disambiguate between types that are actually missing aRecordReplayId
method and incomplete types that already have aRecordReplayId
method.recordreplay::RecordReplayIdMixin
across a large number of header files does significantly increase compile times after changingbase/record_replay.h
.