This code currently uses a union object to increase the
alignment of the type ObjCTypeParamList. The original intent of this
trick was to be able to use the expression this + 1 to access the
beginning of a tail-allocated array of ObjCTypeParamDecl * pointers.
The code has since been refactored and uses llvm::TrailingObjects to
manage the tail-allocated array. This template takes care of
alignment, so the hack is no longer necessary.
This patch removes the union so that the SourceRange class can be
used directly instead of being re-implemented with raw representations
of source locations.
Can you add a comment here explaining why the alignas is needed here? It's not obvious from the context.