From 4514969e46525c47c722d43128e70d4382bee17c Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Tue, 22 Aug 2017 16:28:07 +0000 Subject: [PATCH] [Debug info] Add new DbgValues after looping over DAG I was contacted by Jesper Antonsson from Ericsson who ran into problems with r311181 in their test suites with for an out-of-tree target. Because of the latter I don't have a reproducer, but we definitely don't want to modify the data structure on which we are iterating inside the loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@311466 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/LegalizeTypes.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp index 7bef90d01a0..9321a956fbd 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp @@ -834,6 +834,7 @@ static void transferDbgValues(SelectionDAG &DAG, DIBuilder &DIB, SDValue From, SDNode *ToNode = To.getNode(); assert(FromNode != ToNode); + SmallVector ClonedDVs; for (SDDbgValue *Dbg : DAG.GetDbgValues(FromNode)) { if (Dbg->getKind() != SDDbgValue::SDNODE) break; @@ -846,12 +847,15 @@ static void transferDbgValues(SelectionDAG &DAG, DIBuilder &DIB, SDValue From, DAG.getDbgValue(Var, Fragment, ToNode, To.getResNo(), Dbg->isIndirect(), Dbg->getDebugLoc(), Dbg->getOrder()); Dbg->setIsInvalidated(); - DAG.AddDbgValue(Clone, ToNode, false); + ClonedDVs.push_back(Clone); // Add the expression to the metadata graph so isn't lost in MIR dumps. const Module *M = DAG.getMachineFunction().getMMI().getModule(); M->getNamedMetadata("llvm.dbg.mir")->addOperand(Fragment); } + + for (SDDbgValue *Dbg : ClonedDVs) + DAG.AddDbgValue(Dbg, ToNode, false); } void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo, -- 2.50.1