From 7de61668aedf4ac986a303a34aba98a452c6abef Mon Sep 17 00:00:00 2001 From: Michael Kruse Date: Mon, 9 Apr 2018 23:13:01 +0000 Subject: [PATCH] [ScopInfo] Actually remove from list. std::remove, despite its name, does not remove elements from a list, but only moves them to the end of a list. Call erase() to shorten the vector to the remaining elements. Test case included in next commit. llvm-svn: 329639 --- polly/lib/Analysis/ScopInfo.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 8ffd6a3..81edb82 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -4856,13 +4856,15 @@ void Scop::removeAccessData(MemoryAccess *Access) { ValueDefAccs.erase(Access->getAccessValue()); } else if (Access->isOriginalValueKind() && Access->isRead()) { auto &Uses = ValueUseAccs[Access->getScopArrayInfo()]; - std::remove(Uses.begin(), Uses.end(), Access); + auto NewEnd = std::remove(Uses.begin(), Uses.end(), Access); + Uses.erase(NewEnd, Uses.end()); } else if (Access->isOriginalPHIKind() && Access->isRead()) { PHINode *PHI = cast(Access->getAccessInstruction()); PHIReadAccs.erase(PHI); } else if (Access->isOriginalAnyPHIKind() && Access->isWrite()) { auto &Incomings = PHIIncomingAccs[Access->getScopArrayInfo()]; - std::remove(Incomings.begin(), Incomings.end(), Access); + auto NewEnd = std::remove(Incomings.begin(), Incomings.end(), Access); + Incomings.erase(NewEnd, Incomings.end()); } } -- 2.7.4