// RUN: %clang_cl_asan %Od %p/dll_host.cpp %Fe%t
// RUN: %clang_cl_asan %LD %Od %s %Fe%t.dll
// RUN: %run %t %t.dll | FileCheck %s

#include <malloc.h>
#include <stdio.h>

extern "C" __declspec(dllexport)
int test_function() {
  int *p = (int*)malloc(1024 * sizeof(int));
  p[512] = 0;
  free(p);

  p = (int*)malloc(128);
  p = (int*)realloc(p, 2048 * sizeof(int));
  p[1024] = 0;
  free(p);

  p = (int*)calloc(16, sizeof(int));
  if (p[8] != 0)
    return 1;
  p[15]++;
  if (16 * sizeof(int) != _msize(p))
    return 2;
  free(p);

  p = new int;
  *p = 42;
  delete p;

  p = new int[42];
  p[15]++;
  delete [] p;

  printf("All ok\n");
// CHECK: All ok

  return 0;
}
