martong added inline comments.

================
Comment at: lib/AST/ASTImporter.cpp:1659
+  AccessSpecDecl *ToD;
+  std::tie(ToD, AlreadyImported) = CreateDecl<AccessSpecDecl>(
+      D, Importer.getToContext(), D->getAccess(), DC, Loc, ColonLoc);
----------------
a.sidorin wrote:
> As I see, all usage samples require having a variable AlreadyImported used 
> only once. How about changing the signature a bit:
> ```bool getOrCreateDecl(ToDeclTy *&ToD, FromDeclT *FromD, Args &&... args)```
> with optional `LLVM_NODISCARD`? (Naming is a subject for discussion).
> This signature also allows us to omit template arguments because we pass an 
> argument of a templated type. So, the call will look like this:
> ```AccessSpecDecl *ToD;
> if (getOrCreateDecl(ToD, D, Importer.getToContext(), D->getAccess(), DC, Loc, 
> ColonLoc))
>   return ToD;```
I like your idea, because indeed we could spare the repetition of the type in 
most cases. However, in one particular case we have to use the original 
version: in `VisitTypedefNameDecl` where we assign either a `TypeAliasDecl *` 
or a `TypedefDecl *` to a pointer to their common base class, `TypedefNameDecl`.
So, I think it is possible to add an overload with the signature `(ToDeclTy 
*&ToD, FromDeclT *FromD, Args &&... args)` and we could use that in the simple 
cases (which is the majority).

About the naming I was thinking about `getAlreadyImportedOrCreateNewDecl`, but 
this appears to be very long. So if you think this is way too long then I am  
OK with the shorter `getOrCreateDecl`.


Repository:
  rC Clang

https://reviews.llvm.org/D47632



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to