when the bitcode reader is referencing a paramattr, make sure to bump its refcount.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-03-12 02:25:52 +00:00
parent 0cec956d81
commit 461edd937e

View File

@ -31,6 +31,11 @@ void BitcodeReader::FreeState() {
Buffer = 0; Buffer = 0;
std::vector<PATypeHolder>().swap(TypeList); std::vector<PATypeHolder>().swap(TypeList);
ValueList.clear(); ValueList.clear();
// Drop references to ParamAttrs.
for (unsigned i = 0, e = ParamAttrs.size(); i != e; ++i)
ParamAttrs[i]->dropRef();
std::vector<const ParamAttrsList*>().swap(ParamAttrs); std::vector<const ParamAttrsList*>().swap(ParamAttrs);
std::vector<BasicBlock*>().swap(FunctionBBs); std::vector<BasicBlock*>().swap(FunctionBBs);
std::vector<Function*>().swap(FunctionsWithBodies); std::vector<Function*>().swap(FunctionsWithBodies);
@ -237,7 +242,13 @@ bool BitcodeReader::ParseParamAttrBlock() {
if (Record[i+1] != ParamAttr::None) if (Record[i+1] != ParamAttr::None)
Attrs.push_back(ParamAttrsWithIndex::get(Record[i], Record[i+1])); Attrs.push_back(ParamAttrsWithIndex::get(Record[i], Record[i+1]));
} }
ParamAttrs.push_back(Attrs.empty() ? NULL : ParamAttrsList::get(Attrs)); if (Attrs.empty()) {
ParamAttrs.push_back(0);
} else {
ParamAttrs.push_back(ParamAttrsList::get(Attrs));
ParamAttrs.back()->addRef();
}
Attrs.clear(); Attrs.clear();
break; break;
} }