[PATCH] D50947: make PendingFakeDefinitionData a set, not map of decl data -> enum

Steve O'Brien via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Aug 19 13:36:16 PDT 2018


elsteveogrande created this revision.
Herald added a subscriber: cfe-commits.

Of the three enums, only two are used (Fake and FakeLoaded), and even when switching the mapped value to FakeLoaded, it's leading to an unexpected state anyway (i.e. there's no check for only Fake's in the map).  Discard the enum, make this a simple set to test for membership / emptiness.

Test Plan: `ninja check-clang-modules`


Repository:
  rC Clang

https://reviews.llvm.org/D50947

Files:
  include/clang/Serialization/ASTReader.h
  lib/Serialization/ASTReaderDecl.cpp


Index: lib/Serialization/ASTReaderDecl.cpp
===================================================================
--- lib/Serialization/ASTReaderDecl.cpp
+++ lib/Serialization/ASTReaderDecl.cpp
@@ -1757,12 +1757,14 @@
   }
 
   auto PFDI = Reader.PendingFakeDefinitionData.find(&DD);
-  if (PFDI != Reader.PendingFakeDefinitionData.end() &&
-      PFDI->second == ASTReader::PendingFakeDefinitionKind::Fake) {
+  if (PFDI != Reader.PendingFakeDefinitionData.end()) {
     // We faked up this definition data because we found a class for which we'd
     // not yet loaded the definition. Replace it with the real thing now.
+
+    Reader.PendingFakeDefinitionData.erase(PFDI);
+
+    // FIXME: handle serialized lambdas
     assert(!DD.IsLambda && !MergeDD.IsLambda && "faked up lambda definition?");
-    PFDI->second = ASTReader::PendingFakeDefinitionKind::FakeLoaded;
 
     // Don't change which declaration is the definition; that is required
     // to be invariant once we select it.
@@ -3077,8 +3079,7 @@
       RD->getCanonicalDecl()->DefinitionData = DD;
 
       // Track that we did this horrible thing so that we can fix it later.
-      Reader.PendingFakeDefinitionData.insert(
-          std::make_pair(DD, ASTReader::PendingFakeDefinitionKind::Fake));
+      Reader.PendingFakeDefinitionData.insert(DD);
     }
 
     return DD->Definition;
Index: include/clang/Serialization/ASTReader.h
===================================================================
--- include/clang/Serialization/ASTReader.h
+++ include/clang/Serialization/ASTReader.h
@@ -527,11 +527,9 @@
   /// to apply once we finish processing an import.
   llvm::SmallVector<PendingUpdateRecord, 16> PendingUpdateRecords;
 
-  enum class PendingFakeDefinitionKind { NotFake, Fake, FakeLoaded };
-
   /// The DefinitionData pointers that we faked up for class definitions
   /// that we needed but hadn't loaded yet.
-  llvm::DenseMap<void *, PendingFakeDefinitionKind> PendingFakeDefinitionData;
+  llvm::DenseSet<void *> PendingFakeDefinitionData;
 
   /// Exception specification updates that have been loaded but not yet
   /// propagated across the relevant redeclaration chain. The map key is the


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50947.161404.patch
Type: text/x-patch
Size: 2178 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180819/65becae0/attachment.bin>


More information about the cfe-commits mailing list