Oops, r98447 dropped the reference to ForwardType in the wrong place in

Type::destroy(), so it got skipped for FunctionTypes, StructTypes, and
UnionTypes.  This fixes the resulting leaks in test/Feature/opaquetypes.ll and
test/Integer/opaquetypes_bt.ll.

llvm-svn: 99732
This commit is contained in:
Jeffrey Yasskin 2010-03-28 01:03:47 +00:00
parent 70189ff5ab
commit 727548a580

View File

@ -57,6 +57,11 @@ void AbstractTypeUser::setType(Value *V, const Type *NewTy) {
/// need for a std::vector to be used in the Type class itself.
/// @brief Type destruction function
void Type::destroy() const {
// Nothing calls getForwardedType from here on.
if (ForwardType && ForwardType->isAbstract()) {
ForwardType->dropRef();
ForwardType = NULL;
}
// Structures and Functions allocate their contained types past the end of
// the type object itself. These need to be destroyed differently than the
@ -87,11 +92,6 @@ void Type::destroy() const {
pImpl->OpaqueTypes.erase(opaque_this);
}
if (ForwardType && ForwardType->isAbstract()) {
ForwardType->dropRef();
ForwardType = NULL;
}
// For all the other type subclasses, there is either no contained types or
// just one (all Sequentials). For Sequentials, the PATypeHandle is not
// allocated past the type object, its included directly in the SequentialType