1 #include <stdio.h> 2 #include <windows.h> 3 4 // RUN: %clang_cl_asan -LD /Od -DDLL %s -Fe%t.dll 5 // RUN: %clang_cl /Od -DEXE %s -Fe%te.exe 6 // RUN: %env_asan_opts=windows_hook_rtl_allocators=true not %run %te.exe %t.dll 2>&1 | FileCheck %s 7 // REQUIRES: asan-dynamic-runtime 8 // REQUIRES: asan-32-bits 9 10 #include <cassert> 11 #include <stdio.h> 12 #include <windows.h> 13 extern "C" { 14 #if defined(EXE) 15 16 int main(int argc, char **argv) { 17 void *region_without_hooks = HeapAlloc(GetProcessHeap(), 0, 10); 18 HMODULE lib = LoadLibraryA(argv[1]); 19 assert(lib != INVALID_HANDLE_VALUE); 20 assert(0 != FreeLibrary(lib)); 21 assert(0 != HeapFree(GetProcessHeap(), 0, region_without_hooks)); 22 assert(0 != HeapFree(GetProcessHeap(), 0, region_without_hooks)); 23 } 24 #elif defined(DLL) 25 // This global is registered at startup. 26 27 BOOL WINAPI DllMain(HMODULE, DWORD reason, LPVOID) { 28 fprintf(stderr, "in DLL(reason=%d)\n", (int)reason); 29 fflush(0); 30 return TRUE; 31 } 32 33 // CHECK: in DLL(reason=1) 34 // CHECK: in DLL(reason=0) 35 // CHECK: AddressSanitizer: nested bug in the same thread, aborting. 36 37 #else 38 #error oops! 39 #endif 40 } 41