[LLVMbugs] [Bug 1754] New: Bunch of small memory leaks in LLVM

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Mon Oct 29 10:36:48 PDT 2007


http://llvm.org/bugs/show_bug.cgi?id=1754

           Summary: Bunch of small memory leaks in LLVM
           Product: new-bugs
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: asl at math.spbu.ru
                CC: llvmbugs at cs.uiuc.edu


Created an attachment (id=1175)
 --> (http://llvm.org/bugs/attachment.cgi?id=1175)
Test bytecode

Consider attached bytecode (this is just sim from testsuite).

Running llc sim.bc under valgrind results:

==1613== Memcheck, a memory error detector.
==1613== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==1613== Using LibVEX rev 1732, a library for dynamic binary translation.
==1613== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==1613== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
==1613== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==1613== For more details, rerun with: -v
==1613== 
==1613== 
==1613== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 9 from 1)
==1613== malloc/free: in use at exit: 34,574 bytes in 551 blocks.
==1613== malloc/free: 285,401 allocs, 284,850 frees, 44,914,462 bytes
allocated.
==1613== For counts of detected errors, rerun with: -v
==1613== searching for pointers to 551 not-freed blocks.
==1613== checked 194,680 bytes.
==1613== 
==1613== 8 bytes in 1 blocks are definitely lost in loss record 2 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x84779E1: main (llc.cpp:249)
==1613== 
==1613== 
==1613== 18 bytes in 1 blocks are possibly lost in loss record 4 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x410901B: std::string::_Rep::_S_create(unsigned, unsigned,
std::allocator<char> const&) (in
/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3)
==1613==    by 0x41090AD: std::string::_Rep::_M_clone(std::allocator<char>
const&, unsigned) (in /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3)
==1613==    by 0x4109664: std::string::reserve(unsigned) (in
/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3)
==1613==    by 0x4109E22: std::string::append(char const*, unsigned) (in
/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3)
==1613==    by 0x4109EE4: std::string::operator+=(char const*) (in
/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6.0.3)
==1613==    by 0x8476F4E: GetOutputStream(char const*) (llc.cpp:138)
==1613==    by 0x847773A: main (llc.cpp:226)
==1613== 
==1613== 
==1613== 28 bytes in 1 blocks are definitely lost in loss record 6 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x88F7636: llvm::ConstantCreator<llvm::ConstantAggregateZero,
llvm::Type, char>::create(llvm::Type const*, char const&) (Constants.cpp:1007)
==1613==    by 0x88F32D9: llvm::ValueMap<char, llvm::Type,
llvm::ConstantAggregateZero, false>::getOrCreate(llvm::Type const*, char
const&) (Constants.cpp:859)
==1613==    by 0x88EE9D8: llvm::ConstantAggregateZero::get(llvm::Type const*)
(Constants.cpp:1031)
==1613==    by 0x88EBBEE: llvm::Constant::getNullValue(llvm::Type const*)
(Constants.cpp:125)
==1613==    by 0x86C9B42: llvm::BitcodeReader::ParseConstants()
(BitcodeReader.cpp:605)
==1613==    by 0x86CBCD6: llvm::BitcodeReader::ParseModule(std::string const&)
(BitcodeReader.cpp:910)
==1613==    by 0x86CD0E3: llvm::BitcodeReader::ParseBitcode()
(BitcodeReader.cpp:1122)
==1613==    by 0x86D0899: llvm::getBitcodeModuleProvider(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1688)
==1613==    by 0x86D0911: llvm::ParseBitcodeFile(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1704)
==1613==    by 0x84773A7: main (llc.cpp:186)
==1613== 
==1613== 
==1613== 52 bytes in 1 blocks are definitely lost in loss record 24 of 43
==1613==    at 0x4022274: operator new[](unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x8949855: llvm::StructType::get(std::vector<llvm::Type const*,
std::allocator<llvm::Type const*> > const&, bool) (Type.cpp:1271)
==1613==    by 0x87F4540: getGlobalVariablesUsing(llvm::Module&, std::string
const&) (MachineModuleInfo.cpp:65)
==1613==    by 0x87F8B6B:
llvm::MachineModuleInfo::getGlobalVariablesUsing(llvm::Module&, std::string
const&) (MachineModuleInfo.cpp:1578)
==1613==    by 0x87FAF54: std::vector<llvm::CompileUnitDesc*,
std::allocator<llvm::CompileUnitDesc*> >
llvm::MachineModuleInfo::getAnchoredDescriptors<llvm::CompileUnitDesc>(llvm::Module&)
(MachineModuleInfo.h:1163)
==1613==    by 0x87F8ACC:
llvm::MachineModuleInfo::SetupCompileUnits(llvm::Module&)
(MachineModuleInfo.cpp:1560)
==1613==    by 0x87F8A77: llvm::MachineModuleInfo::AnalyzeModule(llvm::Module&)
(MachineModuleInfo.cpp:1548)
==1613==    by 0x879B110: llvm::AsmPrinter::doInitialization(llvm::Module&)
(AsmPrinter.cpp:107)
==1613==    by 0x85BD584:
llvm::X86SharedAsmPrinter::doInitialization(llvm::Module&)
(X86AsmPrinter.cpp:123)
==1613==    by 0x893E652: llvm::FPPassManager::doInitialization(llvm::Module&)
(PassManager.cpp:1201)
==1613==    by 0x893E49C:
llvm::FunctionPassManagerImpl::doInitialization(llvm::Module&)
(PassManager.cpp:1098)
==1613==    by 0x893C960: llvm::FunctionPassManager::doInitialization()
(PassManager.cpp:1081)
==1613== 
==1613== 
==1613== 56 bytes in 2 blocks are definitely lost in loss record 25 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x88F8D70: llvm::ConstantCreator<llvm::UndefValue, llvm::Type,
char>::create(llvm::Type const*, char const&) (Constants.cpp:1352)
==1613==    by 0x88F50CF: llvm::ValueMap<char, llvm::Type, llvm::UndefValue,
false>::getOrCreate(llvm::Type const*, char const&) (Constants.cpp:859)
==1613==    by 0x88EF53D: llvm::UndefValue::get(llvm::Type const*)
(Constants.cpp:1376)
==1613==    by 0x86C9A0C: llvm::BitcodeReader::ParseConstants()
(BitcodeReader.cpp:595)
==1613==    by 0x86CD333:
llvm::BitcodeReader::ParseFunctionBody(llvm::Function*)
(BitcodeReader.cpp:1168)
==1613==    by 0x86D03C1:
llvm::BitcodeReader::materializeFunction(llvm::Function*, std::string*)
(BitcodeReader.cpp:1602)
==1613==    by 0x86D064C: llvm::BitcodeReader::materializeModule(std::string*)
(BitcodeReader.cpp:1640)
==1613==    by 0x86D093C: llvm::ParseBitcodeFile(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1708)
==1613==    by 0x84773A7: main (llc.cpp:186)
==1613== 
==1613== 
==1613== 424 (224 direct, 200 indirect) bytes in 8 blocks are definitely lost
in loss record 30 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x88F8A6E: llvm::ConstantCreator<llvm::ConstantPointerNull,
llvm::PointerType, char>::create(llvm::PointerType const*, char const&)
(Constants.cpp:1308)
==1613==    by 0x88F4BC8: llvm::ValueMap<char, llvm::PointerType,
llvm::ConstantPointerNull, false>::getOrCreate(llvm::PointerType const*, char
const&) (Constants.cpp:859)
==1613==    by 0x88EF4D5: llvm::ConstantPointerNull::get(llvm::PointerType
const*) (Constants.cpp:1333)
==1613==    by 0x88EBBDE: llvm::Constant::getNullValue(llvm::Type const*)
(Constants.cpp:121)
==1613==    by 0x86C9B42: llvm::BitcodeReader::ParseConstants()
(BitcodeReader.cpp:605)
==1613==    by 0x86CBCD6: llvm::BitcodeReader::ParseModule(std::string const&)
(BitcodeReader.cpp:910)
==1613==    by 0x86CD0E3: llvm::BitcodeReader::ParseBitcode()
(BitcodeReader.cpp:1122)
==1613==    by 0x86D0899: llvm::getBitcodeModuleProvider(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1688)
==1613==    by 0x86D0911: llvm::ParseBitcodeFile(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1704)
==1613==    by 0x84773A7: main (llc.cpp:186)
==1613== 
==1613== 
==1613== 352 bytes in 11 blocks are definitely lost in loss record 31 of 43
==1613==    at 0x4022274: operator new[](unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x8517154: llvm::SmallVectorImpl<unsigned>::grow(unsigned)
(SmallVector.h:330)
==1613==    by 0x8826ADD: llvm::SmallVectorImpl<unsigned>::insert(unsigned*,
unsigned const&) (SmallVector.h:242)
==1613==    by 0x8826144: llvm::LiveInterval::addKills(llvm::VNInfo*,
llvm::SmallVector<unsigned, 4> const&) (LiveInterval.h:202)
==1613==    by 0x8822D1F:
llvm::SimpleRegisterCoalescing::SimpleJoin(llvm::LiveInterval&,
llvm::LiveInterval&) (SimpleRegisterCoalescing.cpp:669)
==1613==    by 0x88231AD:
llvm::SimpleRegisterCoalescing::JoinIntervals(llvm::LiveInterval&,
llvm::LiveInterval&, bool&) (SimpleRegisterCoalescing.cpp:731)
==1613==    by 0x88220A8:
llvm::SimpleRegisterCoalescing::JoinCopy(llvm::MachineInstr*, unsigned,
unsigned) (SimpleRegisterCoalescing.cpp:371)
==1613==    by 0x8824276:
llvm::SimpleRegisterCoalescing::CopyCoalesceInMBB(llvm::MachineBasicBlock*,
std::vector<llvm::SimpleRegisterCoalescing::CopyRec,
std::allocator<llvm::SimpleRegisterCoalescing::CopyRec> >&)
(SimpleRegisterCoalescing.cpp:979)
==1613==    by 0x8824565: llvm::SimpleRegisterCoalescing::joinIntervals()
(SimpleRegisterCoalescing.cpp:1013)
==1613==    by 0x8825200:
llvm::SimpleRegisterCoalescing::runOnMachineFunction(llvm::MachineFunction&)
(SimpleRegisterCoalescing.cpp:1226)
==1613==    by 0x848951E:
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
(MachineFunctionPass.h:41)
==1613==    by 0x893CC56: llvm::FPPassManager::runOnFunction(llvm::Function&)
(PassManager.cpp:1171)
==1613== 
==1613== 
==1613== 748 bytes in 17 blocks are definitely lost in loss record 33 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x88EC72A: llvm::ConstantFP::get(llvm::Type const*,
llvm::APFloat const&) (Constants.cpp:334)
==1613==    by 0x896A033: llvm::ConstantFoldCastInstruction(unsigned,
llvm::Constant const*, llvm::Type const*) (ConstantFold.cpp:191)
==1613==    by 0x88EFDA2: getFoldedCast(llvm::Instruction::CastOps,
llvm::Constant*, llvm::Type const*) (Constants.cpp:1518)
==1613==    by 0x88F00CC: llvm::ConstantExpr::getFPTrunc(llvm::Constant*,
llvm::Type const*) (Constants.cpp:1635)
==1613==    by 0x87661D7: ExpandConstantFP(llvm::ConstantFPSDNode*, bool,
llvm::SelectionDAG&, llvm::TargetLowering&) (LegalizeDAG.cpp:507)
==1613==    by 0x8769EEA: (anonymous
namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDOperand)
(LegalizeDAG.cpp:1118)
==1613==    by 0x8765F56: (anonymous
namespace)::SelectionDAGLegalize::HandleOp(llvm::SDOperand)
(LegalizeDAG.cpp:458)
==1613==    by 0x87655E3: (anonymous
namespace)::SelectionDAGLegalize::LegalizeDAG() (LegalizeDAG.cpp:337)
==1613==    by 0x8790746: llvm::SelectionDAG::Legalize() (LegalizeDAG.cpp:6502)
==1613==    by 0x873DDB1:
llvm::SelectionDAGISel::CodeGenAndEmitDAG(llvm::SelectionDAG&)
(SelectionDAGISel.cpp:4744)
==1613==    by 0x873DF73:
llvm::SelectionDAGISel::SelectBasicBlock(llvm::BasicBlock*,
llvm::MachineFunction&, llvm::FunctionLoweringInfo&)
(SelectionDAGISel.cpp:4777)
==1613== 
==1613== 
==1613== 6,672 (2,528 direct, 4,144 indirect) bytes in 79 blocks are definitely
lost in loss record 38 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x849C164: llvm::MachineInstr::clone() const
(MachineInstr.h:395)
==1613==    by 0x884679B:
llvm::LiveIntervals::addIntervalsForSpills(llvm::LiveInterval const&,
llvm::VirtRegMap&, unsigned) (LiveIntervalAnalysis.cpp:263)
==1613==    by 0x8811926: (anonymous
namespace)::RALinScan::assignRegOrStackSlotAtInterval(llvm::LiveInterval*)
(RegAllocLinearScan.cpp:608)
==1613==    by 0x880FFCA: (anonymous namespace)::RALinScan::linearScan()
(RegAllocLinearScan.cpp:267)
==1613==    by 0x880FB79: (anonymous
namespace)::RALinScan::runOnMachineFunction(llvm::MachineFunction&)
(RegAllocLinearScan.cpp:211)
==1613==    by 0x848951E:
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
(MachineFunctionPass.h:41)
==1613==    by 0x893CC56: llvm::FPPassManager::runOnFunction(llvm::Function&)
(PassManager.cpp:1171)
==1613==    by 0x893CA15: llvm::FunctionPassManagerImpl::run(llvm::Function&)
(PassManager.cpp:1129)
==1613==    by 0x893C925: llvm::FunctionPassManager::run(llvm::Function&)
(PassManager.cpp:1074)
==1613==    by 0x8477E76: main (llc.cpp:296)
==1613== 
==1613== 
==1613== 5,840 (2,200 direct, 3,640 indirect) bytes in 50 blocks are definitely
lost in loss record 39 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x89499A8: llvm::PointerType::get(llvm::Type const*)
(Type.cpp:1323)
==1613==    by 0x86C87E0: llvm::BitcodeReader::ParseTypeTable()
(BitcodeReader.cpp:331)
==1613==    by 0x86CBC1C: llvm::BitcodeReader::ParseModule(std::string const&)
(BitcodeReader.cpp:898)
==1613==    by 0x86CD0E3: llvm::BitcodeReader::ParseBitcode()
(BitcodeReader.cpp:1122)
==1613==    by 0x86D0899: llvm::getBitcodeModuleProvider(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1688)
==1613==    by 0x86D0911: llvm::ParseBitcodeFile(llvm::MemoryBuffer*,
std::string*) (BitcodeReader.cpp:1704)
==1613==    by 0x84773A7: main (llc.cpp:186)
==1613== 
==1613== 
==1613== 18,752 (1,520 direct, 17,232 indirect) bytes in 38 blocks are
definitely lost in loss record 40 of 43
==1613==    at 0x4021D54: operator new(unsigned) (in
/usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==1613==    by 0x88EC0BC: llvm::ConstantInt::get(llvm::APInt const&)
(Constants.cpp:242)
==1613==    by 0x88EC023: llvm::ConstantInt::get(llvm::Type const*, unsigned
long long, bool) (Constants.cpp:224)
==1613==    by 0x88516DC: (anonymous
namespace)::CodeGenPrepare::OptimizeLoadStoreInst(llvm::Instruction*,
llvm::Value*, llvm::Type const*, llvm::DenseMap<llvm::Value*, llvm::Value*,
llvm::DenseMapInfo<llvm::Value*>, llvm::DenseMapInfo<llvm::Value*> >&)
(CodeGenPrepare.cpp:896)
==1613==    by 0x8851BBD: (anonymous
namespace)::CodeGenPrepare::OptimizeBlock(llvm::BasicBlock&)
(CodeGenPrepare.cpp:961)
==1613==    by 0x884E3DB: (anonymous
namespace)::CodeGenPrepare::runOnFunction(llvm::Function&)
(CodeGenPrepare.cpp:78)
==1613==    by 0x893CC56: llvm::FPPassManager::runOnFunction(llvm::Function&)
(PassManager.cpp:1171)
==1613==    by 0x893CA15: llvm::FunctionPassManagerImpl::run(llvm::Function&)
(PassManager.cpp:1129)
==1613==    by 0x893C925: llvm::FunctionPassManager::run(llvm::Function&)
(PassManager.cpp:1074)
==1613==    by 0x8477E76: main (llc.cpp:296)
==1613== 
==1613== LEAK SUMMARY:
==1613==    definitely lost: 7,716 bytes in 208 blocks.
==1613==    indirectly lost: 25,216 bytes in 284 blocks.
==1613==      possibly lost: 18 bytes in 1 blocks.
==1613==    still reachable: 1,624 bytes in 58 blocks.
==1613==         suppressed: 0 bytes in 0 blocks.
==1613== Reachable blocks (those to which a pointer was found) are not shown.
==1613== To see them, rerun with: --leak-check=full --show-reachable=yes


-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list