From 4c988391e1de99755a5d872a501b69f2fbbe964c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 19 Feb 2004 18:32:29 +0000 Subject: Fix an iterator invalidation problem. :( llvm-svn: 11627 --- llvm/lib/CodeGen/LiveVariables.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen/LiveVariables.cpp') diff --git a/llvm/lib/CodeGen/LiveVariables.cpp b/llvm/lib/CodeGen/LiveVariables.cpp index c4c8d639292..361b5038a2b 100644 --- a/llvm/lib/CodeGen/LiveVariables.cpp +++ b/llvm/lib/CodeGen/LiveVariables.cpp @@ -337,13 +337,22 @@ void LiveVariables::instructionChanged(MachineInstr *OldMI, // Move the killed information over... killed_iterator I, E; tie(I, E) = killed_range(OldMI); + std::vector Regs; for (killed_iterator A = I; A != E; ++A) - RegistersKilled.insert(std::make_pair(NewMI, A->second)); + Regs.push_back(A->second); RegistersKilled.erase(I, E); + for (unsigned i = 0, e = Regs.size(); i != e; ++i) + RegistersKilled.insert(std::make_pair(NewMI, Regs[i])); + Regs.clear(); + + // Move the dead information over... tie(I, E) = dead_range(OldMI); for (killed_iterator A = I; A != E; ++A) - RegistersDead.insert(std::make_pair(NewMI, A->second)); + Regs.push_back(A->second); RegistersDead.erase(I, E); + + for (unsigned i = 0, e = Regs.size(); i != e; ++i) + RegistersDead.insert(std::make_pair(NewMI, Regs[i])); } -- cgit v1.2.3