29 lines · cpp
1#include "sanitizer\allocator_interface.h"2#include <cassert>3#include <stdio.h>4#include <windows.h>5// RUN: %clang_cl_asan %s -o%t6// RUN: %env_asan_opts=windows_hook_rtl_allocators=true %run %t 2>&1 | FileCheck %s7// UNSUPPORTED: asan-64-bits8 9int main() {10 //owned by rtl11 void *alloc = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, 100);12 assert(alloc);13 // still owned by rtl14 alloc = HeapReAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, alloc, 100);15 assert(alloc && !__sanitizer_get_ownership(alloc) && HeapValidate(GetProcessHeap(), 0, alloc));16 //convert to asan owned17 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: assert27// CHECK-NOT: AddressSanitizer28// CHECK: Success29