summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2009-12-05 07:59:04 +0000
committerBill Wendling <isanbard@gmail.com>2009-12-05 07:59:04 +0000
commit740266269b2df0b44a5a11cb5204d97d2dd3d0a3 (patch)
tree1ae9cbaf05ba94ae06d5f153401fa50e32661c88 /lib
parent32bc2362a156d2c3a9c8224b6a238f1a41a3c496 (diff)
downloadexternal_llvm-740266269b2df0b44a5a11cb5204d97d2dd3d0a3.zip
external_llvm-740266269b2df0b44a5a11cb5204d97d2dd3d0a3.tar.gz
external_llvm-740266269b2df0b44a5a11cb5204d97d2dd3d0a3.tar.bz2
Calling InvalidateEntry during the refinement was breaking the bootstrap.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90656 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/TargetData.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp
index 2a5b572..9434a19 100644
--- a/lib/Target/TargetData.cpp
+++ b/lib/Target/TargetData.cpp
@@ -327,7 +327,12 @@ class StructLayoutMap : public AbstractTypeUser {
///
virtual void refineAbstractType(const DerivedType *OldTy,
const Type *) {
- InvalidateEntry(cast<const StructType>(OldTy));
+ const StructType *STy = cast<const StructType>(OldTy);
+ LayoutInfoTy::iterator Iter = LayoutInfo.find(STy);
+ Iter->second->~StructLayout();
+ free(Iter->second);
+ LayoutInfo.erase(Iter);
+ OldTy->removeAbstractTypeUser(this);
}
/// typeBecameConcrete - The other case which AbstractTypeUsers must be aware
@@ -336,7 +341,12 @@ class StructLayoutMap : public AbstractTypeUser {
/// This method notifies ATU's when this occurs for a type.
///
virtual void typeBecameConcrete(const DerivedType *AbsTy) {
- InvalidateEntry(cast<const StructType>(AbsTy));
+ const StructType *STy = cast<const StructType>(AbsTy);
+ LayoutInfoTy::iterator Iter = LayoutInfo.find(STy);
+ Iter->second->~StructLayout();
+ free(Iter->second);
+ LayoutInfo.erase(Iter);
+ AbsTy->removeAbstractTypeUser(this);
}
public: