You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adjust the iteration of the conformance table to match the current data structure layout.
`MapData` is a view into the `ConformanceState`:
~~~
[+0x00] Cache [Type: swift::ConcurrentReadableHashMap<ConformaanceCacheEntry, swift::StaticMutex>]
[+0x28] SectionsToScan [Type: swift::ConcurrentReadableArray<ConformanceSection>]
[+0x50] scanSectionsBackwards [Type: bool]
~~~
`Cache` itself is a structure:
~~~
[+0x00] ReaderCount [Type: std::atomic<uint32_t>]
[+0x04] ElementCount [Type: std::atomic<uint32_t>]
[+0x08] Elements [Type: std::atomic<swift::ConcurrentReadableHashMap<ConformanceCacheEntry, swift::staticMutex>::ElementStorage *>]
~~~
The `ElementStorage` backing `Elements` actually looks like:
~~~
[+0x00] Capacity [Type: uint32_t]
[+0x08] Elem [Typwe: ConformanceCacheEntry]
~~~
The `Capacity` field will be pointer aligned (a previous change has changed this
to be explicitly pointer sized bit-sliced). However, we would previously fail
to accomodate the `Capacity` field, and read the contents shifted by the size of
`Capacity`. This repairs the iteration off the `ConformanceCache`.
0 commit comments