]> granicus.if.org Git - clang/commitdiff
[Coverage] Always emit unused coverage mappings in the same order.
authorEli Friedman <efriedma@codeaurora.org>
Wed, 13 Dec 2017 00:14:17 +0000 (00:14 +0000)
committerEli Friedman <efriedma@codeaurora.org>
Wed, 13 Dec 2017 00:14:17 +0000 (00:14 +0000)
Non-determinism is confusing at best.

Differential Revision: https://reviews.llvm.org/D41140

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@320533 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenModule.cpp
lib/CodeGen/CodeGenModule.h

index 7f64fd062dcb07f8b38e550919f4521fe410f990..421a1ad3d0dcd313a2bceb0888c19cf398254d8c 100644 (file)
@@ -4286,20 +4286,10 @@ void CodeGenModule::ClearUnusedCoverageMapping(const Decl *D) {
 }
 
 void CodeGenModule::EmitDeferredUnusedCoverageMappings() {
-  std::vector<const Decl *> DeferredDecls;
-  for (const auto &I : DeferredEmptyCoverageMappingDecls) {
-    if (!I.second)
+  for (const auto &Entry : DeferredEmptyCoverageMappingDecls) {
+    if (!Entry.second)
       continue;
-    DeferredDecls.push_back(I.first);
-  }
-  // Sort the declarations by their location to make sure that the tests get a
-  // predictable order for the coverage mapping for the unused declarations.
-  if (CodeGenOpts.DumpCoverageMapping)
-    std::sort(DeferredDecls.begin(), DeferredDecls.end(),
-              [] (const Decl *LHS, const Decl *RHS) {
-      return LHS->getLocStart() < RHS->getLocStart();
-    });
-  for (const auto *D : DeferredDecls) {
+    const Decl *D = Entry.first;
     switch (D->getKind()) {
     case Decl::CXXConversion:
     case Decl::CXXMethod:
index 8b142933a7d171b6adb65d379bc4f899cb6e84d5..22c4463b2c810c4726431b160be664f97e82bde4 100644 (file)
@@ -490,7 +490,7 @@ private:
 
   /// @}
 
-  llvm::DenseMap<const Decl *, bool> DeferredEmptyCoverageMappingDecls;
+  llvm::MapVector<const Decl *, bool> DeferredEmptyCoverageMappingDecls;
 
   std::unique_ptr<CoverageMappingModuleGen> CoverageMapping;