Avoid Valgrind's still-reachable leak warnings

Hi, I'm Ryo Onodera.

This is my first post to this mailing list. Fist, thanks for creating
a great library!

We're using LLVM to support JIT in Rubinius (an alternative
implementation of Ruby, a dynamic programming language).

I'm submitting a small patch for a minor issue.

It solves still-reachable leak warnings from Valgrind. Example
warnings are shown at the end of this mail.

As these warnings weren't considered problematic in the past(*1), I
know this is really minor issue. But, I want to fix it to reduce
noises when using Valgrind, not resorting to Valgrind's suppression

This patch contains no functional change. And it should cause no problem.

Since this is my first patch to LLVM, please let me know any
corrections. I'll greatly appreciate them and happily update my patch.

Also, LLVM's codebase is really clean. It took little time to make this patch.

The actual warnings are like this:

==26332== 40 bytes in 1 blocks are still reachable in loss record 5 of 10
==26332== at 0x4C2B3F8: malloc (in
==26332== by 0x165CC6C: llvm::sys::MutexImpl::MutexImpl(bool) (Mutex.cpp:49)
==26332== by 0xD41D5A:
llvm::sys::SmartMutex<true>::SmartMutex(bool) (Mutex.h:94)
==26332== by 0xD3E81F: void*
llvm::object_creator<llvm::sys::SmartMutex<true> >()
==26332== by 0x165AA95:
llvm::ManagedStaticBase::RegisterManagedStatic(void* (*)(), void
(*)(void*)) const (ManagedStatic.cpp:50)
==26332== by 0xD3C372:
llvm::ManagedStatic<llvm::sys::SmartMutex<true> >::operator*()
==26332== by 0x1605FE2:
==26332== by 0x15F1FC5:
==26332== by 0x15F2074: llvm::PassNameParser::~PassNameParser()
==26332== by 0x1604973: llvm::cl::list<llvm::PassInfo const*, bool,
llvm::PassNameParser>::~list() (in
==26332== by 0x5EE4900: __run_exit_handlers (exit.c:78)
==26332== by 0x5EE4984: exit (exit.c:100)

*1 http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/046828.html


0001-Avoid-Valgrind-s-still-reachable-leak-warnings.patch (3.52 KB)