[PATCH] D70190: [clang][modules] Add support for merging lifetime-extended temporaries
    Richard Smith - zygoloid via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Wed Nov 13 11:04:50 PST 2019
    
    
  
rsmith added a comment.
Functionally, this looks good, thanks.
================
Comment at: clang/include/clang/Serialization/ASTReader.h:555
+  /// Key used to identify LifetimeExtendedTemporaryDecl for merging.
+  /// containg the lifetime-extending declaration and the mangling number.
+  using LETemporaryKey = std::pair<Decl *, unsigned>;
----------------
Typos:
"[...] merging.
containg the [...]"
->
"[...] merging,
containing the [...]"
================
Comment at: clang/lib/AST/TextNodeDumper.cpp:1349-1350
+  }
+  OS << " subexpr";
+  dumpPointer(D);
+}
----------------
We shouldn't need this: the address of the declaration is dumped anyway by the infrastructure. (If you meant to dump the subexpression, I don't think that's what this does.)
Traversing from the `LifetimeExtendedTemporaryDecl` to its subexpression for dumping purposes should be done by `ASTNodeTraverser` (in `include/clang/AST/ASTNodeTraverser.h`).
================
Comment at: clang/lib/Serialization/ASTReaderDecl.cpp:2566
 
+  Decl* RealDecl = static_cast<T *>(D);
+
----------------
`*` on the right, please.
================
Comment at: clang/lib/Serialization/ASTReaderDecl.cpp:2576
+
+  if (auto *LETDecl = dyn_cast<LifetimeExtendedTemporaryDecl>(RealDecl)) {
+    LETDecl->dump();
----------------
This case is essentially entirely different from the primary implementation of `mergeMergeable`. Consider adding an overload or explicit specialization for the `LifetimeExtendedTemporaryDecl` case instead; we don't need the branch on the `dyn_cast` result below, and we don't need the `allowODRLikeMergeInC` check above (because lifetime-extended temporaries only exist in C++).
================
Comment at: clang/lib/Serialization/ASTReaderDecl.cpp:2577
+  if (auto *LETDecl = dyn_cast<LifetimeExtendedTemporaryDecl>(RealDecl)) {
+    LETDecl->dump();
+    auto LookupResult =
----------------
We shouldn't be dumping from here :)
================
Comment at: clang/lib/Serialization/ASTReaderDecl.cpp:2579
+    auto LookupResult =
+        Reader.LETemporaryForMerging.FindAndConstruct(std::make_pair(
+            LETDecl->getExtendingDecl(), LETDecl->getManglingNumber()));
----------------
Prefer the normal container interface here -- `insert` or `operator[]` -- rather than the nonstandard extension `FindAndConstruct`.
Repository:
  rC Clang
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D70190/new/
https://reviews.llvm.org/D70190
    
    
More information about the cfe-commits
mailing list