<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - ASAN on Windows dies on exception re-throw"
   href="https://bugs.llvm.org/show_bug.cgi?id=35365">35365</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>ASAN on Windows dies on exception re-throw
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>compiler-rt
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>5.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows XP
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>compiler-rt
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>steinar+llvm@gunderson.no
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Hi,

ASAN on Clang 5.0.0 on Windows seems not to handle exception rethrow properly;
it dies with a NULL pointer exception. A simple example (that uses a separate
helper function to do the rethrow, but it dies even without it, although in a
different and less helpful way):

#include <iostream>
#include <stdexcept>

void func()
{
        throw std::runtime_error("hello, world");
}

void handle_rethrow()
{
        try {
                throw;
        } catch (std::exception &e) {
                std::cout << e.what() << std::endl;
        }
}

int main(void)
{
        try {
                func();
        } catch (...) {
                handle_rethrow();
        }
}

C:\Users\sgunders\source>cl /c /EHsc -fsanitize=address test.cpp

C:\Users\sgunders\source>"c:\Program Files\LLVM\bin\lld-link.exe" /out:test.exe
test.obj "c:\Program
Files\LLVM\lib\clang\5.0.0\lib\windows\clang_rt.asan_cxx-x86_64.lib"
"c:\Program Files\LLVM\lib\clang\5.0.0\lib\windows\clang_rt.asan-x86_64.lib"

C:\Users\sgunders\source>.\test.exe
=================================================================
==33004==ERROR: AddressSanitizer: access-violation on unknown address
0x000000000000 (pc 0x7ff7413fb2d4 bp 0x002c886fd390 sp 0x002c886fad00 T0)
==33004==The signal is caused by a READ memory access.
==33004==Hint: address points to the zero page.
    #0 0x7ff7413fb2d3 in _asan_test_only_reported_buggy_pointer+0xc982a3
(C:\Users\sgunders\source\test.exe+0x140cbb2d3)
    #1 0x7ff74145258f in _asan_after_dynamic_init+0x243bf
(C:\Users\sgunders\source\test.exe+0x140d1258f)
    #2 0x7ff741448327 in _asan_after_dynamic_init+0x1a157
(C:\Users\sgunders\source\test.exe+0x140d08327)
    #3 0x7ffe6600a162 in RtlCaptureContext+0x3c2
(C:\Windows\SYSTEM32\ntdll.dll+0x1800aa162)
    #4 0x7ff7413fb20a in _asan_test_only_reported_buggy_pointer+0xc981da
(C:\Users\sgunders\source\test.exe+0x140cbb20a)
    #5 0x7ff7413fb3a2 in _asan_test_only_reported_buggy_pointer+0xc98372
(C:\Users\sgunders\source\test.exe+0x140cbb3a2)
    #6 0x7ff74145258f in _asan_after_dynamic_init+0x243bf
(C:\Users\sgunders\source\test.exe+0x140d1258f)
    #7 0x7ff741448327 in _asan_after_dynamic_init+0x1a157
(C:\Users\sgunders\source\test.exe+0x140d08327)
    #8 0x7ffe6600a162 in RtlCaptureContext+0x3c2
(C:\Windows\SYSTEM32\ntdll.dll+0x1800aa162)
    #9 0x7ff7413fb36d in _asan_test_only_reported_buggy_pointer+0xc9833d
(C:\Users\sgunders\source\test.exe+0x140cbb36d)
    #10 0x7ff74143c6c4 in _asan_after_dynamic_init+0xe4f4
(C:\Users\sgunders\source\test.exe+0x140cfc6c4)
    #11 0x7ffe636f8363 in BaseThreadInitThunk+0x13
(C:\Windows\System32\KERNEL32.DLL+0x180008363)
    #12 0x7ffe65fc7090 in RtlUserThreadStart+0x20
(C:\Windows\SYSTEM32\ntdll.dll+0x180067090)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: access-violation
(C:\Users\sgunders\source\test.exe+0x140cbb2d3) in
_asan_test_only_reported_buggy_pointer+0xc982a3
==33004==ABORTING

The same code works without fault with ASAN on Linux, and without ASAN on
Windows.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>