diff --git a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp index 03e2e7089202d..d478088e5bbcb 100644 --- a/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp +++ b/llvm/lib/Transforms/IPO/MemProfContextDisambiguation.cpp @@ -1057,6 +1057,7 @@ template void CallsiteContextGraph::removeEdgeFromGraph( ContextEdge *Edge, EdgeIter *EI, bool CalleeIter) { assert(!EI || (*EI)->get() == Edge); + assert(!Edge->isRemoved()); // Save the Caller and Callee pointers so we can erase Edge from their edge // lists after clearing Edge below. We do the clearing first in case it is // destructed after removing from the edge lists (if those were the last @@ -1069,6 +1070,10 @@ void CallsiteContextGraph::removeEdgeFromGraph( // reference. Edge->clear(); +#ifndef NDEBUG + auto CalleeCallerCount = Callee->CallerEdges.size(); + auto CallerCalleeCount = Caller->CalleeEdges.size(); +#endif if (!EI) { Callee->eraseCallerEdge(Edge); Caller->eraseCalleeEdge(Edge); @@ -1079,6 +1084,8 @@ void CallsiteContextGraph::removeEdgeFromGraph( Caller->eraseCalleeEdge(Edge); *EI = Callee->CallerEdges.erase(*EI); } + assert(Callee->CallerEdges.size() < CalleeCallerCount); + assert(Caller->CalleeEdges.size() < CallerCalleeCount); } template