Compiling 4.2 on armv7 (and i686)

Unfortunately, synced to HEAD as of today, I'm still seeing this issue. I had to fix a couple other regressions introduced on 32-bit since the Oct 3rd to get there, but it's really not liking something going on in this function right now. Both i686 and Arm32 are segfaulting, but I expect Darwin Arm32 is probably fine here.

EDIT: I do have some more details this time. The crash is happening because the pointer at wtable->Description (conformance) is non-zero, but not valid. Specifically the state I'm getting back is: wtable = 0xb76f816c, wtable->Description = 0x200.

Is the ProtocolConformanceDescriptor in the table supposed to participate in relocation/linking, perhaps? This looks suspiciously like the resilient witness table problem.

@Douglas_Gregor pinging again, since it looks like another commit was made after I last posted (
[ABI] Move the resilient witness table into the conformance descriptor. · apple/swift@41891f6 · GitHub). It may change this behavior a bit, so I’ll test it, but it’d be a bit easier to debug this issue if I had a better idea what was going on in this space. Pointers to code/tests that would help me here would be useful.

I can say that the commit before that one in this area was broken when I tried it though, which was the one that prompted the last post. https://github.com/apple/swift/commit/aba018c1e83cf8ccef93bd506cfd76e2b109a58b#diff-4b6702ba49fc06a4ca7e3bd7e199278f

It's a pointer to the ProtocolConformanceDescriptor, which will be copied from the witness table "pattern" by swift_getGenericWitnessTable() or (for witness tables that don't require instantiation) part of the witness table itself. It is encoded as a (non-relative) pointer, so yes... it will participate in relocation and linking.

Doug