// RUN: %clangxx_scudo %s -lstdc++ -o %t
// RUN: %run %t 2>&1

// Tests that a regular workflow of allocation, memory fill and free works as
// intended. Tests various sizes serviced by the primary and secondary
// allocators.

#include <assert.h>
#include <stdlib.h>
#include <string.h>

#include <vector>

int main(int argc, char **argv) {
  void *p;
  std::vector<ssize_t> sizes{1, 8, 16, 32, 1024, 32768,
                             1 << 16, 1 << 17, 1 << 20, 1 << 24};
  std::vector<int> offsets{1, 0, -1, -7, -8, -15, -16, -31, -32};

  p = malloc(0);
  assert(p);
  free(p);
  for (ssize_t size : sizes) {
    for (int offset : offsets) {
      ssize_t actual_size = size + offset;
      if (actual_size <= 0)
        continue;
      p = malloc(actual_size);
      assert(p);
      memset(p, 0xff, actual_size);
      free(p);
    }
  }

  return 0;
}
