<div dir="ltr">Please include details about the reason for the revert (links to and quotes from buildbots are helpful, etc) in the commit message - so others can follow along more easily (if they're seeing a local regression, they might be able to check if this revert is likely to address it - if they want to pick up the patch/do some similar change at a later date, this might help explain what was wrong with this approach & would need to be addressed before making another attempt)</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Nov 30, 2019 at 8:53 AM via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Tyker<br>
Date: 2019-11-30T17:52:26+01:00<br>
New Revision: 3f4b70c79e686117c2754d2c0a5a44c8b6829e79<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/3f4b70c79e686117c2754d2c0a5a44c8b6829e79" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3f4b70c79e686117c2754d2c0a5a44c8b6829e79</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/3f4b70c79e686117c2754d2c0a5a44c8b6829e79.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3f4b70c79e686117c2754d2c0a5a44c8b6829e79.diff</a><br>
<br>
LOG: Revert "[clang][modules] Add support for merging lifetime-extended temporaries"<br>
<br>
This reverts commit 3c7f6b439699a9cbbc0ac8d288cc70aff357446b.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    clang/include/clang/AST/DeclCXX.h<br>
    clang/include/clang/AST/TextNodeDumper.h<br>
    clang/include/clang/Serialization/ASTReader.h<br>
    clang/lib/AST/TextNodeDumper.cpp<br>
    clang/lib/Serialization/ASTReaderDecl.cpp<br>
<br>
Removed: <br>
    clang/test/Modules/Inputs/merge-lifetime-extended-temporary/a.h<br>
    clang/test/Modules/Inputs/merge-lifetime-extended-temporary/b.h<br>
    clang/test/Modules/Inputs/merge-lifetime-extended-temporary/c.h<br>
    clang/test/Modules/Inputs/merge-lifetime-extended-temporary/module.modulemap<br>
    clang/test/Modules/merge-lifetime-extended-temporary.cpp<br>
<br>
<br>
################################################################################<br>
diff  --git a/clang/include/clang/AST/DeclCXX.h b/clang/include/clang/AST/DeclCXX.h<br>
index 0f2018fb9e8c..63d67bd3f55b 100644<br>
--- a/clang/include/clang/AST/DeclCXX.h<br>
+++ b/clang/include/clang/AST/DeclCXX.h<br>
@@ -3041,9 +3041,7 @@ class NamespaceAliasDecl : public NamedDecl,<br>
<br>
 /// Implicit declaration of a temporary that was materialized by<br>
 /// a MaterializeTemporaryExpr and lifetime-extended by a declaration<br>
-class LifetimeExtendedTemporaryDecl final<br>
-    : public Decl,<br>
-      public Mergeable<LifetimeExtendedTemporaryDecl> {<br>
+class LifetimeExtendedTemporaryDecl final : public Decl {<br>
   friend class MaterializeTemporaryExpr;<br>
   friend class ASTDeclReader;<br>
<br>
<br>
diff  --git a/clang/include/clang/AST/TextNodeDumper.h b/clang/include/clang/AST/TextNodeDumper.h<br>
index d293ea190aa4..0ff5a614a864 100644<br>
--- a/clang/include/clang/AST/TextNodeDumper.h<br>
+++ b/clang/include/clang/AST/TextNodeDumper.h<br>
@@ -346,8 +346,6 @@ class TextNodeDumper<br>
   void VisitObjCPropertyImplDecl(const ObjCPropertyImplDecl *D);<br>
   void VisitBlockDecl(const BlockDecl *D);<br>
   void VisitConceptDecl(const ConceptDecl *D);<br>
-  void<br>
-  VisitLifetimeExtendedTemporaryDecl(const LifetimeExtendedTemporaryDecl *D);<br>
 };<br>
<br>
 } // namespace clang<br>
<br>
diff  --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h<br>
index b6dae68b3413..f0b5e9933823 100644<br>
--- a/clang/include/clang/Serialization/ASTReader.h<br>
+++ b/clang/include/clang/Serialization/ASTReader.h<br>
@@ -551,14 +551,6 @@ class ASTReader<br>
   llvm::DenseMap<Decl*, llvm::SmallVector<NamedDecl*, 2>><br>
     AnonymousDeclarationsForMerging;<br>
<br>
-  /// Key used to identify LifetimeExtendedTemporaryDecl for merging,<br>
-  /// containing the lifetime-extending declaration and the mangling number.<br>
-  using LETemporaryKey = std::pair<Decl *, unsigned>;<br>
-<br>
-  /// Map of already deserialiazed temporaries.<br>
-  llvm::DenseMap<LETemporaryKey, LifetimeExtendedTemporaryDecl *><br>
-      LETemporaryForMerging;<br>
-<br>
   struct FileDeclsInfo {<br>
     ModuleFile *Mod = nullptr;<br>
     ArrayRef<serialization::LocalDeclID> Decls;<br>
<br>
diff  --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp<br>
index 561c76a45cbc..0ff95213118f 100644<br>
--- a/clang/lib/AST/TextNodeDumper.cpp<br>
+++ b/clang/lib/AST/TextNodeDumper.cpp<br>
@@ -1338,17 +1338,6 @@ void TextNodeDumper::VisitFunctionDecl(const FunctionDecl *D) {<br>
     OS << " <<<NULL params x " << D->getNumParams() << ">>>";<br>
 }<br>
<br>
-void TextNodeDumper::VisitLifetimeExtendedTemporaryDecl(<br>
-    const LifetimeExtendedTemporaryDecl *D) {<br>
-  OS << " extended by ";<br>
-  dumpBareDeclRef(D->getExtendingDecl());<br>
-  OS << " mangling ";<br>
-  {<br>
-    ColorScope Color(OS, ShowColors, ValueColor);<br>
-    OS << D->getManglingNumber();<br>
-  }<br>
-}<br>
-<br>
 void TextNodeDumper::VisitFieldDecl(const FieldDecl *D) {<br>
   dumpName(D);<br>
   dumpType(D->getType());<br>
<br>
diff  --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp<br>
index d6c57757cf8c..8991a39a7067 100644<br>
--- a/clang/lib/Serialization/ASTReaderDecl.cpp<br>
+++ b/clang/lib/Serialization/ASTReaderDecl.cpp<br>
@@ -424,9 +424,6 @@ namespace clang {<br>
     template<typename T><br>
     void mergeMergeable(Mergeable<T> *D);<br>
<br>
-    template <><br>
-    void mergeMergeable(Mergeable<LifetimeExtendedTemporaryDecl> *D);<br>
-<br>
     void mergeTemplatePattern(RedeclarableTemplateDecl *D,<br>
                               RedeclarableTemplateDecl *Existing,<br>
                               DeclID DsID, bool IsKeyDecl);<br>
@@ -2361,7 +2358,6 @@ void ASTDeclReader::VisitLifetimeExtendedTemporaryDecl(<br>
   if (Record.readInt())<br>
     D->Value = new (D->getASTContext()) APValue(Record.readAPValue());<br>
   D->ManglingNumber = Record.readInt();<br>
-  mergeMergeable(D);<br>
 }<br>
<br>
 std::pair<uint64_t, uint64_t><br>
@@ -2559,28 +2555,6 @@ static bool allowODRLikeMergeInC(NamedDecl *ND) {<br>
   return false;<br>
 }<br>
<br>
-/// Attempts to merge LifetimeExtendedTemporaryDecl with<br>
-/// identical class definitions from two <br>
diff erent modules.<br>
-template<><br>
-void ASTDeclReader::mergeMergeable(<br>
-    Mergeable<LifetimeExtendedTemporaryDecl> *D) {<br>
-  // If modules are not available, there is no reason to perform this merge.<br>
-  if (!Reader.getContext().getLangOpts().Modules)<br>
-    return;<br>
-<br>
-  LifetimeExtendedTemporaryDecl *LETDecl =<br>
-      static_cast<LifetimeExtendedTemporaryDecl *>(D);<br>
-<br>
-  LifetimeExtendedTemporaryDecl *&LookupResult =<br>
-      Reader.LETemporaryForMerging[std::make_pair(<br>
-          LETDecl->getExtendingDecl(), LETDecl->getManglingNumber())];<br>
-  if (LookupResult)<br>
-    Reader.getContext().setPrimaryMergedDecl(LETDecl,<br>
-                                             LookupResult->getCanonicalDecl());<br>
-  else<br>
-    LookupResult = LETDecl;<br>
-}<br>
-<br>
 /// Attempts to merge the given declaration (D) with another declaration<br>
 /// of the same entity, for the case where the entity is not actually<br>
 /// redeclarable. This happens, for instance, when merging the fields of<br>
<br>
diff  --git a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/a.h b/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/a.h<br>
deleted file mode 100644<br>
index 8adab29eafc7..000000000000<br>
--- a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/a.h<br>
+++ /dev/null<br>
@@ -1,2 +0,0 @@<br>
-<br>
-constexpr const int& LETemp = 0;<br>
<br>
diff  --git a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/b.h b/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/b.h<br>
deleted file mode 100644<br>
index 2bd1b096d607..000000000000<br>
--- a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/b.h<br>
+++ /dev/null<br>
@@ -1,4 +0,0 @@<br>
-<br>
-#include "a.h"<br>
-<br>
-constexpr const int* PtrTemp1 = &LETemp;<br>
<br>
diff  --git a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/c.h b/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/c.h<br>
deleted file mode 100644<br>
index b023eebca49c..000000000000<br>
--- a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/c.h<br>
+++ /dev/null<br>
@@ -1,4 +0,0 @@<br>
-<br>
-#include "a.h"<br>
-<br>
-constexpr const int* PtrTemp2 = &LETemp;<br>
<br>
diff  --git a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/module.modulemap b/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/module.modulemap<br>
deleted file mode 100644<br>
index 1339d627a44a..000000000000<br>
--- a/clang/test/Modules/Inputs/merge-lifetime-extended-temporary/module.modulemap<br>
+++ /dev/null<br>
@@ -1,14 +0,0 @@<br>
-module "a" {<br>
-  export *<br>
-  header "a.h"<br>
-}<br>
-<br>
-module "b" {<br>
-  export *<br>
-  header "b.h"<br>
-}<br>
-<br>
-module "c" {<br>
-  export *<br>
-  header "c.h"<br>
-}<br>
<br>
diff  --git a/clang/test/Modules/merge-lifetime-extended-temporary.cpp b/clang/test/Modules/merge-lifetime-extended-temporary.cpp<br>
deleted file mode 100644<br>
index 36db948b2c4e..000000000000<br>
--- a/clang/test/Modules/merge-lifetime-extended-temporary.cpp<br>
+++ /dev/null<br>
@@ -1,14 +0,0 @@<br>
-// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -x c++ -I%S/Inputs/merge-lifetime-extended-temporary -verify -std=c++11 %s -DORDER=1<br>
-// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -x c++ -I%S/Inputs/merge-lifetime-extended-temporary -verify -std=c++11 %s -DORDER=2<br>
-<br>
-// expected-no-diagnostics<br>
-#if ORDER == 1<br>
-#include "c.h"<br>
-#include "b.h"<br>
-#else<br>
-#include "b.h"<br>
-#include "c.h"<br>
-#endif<br>
-<br>
-static_assert(PtrTemp1 == &LETemp, "");<br>
-static_assert(PtrTemp1 == PtrTemp2, "");<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>