1*11b41446SVitaly Buka // Workaround for "LINK : fatal error LNK1318: Unexpected PDB error"
2*11b41446SVitaly Buka // RUN: rm -f %t.pdb
3*11b41446SVitaly Buka 
4673dc3d4SNico Weber // RUN: %clang_cl_asan %s -o %t.exe
5673dc3d4SNico Weber // RUN: %run %t.exe 2>&1 | FileCheck %s
6673dc3d4SNico Weber // RUN: %clang_cl %s -o %t.exe
7673dc3d4SNico Weber // RUN: %run %t.exe 2>&1 | FileCheck %s
8673dc3d4SNico Weber 
9673dc3d4SNico Weber #include <cassert>
10673dc3d4SNico Weber #include <stdio.h>
11673dc3d4SNico Weber #include <windows.h>
12673dc3d4SNico Weber 
main()13673dc3d4SNico Weber int main() {
14673dc3d4SNico Weber   void *p = calloc(1, 100);
15673dc3d4SNico Weber   assert(p);
16673dc3d4SNico Weber   void *np = _recalloc(p, 2, 100);
17673dc3d4SNico Weber   assert(np);
18673dc3d4SNico Weber   for (int i = 0; i < 2 * 100; i++) {
19673dc3d4SNico Weber     assert(((BYTE *)np)[i] == 0);
20673dc3d4SNico Weber   }
21673dc3d4SNico Weber   void *nnp = _recalloc(np, 1, 100);
22673dc3d4SNico Weber   assert(nnp);
23673dc3d4SNico Weber   for (int i = 0; i < 100; i++) {
24673dc3d4SNico Weber     assert(((BYTE *)nnp)[i] == 0);
25673dc3d4SNico Weber     ((BYTE *)nnp)[i] = 0x0d;
26673dc3d4SNico Weber   }
27673dc3d4SNico Weber   void *nnnp = _recalloc(nnp, 2, 100);
28673dc3d4SNico Weber   assert(nnnp);
29673dc3d4SNico Weber   for (int i = 0; i < 100; i++) {
30673dc3d4SNico Weber     assert(((BYTE *)nnnp)[i] == 0x0d);
31673dc3d4SNico Weber   }
32673dc3d4SNico Weber   for (int i = 100; i < 200; i++) {
33673dc3d4SNico Weber     assert(((BYTE *)nnnp)[i] == 0);
34673dc3d4SNico Weber   }
35673dc3d4SNico Weber   fprintf(stderr, "passed\n");
36673dc3d4SNico Weber   return 0;
37673dc3d4SNico Weber }
38673dc3d4SNico Weber 
39673dc3d4SNico Weber // CHECK-NOT: Assertion
40673dc3d4SNico Weber // CHECK: passed