From: Chris Lattner Date: Thu, 19 Feb 2004 18:32:29 +0000 (+0000) Subject: Fix an iterator invalidation problem. :( X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a96478d7d6b2aee1aecad4af23506167ec16752c;p=oota-llvm.git Fix an iterator invalidation problem. :( git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11627 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/LiveVariables.cpp b/lib/CodeGen/LiveVariables.cpp index c4c8d639292..361b5038a2b 100644 --- a/lib/CodeGen/LiveVariables.cpp +++ b/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])); }