On Jun 5, 2013, at 8:34 PM, Richard Smith <[email protected]> wrote: > On Wed, Jun 5, 2013 at 8:06 PM, Eli Friedman <[email protected]> wrote: > Patch attached; fixes PR16144. > > 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. > > There are basically three possible approaches to fixing the alignment issues > in TypeLocs: > > 1) Force every piece of the TypeLoc's data to have alignment 8. > 2) Perform dynamic alignment adjustments. > 3) Use #pragma pack to let the compiler know the data is intentionally > misaligned. > > (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. > > > Two questions to focus on for review: would (3) be a better approach? > > I've tried this. We expose pointers into the type source info block in a > couple of places (for instance, the array of ParmVarDecl*s on a > FunctionTypeLoc) and the misalignment is then exposed to quite a large body > of code. Maybe a MisalignedArrayRef<...> would help, but the damage is still > not very contained.
Hmm. We could have an API that potentially copies out to a temporary buffer if the data is misaligned. Dynamic alignment is probably cleaner, though; ugh. > And is there any way to make the TypeLocBuilder implementation a bit less > ugly? > > Perhaps we could remove the guarantee that the child locations of a TypeLoc > produced by push<T> are valid, or require some explicit action to fix them? I *think* that should be fine. John.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
