1*673dc3d4SNico Weber // RUN: %clang_cl_asan -Od %p/dll_host.cpp -Fe%t
2*673dc3d4SNico Weber // RUN: %clang_cl_asan -LD -Od %s -Fe%t.dll
3*673dc3d4SNico Weber // RUN: %run %t %t.dll | FileCheck %s
4*673dc3d4SNico Weber
5*673dc3d4SNico Weber #include <malloc.h>
6*673dc3d4SNico Weber #include <stdio.h>
7*673dc3d4SNico Weber
8*673dc3d4SNico Weber #define CHECK_ALIGNED(ptr,alignment) \
9*673dc3d4SNico Weber do { \
10*673dc3d4SNico Weber if (((uintptr_t)(ptr) % (alignment)) != 0) \
11*673dc3d4SNico Weber return __LINE__; \
12*673dc3d4SNico Weber } \
13*673dc3d4SNico Weber while(0)
14*673dc3d4SNico Weber
15*673dc3d4SNico Weber extern "C" __declspec(dllexport)
test_function()16*673dc3d4SNico Weber int test_function() {
17*673dc3d4SNico Weber int *p = (int*)_aligned_malloc(1024 * sizeof(int), 32);
18*673dc3d4SNico Weber CHECK_ALIGNED(p, 32);
19*673dc3d4SNico Weber p[512] = 0;
20*673dc3d4SNico Weber _aligned_free(p);
21*673dc3d4SNico Weber
22*673dc3d4SNico Weber p = (int*)_aligned_malloc(128, 128);
23*673dc3d4SNico Weber CHECK_ALIGNED(p, 128);
24*673dc3d4SNico Weber p = (int*)_aligned_realloc(p, 2048 * sizeof(int), 128);
25*673dc3d4SNico Weber CHECK_ALIGNED(p, 128);
26*673dc3d4SNico Weber p[1024] = 0;
27*673dc3d4SNico Weber if (_aligned_msize(p, 128, 0) != 2048 * sizeof(int))
28*673dc3d4SNico Weber return __LINE__;
29*673dc3d4SNico Weber _aligned_free(p);
30*673dc3d4SNico Weber
31*673dc3d4SNico Weber printf("All ok\n");
32*673dc3d4SNico Weber // CHECK: All ok
33*673dc3d4SNico Weber return 0;
34*673dc3d4SNico Weber }
35