[llvm-dev] Heap problems with 3.8.0rc2 in combination with vs2015 sp1

koffie drinker via llvm-dev llvm-dev at lists.llvm.org
Wed Feb 24 00:10:53 PST 2016

I recently upgraded from llvm 3.7.1 to a pre release of llvm (3.8.0rc2) in
order to test some issues regarding bug 24233.
After upgrading I starting to see heap corruption messages in vs 2015 sp1
when my program exits.
"HEAP[ConsoleEngine.exe]: Invalid address specified to RtlValidateHeap(
0000000000290000, 0000000000318698 )"

Initially I only got it in Release build. Debug build seems to be fine, but
recently I also got them in Debug build.
I traced it down how to trigger it in Debug Mode. It happens when I put the
ExecutionEngine creation in the constructor in the cpp file.
If I put it in the h file then there's no problem. This leads me to believe
that it is probably not my code that is causing it since I never seem to
this issue in the past (3.6.x - 3.7.x). I've include the stack traces below
this email.

It fails when the dtor is called for the first module. MCJIT only has 2
modules, the first one only has function declarations. The second one is
empty. No codegen is taking place.

I googled for the error message and it seems to be happen when you delete a
resource twice.
Did something change for 3.8.0 regarding to function decl. creation in a
module? Any tips on how to trace it down further? I can't seem to make a
small example demonstration the problem. It only seems to be triggered in a
larger project (again: nearly code works fine in 3.6.x-3.7.x)

-- Release mode stack trace
  ntdll.dll!RtlReportCriticalFailure() Unknown
  ntdll.dll!RtlpReportHeapFailure() Unknown
  ntdll.dll!RtlpHeapHandleError() Unknown
  ntdll.dll!RtlpLogHeapFailure() Unknown
  ntdll.dll!string "Enabling heap debug options\n"() Unknown
  ucrtbase.dll!free() Unknown
  ConsoleEngine.exe!llvm::Function::`vector deleting destructor'(unsigned
int) C++
  ConsoleEngine.exe!llvm::Module::~Module(void) C++
llvm::SmallPtrSet<class llvm::Module *,4> &) C++
  ConsoleEngine.exe!llvm::MCJIT::~MCJIT(void) C++
  ConsoleEngine.exe!llvm::MCJIT::`vector deleting destructor'(unsigned int)

-- Debug Mode stack trace
ntdll.dll!RtlpBreakPointHeap() Unknown
  ntdll.dll!string "Enabling heap debug options\n"() Unknown
  ntdll.dll!RtlValidateHeap() Unknown
  KernelBase.dll!HeapValidate() Unknown
  ucrtbased.dll!_CrtIsValidHeapPointer() Unknown
  ucrtbased.dll!_calloc_base() Unknown
  ucrtbased.dll!_free_dbg() Unknown
  ConsoleEngine.exe!operator delete(void * block) Line 21 C++
ConsoleEngine.exe!llvm::User::operator delete(void * Usr) Line 195 C++
  ConsoleEngine.exe!llvm::Function::`scalar deleting destructor'(unsigned
int) C++
* V) Line 160 C++
>::erase(llvm::ilist_iterator<llvm::Function> where) Line 519 C++
>::erase(llvm::ilist_iterator<llvm::Function> first,
llvm::ilist_iterator<llvm::Function> last) Line 601 C++
>::clear() Line 605 C++
  ConsoleEngine.exe!llvm::Module::~Module() Line 61 C++
  ConsoleEngine.exe!llvm::Module::`scalar deleting destructor'(unsigned int)
*,4> & MPS) Line 175 C++
Line 82 C++
  ConsoleEngine.exe!llvm::MCJIT::~MCJIT() Line 102 C++
  ConsoleEngine.exe!llvm::MCJIT::`scalar deleting destructor'(unsigned int)
* _Ptr) Line 1195 C++
>() Line 1398 C++
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160224/ddae8076/attachment.html>

More information about the llvm-dev mailing list