diff options
author | Bill Wendling <isanbard@gmail.com> | 2009-12-05 07:59:04 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2009-12-05 07:59:04 +0000 |
commit | 740266269b2df0b44a5a11cb5204d97d2dd3d0a3 (patch) | |
tree | 1ae9cbaf05ba94ae06d5f153401fa50e32661c88 /lib | |
parent | 32bc2362a156d2c3a9c8224b6a238f1a41a3c496 (diff) | |
download | external_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.cpp | 14 |
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: |