Fix a subtle use-after-free issue.

llvm-svn: 110863
This commit is contained in:
Owen Anderson 2010-08-11 22:36:04 +00:00
parent d385c22cf3
commit 7b974a45db
1 changed files with 4 additions and 1 deletions

View File

@ -384,7 +384,6 @@ namespace {
} // end anonymous namespace
void LazyValueInfoCache::LVIValueHandle::deleted() {
Parent->ValueCache.erase(*this);
for (std::set<std::pair<BasicBlock*, Value*> >::iterator
I = Parent->OverDefinedCache.begin(),
E = Parent->OverDefinedCache.end();
@ -394,6 +393,10 @@ void LazyValueInfoCache::LVIValueHandle::deleted() {
if (tmp->second == getValPtr())
Parent->OverDefinedCache.erase(tmp);
}
// This erasure deallocates *this, so it MUST happen after we're done
// using any and all members of *this.
Parent->ValueCache.erase(*this);
}