[llvm] r269232 - [ThinLTO] Fix Windows debug failure in new iterator

Teresa Johnson via llvm-commits llvm-commits at lists.llvm.org
Wed May 11 13:46:22 PDT 2016


Author: tejohnson
Date: Wed May 11 15:46:22 2016
New Revision: 269232

URL: http://llvm.org/viewvc/llvm-project?rev=269232&view=rev
Log:
[ThinLTO] Fix Windows debug failure in new iterator

This fixes a debug assert on Windows from the new iterator
implementation added in r269059. The Windows std::vector iterator
operator== checks in debug mode that the containers being iterated over
are the same, which they may not be.

Fixed by checking that we are iterating over the same container before
comparing the container iterators.

Modified:
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=269232&r1=269231&r2=269232&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed May 11 15:46:22 2016
@@ -333,21 +333,24 @@ public:
       // is empty. This will be handled specially in operator== as well.
       if (Writer.ModuleToSummariesForIndex &&
           !Writer.ModuleToSummariesForIndex->empty()) {
-        ModuleSummariesIter = Writer.ModuleToSummariesForIndex->begin();
         for (ModuleSummariesBack = Writer.ModuleToSummariesForIndex->begin();
              std::next(ModuleSummariesBack) !=
              Writer.ModuleToSummariesForIndex->end();
              ModuleSummariesBack++)
           ;
+        ModuleSummariesIter = !IsAtEnd
+                                  ? Writer.ModuleToSummariesForIndex->begin()
+                                  : ModuleSummariesBack;
         ModuleGVSummariesIter = !IsAtEnd ? ModuleSummariesIter->second.begin()
                                          : ModuleSummariesBack->second.end();
       } else if (!Writer.ModuleToSummariesForIndex &&
                  Writer.Index.begin() != Writer.Index.end()) {
-        IndexSummariesIter = Writer.Index.begin();
         for (IndexSummariesBack = Writer.Index.begin();
              std::next(IndexSummariesBack) != Writer.Index.end();
              IndexSummariesBack++)
           ;
+        IndexSummariesIter =
+            !IsAtEnd ? Writer.Index.begin() : IndexSummariesBack;
         IndexGVSummariesIter = !IsAtEnd ? IndexSummariesIter->second.begin()
                                         : IndexSummariesBack->second.end();
       }
@@ -398,6 +401,10 @@ public:
         // empty, they both are.
         if (Writer.ModuleToSummariesForIndex->empty())
           return true;
+        // Ensure the ModuleGVSummariesIter are iterating over the same
+        // container before checking them below.
+        if (ModuleSummariesIter != RHS.ModuleSummariesIter)
+          return false;
         return ModuleGVSummariesIter == RHS.ModuleGVSummariesIter;
       }
       // First ensure RHS also writing the full index, and that both are
@@ -409,6 +416,10 @@ public:
       // empty, they both are.
       if (Writer.Index.begin() == Writer.Index.end())
         return true;
+      // Ensure the IndexGVSummariesIter are iterating over the same
+      // container before checking them below.
+      if (IndexSummariesIter != RHS.IndexSummariesIter)
+        return false;
       return IndexGVSummariesIter == RHS.IndexGVSummariesIter;
     }
   };




More information about the llvm-commits mailing list