xref: /llvm-project/compiler-rt/test/asan/TestCases/Windows/heapalloc_transfer.cpp (revision 5ad8bbee238f9655c55f048b6ae8c9b40b4c87e5)
1 #include "sanitizer\allocator_interface.h"
2 #include <cassert>
3 #include <stdio.h>
4 #include <windows.h>
5 // RUN: %clang_cl_asan %s -o%t
6 // RUN: %env_asan_opts=windows_hook_rtl_allocators=true %run %t 2>&1 | FileCheck %s
7 // UNSUPPORTED: asan-64-bits
8 
main()9 int main() {
10   //owned by rtl
11   void *alloc = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, 100);
12   assert(alloc);
13   // still owned by rtl
14   alloc = HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, alloc, 100);
15   assert(alloc && !__sanitizer_get_ownership(alloc) && HeapValidate(GetProcessHeap(), 0, alloc));
16   //convert to asan owned
17   void *realloc = HeapReAlloc(GetProcessHeap(), 0, alloc, 500);
18   alloc = nullptr;
19   assert(realloc && __sanitizer_get_ownership(realloc));
20   //convert back to rtl owned;
21   alloc = HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, realloc, 100);
22   assert(alloc && !__sanitizer_get_ownership(alloc) && HeapValidate(GetProcessHeap(), 0, alloc));
23   printf("Success\n");
24 }
25 
26 // CHECK-NOT: assert
27 // CHECK-NOT: AddressSanitizer
28 // CHECK: Success
29