1*673dc3d4SNico Weber // RUN: %clang_cl_asan -Od %s -Fe%t
2*673dc3d4SNico Weber // RUN: %run %t
3*673dc3d4SNico Weber 
4*673dc3d4SNico Weber #include <windows.h>
5*673dc3d4SNico Weber 
6*673dc3d4SNico Weber #define CHECK_ALIGNED(ptr,alignment) \
7*673dc3d4SNico Weber   do { \
8*673dc3d4SNico Weber     if (((uintptr_t)(ptr) % (alignment)) != 0) \
9*673dc3d4SNico Weber       return __LINE__; \
10*673dc3d4SNico Weber     } \
11*673dc3d4SNico Weber   while(0)
12*673dc3d4SNico Weber 
main(void)13*673dc3d4SNico Weber int main(void) {
14*673dc3d4SNico Weber   int *p = (int*)_aligned_malloc(1024 * sizeof(int), 32);
15*673dc3d4SNico Weber   CHECK_ALIGNED(p, 32);
16*673dc3d4SNico Weber   p[512] = 0;
17*673dc3d4SNico Weber   _aligned_free(p);
18*673dc3d4SNico Weber 
19*673dc3d4SNico Weber   p = (int*)_aligned_malloc(128, 128);
20*673dc3d4SNico Weber   CHECK_ALIGNED(p, 128);
21*673dc3d4SNico Weber   p = (int*)_aligned_realloc(p, 2048 * sizeof(int), 128);
22*673dc3d4SNico Weber   CHECK_ALIGNED(p, 128);
23*673dc3d4SNico Weber   p[1024] = 0;
24*673dc3d4SNico Weber   if (_aligned_msize(p, 128, 0) != 2048 * sizeof(int))
25*673dc3d4SNico Weber     return __LINE__;
26*673dc3d4SNico Weber   _aligned_free(p);
27*673dc3d4SNico Weber 
28*673dc3d4SNico Weber   return 0;
29*673dc3d4SNico Weber }
30