<div dir="ltr">Patch attached; fixes PR16144.<div><br></div><div>Currently, the data in TypeLocs consists of a bunch of tightly packed structures, and the structures can become misaligned because there isn't any padding.</div>
<div><br></div><div>There are basically three possible approaches to fixing the alignment issues in TypeLocs:</div><div><br></div><div><div>1) Force every piece of the TypeLoc's data to have alignment 8.</div><div>2) Perform dynamic alignment adjustments.</div>
<div>3) Use #pragma pack to let the compiler know the data is intentionally misaligned.</div></div><div><br></div><div>(1) has a substantial impact on memory usage (something like 1% on Cocoa.h), so I'd like to avoid it if possible. (2) is the attached patch; it avoids both misaligned loads and unnecessary memory usage. The primary downside is that TypeLocBuilder becomes a lot more complicated, because it doesn't know in advance where it needs to insert padding. (3) keeps around to misaligned data: there's a potential performance penalty, it requires being careful not to introduce incorrect accesses to the data, and it's just plain ugly.<br>
</div><div><br></div><div><br></div><div>Two questions to focus on for review: would (3) be a better approach? And is there any way to make the TypeLocBuilder implementation a bit less ugly?<br></div><div><br></div><div>
-Eli</div></div>