[PATCH] D69903: [Basic] Introduce PODSourceLocation, NFCI
Duncan P. N. Exon Smith via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 22 10:49:04 PDT 2020
dexonsmith added a comment.
In D69903#2342011 <https://reviews.llvm.org/D69903#2342011>, @miyuki wrote:
> In D69903#2340020 <https://reviews.llvm.org/D69903#2340020>, @dexonsmith wrote:
>
>> An alternative would be to update the unions to an `AlignedCharArrayUnion` and use `SourceLocation` directly. WDYT?
>
> So, say, in `DeclarationNameLoc`, I would add `AlignedCharArrayUnion` as follows:
>
> union {
> llvm::AlignedCharArrayUnion<struct NT, struct CXXOpName, struct CXXLitOpName> UninitStorage;
> struct NT NamedType;
> struct CXXOpName CXXOperatorName;
> struct CXXLitOpName CXXLiteralOperatorName;
> };
>
> And change the constructor of `DeclarationNameLoc` to default-construct `UninitStorage`, i.e.:
>
> DeclarationNameLoc() : UninitStorage() {
> memset(UninitStorage.buffer, 0, sizeof(UninitStorage.buffer));
> }
>
> After that, I can use `SourceLocation` in `DeclarationNameLoc` directly.
>
> Do I understand your idea correctly?
Not quite, I wasn't thinking of wrapping the `AlignedCharArrayUnion` in a `union`, I was thinking of using it *as* the union.
Here's one way you could do it. In the first commit, you can change:
union {
struct NT NamedType;
struct CXXOpName CXXOperatorName;
struct CXXLitOpName CXXLiteralOperatorName;
};
to something like:
AlignedCharArrayUnion<NT, CXXOpName, CXXLitOpName> NameLoc;
This will mean updating users of `NamedType`, `CXXOperatorName`, and `CXXLiteralOperatorName` to go through the new `NameLoc` field. If there are a lot of them, you might want to start with a prep commit that adds:
NT &getNamedType() { return NamedType; }
CXXOpName &getCXXOperatorName() { return CXXOperatorName; }
CXXLitOpName &getCXXLiteralOperatorName() { return CXXLiteralOperatorName; }
and change all the users to go through the function, then when you land the change to `AlignedCharArrayUnion` you just have to update those three functions. But if there aren't many users it may not be worth it.
Once you've created `NameLoc` (using an `AlignedCharArrayUnion`), a follow-up commit can change `CXXOpName` and `CXXLitOpName` to use a `SourceLocation` instead of a `PODSourceLocation`, and then you can delete `PODSourceLocation` once you've handled all of its users.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69903/new/
https://reviews.llvm.org/D69903
More information about the cfe-commits
mailing list