1 // RUN: %clang_cl_asan %s -o %t.exe
2 // RUN: %run %t.exe 2>&1 | FileCheck %s
3 // RUN: %clang_cl %s -o %t.exe
4 // RUN: %run %t.exe 2>&1 | FileCheck %s
5 
6 #include <cassert>
7 #include <stdio.h>
8 #include <windows.h>
9 
10 int main() {
11   void *p = calloc(1, 100);
12   assert(p);
13   void *np = _recalloc(p, 2, 100);
14   assert(np);
15   for (int i = 0; i < 2 * 100; i++) {
16     assert(((BYTE *)np)[i] == 0);
17   }
18   void *nnp = _recalloc(np, 1, 100);
19   assert(nnp);
20   for (int i = 0; i < 100; i++) {
21     assert(((BYTE *)nnp)[i] == 0);
22     ((BYTE *)nnp)[i] = 0x0d;
23   }
24   void *nnnp = _recalloc(nnp, 2, 100);
25   assert(nnnp);
26   for (int i = 0; i < 100; i++) {
27     assert(((BYTE *)nnnp)[i] == 0x0d);
28   }
29   for (int i = 100; i < 200; i++) {
30     assert(((BYTE *)nnnp)[i] == 0);
31   }
32   fprintf(stderr, "passed\n");
33   return 0;
34 }
35 
36 // CHECK-NOT: Assertion
37 // CHECK: passed