From e7b19035ed5cd15571f0e2233bd7128144ad4036 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 12 Mar 2008 02:25:52 +0000 Subject: when the bitcode reader is referencing a paramattr, make sure to bump its refcount. llvm-svn: 48276 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp') diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index a58ead5..c86ee30 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -31,6 +31,11 @@ void BitcodeReader::FreeState() { Buffer = 0; std::vector().swap(TypeList); ValueList.clear(); + + // Drop references to ParamAttrs. + for (unsigned i = 0, e = ParamAttrs.size(); i != e; ++i) + ParamAttrs[i]->dropRef(); + std::vector().swap(ParamAttrs); std::vector().swap(FunctionBBs); std::vector().swap(FunctionsWithBodies); @@ -237,7 +242,13 @@ bool BitcodeReader::ParseParamAttrBlock() { if (Record[i+1] != ParamAttr::None) 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(); break; } -- cgit v1.1