Skip to content
  • Torok Edwin's avatar
    Fix memory leak in liveintervals: the destructor for VNInfos must be called, · 4bbfdd41
    Torok Edwin authored
    otherwise the SmallVector it contains doesn't free its memory.
    In most cases LiveIntervalAnalysis could get away by not calling the destructor,
    because VNInfos are bumpptr-allocated, and smallvectors usually don't grow.
    However when the SmallVector does grow it always leaks.
    
    This is the valgrind shown leak from the original testcase:
    ==8206== 18,304 bytes in 151 blocks are definitely lost in loss record 164 of 164
    ==8206==    at 0x4A079C7: operator new(unsigned long) (vg_replace_malloc.c:220)
    ==8206==    by 0x4DB7A7E: llvm::SmallVectorBase::grow_pod(unsigned long, unsigned long) (in /home/edwin/clam/git/builds/defaul
    t/libclamav/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x4F90382: llvm::VNInfo::addKill(llvm::SlotIndex) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libcl
    amav.so.6.1.0)
    ==8206==    by 0x5126B5C: llvm::LiveIntervals::handleVirtualRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::M
    achineInstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int, llvm::LiveInterval&) (in /home/edwin/clam/git/builds/defau
    lt/libclamav/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x512725E: llvm::LiveIntervals::handleRegisterDef(llvm::MachineBasicBlock*, llvm::ilist_iterator<llvm::MachineI
    nstr>, llvm::SlotIndex, llvm::MachineOperand&, unsigned int) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav
    .so.6.1.0)
    ==8206==    by 0x51278A8: llvm::LiveIntervals::computeIntervals() (in /home/edwin/clam/git/builds/default/libclamav/.libs/libc
    lamav.so.6.1.0)
    ==8206==    by 0x5127CB4: llvm::LiveIntervals::runOnMachineFunction(llvm::MachineFunction&) (in /home/edwin/clam/git/builds/de
    fault/libclamav/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x4DAE935: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama
    v/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x4DAEB10: llvm::FunctionPassManagerImpl::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclama
    v/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x4DAED3D: llvm::FunctionPassManager::run(llvm::Function&) (in /home/edwin/clam/git/builds/default/libclamav/.l
    ibs/libclamav.so.6.1.0)
    ==8206==    by 0x4D8BE8E: llvm::JIT::runJITOnFunctionUnlocked(llvm::Function*, llvm::MutexGuard const&) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0)
    ==8206==    by 0x4D8CA72: llvm::JIT::getPointerToFunction(llvm::Function*) (in /home/edwin/clam/git/builds/default/libclamav/.libs/libclamav.so.6.1.0)
    
    llvm-svn: 99400
    4bbfdd41
Loading