[LLVMdev] Memory leak?

Rafael Espindola espindola at google.com
Sat Jun 12 05:37:22 PDT 2010


On 12 June 2010 01:10, Neal  N. Wang <neal.wang at gmail.com> wrote:
> Hi folk,
>
> I get the following stack trace and do have any clue how to fix the problem.
>
> 0  opt               0x087ecc99
> 1  opt               0x087ed265
> 2                    0xb7f6a400 __kernel_sigreturn + 0
> 3  opt               0x086d4198
> llvm::LeakDetector::addGarbageObject(llvm::Value const*) + 29
> 4  opt               0x0872945f llvm::Instruction::Instruction(llvm::Type
> const*, unsigned int, llvm::Use*, unsigned int, llvm::Instruction*) + 109
> 5  opt               0x083d208b
> llvm::UnaryInstruction::UnaryInstruction(llvm::Type const*, unsigned int,
> llvm::Value*, llvm::Instruction*) + 75
> 6  opt               0x0873e46b llvm::CastInst::CastInst(llvm::Type const*,
> unsigned int, llvm::Value*, llvm::Twine const&, llvm::Instruction*) + 57
> 7  opt               0x0873124d llvm::BitCastInst::BitCastInst(llvm::Value*,
> llvm::Type const*, llvm::Twine const&, llvm::Instruction*) + 65
>
>
>
> I insert extra two instructions to a byte code, the corresponding code is
> quite simple:
> LoadInst* ptrVal = new LoadInst(ptr, "foobar", false, next);
> CastInst* ptrCast = new BitCastInst(ptrVal, charPtrType, "cast1", next);
>
> If I comment out the CastInst statement, it runs fine. Any hint what is
> wrong?


I have seen cases like this caused by a failure to destroy a pool
allocated object. Very small changes to the input cause the addresses
to change and it "works". What version of llvm are you using? If it is
current (svn), I think you will have to hunt the bug down with gdb.
Look for the same address being added as garbage twice for example.

> Thanks,
> Neal
>


Cheers,
-- 
Rafael Ávila de Espíndola




More information about the llvm-dev mailing list