[PATCH] D75048: [ASTImporter] Improved import of AlignedAttr.
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 26 00:24:21 PST 2020
balazske marked an inline comment as done.
balazske added inline comments.
================
Comment at: clang/lib/AST/ASTImporter.cpp:7944
+ if (auto ToEOrErr = Import(From->getAlignmentExpr()))
+ To = AlignedAttr::Create(ToContext, true, *ToEOrErr, ToRange,
+ FromAttr->getSyntax(),
----------------
shafik wrote:
> shafik wrote:
> > This call to `Create` and the one below look identical can we please refactor to avoid code duplication.
> How about something more like, maybe I am missing a detail but hopefully not:
>
> ```
> bool IsAlignmentExpr=From->isAlignmentExpr();
> auto ToEOrErr = [IsAlignmentExpr]() {
> if (IsAlignmentExpr)
> return Import(From->getAlignmentExpr());
>
> return Import(From->getAlignmentType());
> }();
>
> if (!ToTOrErr)
> return ToTOrErr.takeError();
>
> To = AlignedAttr::Create(ToContext, IsAlignmentExpr, *ToEOrErr, ToRange,
> From->getSyntax(),From->getSemanticSpelling());
> ```
It is only possible by using a template. Importing of AlignmentExpr returns `Expected<Expr *>` and importing the AlignmentType returns `Expected<TypeSourceInfo *>`. The `ToTOrErr` and `ToEOrErr` are of different types. (The create function expects a `void *` that can be a pointer to Expr or TypeSourceInfo).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75048/new/
https://reviews.llvm.org/D75048
More information about the cfe-commits
mailing list