aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2016-05-11 20:46:22 +0000
committerTeresa Johnson <tejohnson@google.com>2016-05-11 20:46:22 +0000
commite518c800f6ec46ad25aade3f964718dbb7c2ec50 (patch)
tree5e1da2e114025b985048dc5aaed50d1042e3b753 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
parentc2bebe9acab26b5af209f11b3ee978966feab491 (diff)
downloadllvm-e518c800f6ec46ad25aade3f964718dbb7c2ec50.zip
llvm-e518c800f6ec46ad25aade3f964718dbb7c2ec50.tar.gz
llvm-e518c800f6ec46ad25aade3f964718dbb7c2ec50.tar.bz2
[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. llvm-svn: 269232
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r--llvm/lib/Bitcode/Writer/BitcodeWriter.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
index 64d3bd9..e69fbe6 100644
--- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
+++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
@@ -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;
}
};