[ptr-traits] Switch the Redeclarable template to using a void pointer in
its PointerUnion rather than an ASTContext pointer. Using pointers with PointerUnion really should be checking the pointee type's alignment, and we can't do this without the complete type. The Redeclarable template inherently can't know the complete type of ASTContext because of its layering, and because it is a template its methods can't reasonably be out-of-line the way we traditionally solve circular references within the AST library. After discussing this with Richard Smith, his suggestion which I have implemented here was to just drop to a void* for the PointerUnion. This essentially documents that we're going to completely ignore the type (including its potential alignment consequences) for this code. There are still of course dynamic guards that this ended up working correctly, and because of the way the code is factored this doesn't leak outside of the very narrow implementation guts of Redeclarable. This is part of a series of patches to allow LLVM to check for complete pointee types when computing its pointer traits. This is absolutely necessary to get correct (or reproducible) results for things like how many low bits are guaranteed to be zero. llvm-svn: 256611
Loading
Please sign in to comment