[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