summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/tools/dsymutil/DwarfLinker.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp
index 4231b14fbed..95f4ae4dc0d 100644
--- a/llvm/tools/dsymutil/DwarfLinker.cpp
+++ b/llvm/tools/dsymutil/DwarfLinker.cpp
@@ -2884,13 +2884,15 @@ void DwarfLinker::patchLineTableForUnit(CompileUnit &Unit,
if (StopAddress != -1ULL && !Seq.empty()) {
// Insert end sequence row with the computed end address, but
// the same line as the previous one.
+ // Do not collapse the next two statements as the push_back operation
+ // may reallocate the vector and invalidate the iterator Seq.back().
auto NextLine = Seq.back();
- NextLine.Address = StopAddress;
- NextLine.EndSequence = 1;
- NextLine.PrologueEnd = 0;
- NextLine.BasicBlock = 0;
- NextLine.EpilogueBegin = 0;
Seq.push_back(NextLine);
+ Seq.back().Address = StopAddress;
+ Seq.back().EndSequence = 1;
+ Seq.back().PrologueEnd = 0;
+ Seq.back().BasicBlock = 0;
+ Seq.back().EpilogueBegin = 0;
insertLineSequence(Seq, NewRows);
}
OpenPOWER on IntegriCloud