1*673dc3d4SNico Weber // RUN: %clangxx_asan -O0 %s -o %t
2*673dc3d4SNico Weber // Default is true (free on realloc to 0 size)
3*673dc3d4SNico Weber // RUN: %run %t 2>&1 | FileCheck %s
4*673dc3d4SNico Weber // RUN: %env_asan_opts=allocator_frees_and_returns_null_on_realloc_zero=true %run %t 2>&1 | FileCheck %s
5*673dc3d4SNico Weber // RUN: %env_asan_opts=allocator_frees_and_returns_null_on_realloc_zero=false %run %t 2>&1 | FileCheck %s --check-prefix=NO-FREE
6*673dc3d4SNico Weber 
7*673dc3d4SNico Weber #include <stdio.h>
8*673dc3d4SNico Weber #include <stdlib.h>
9*673dc3d4SNico Weber 
main()10*673dc3d4SNico Weber int main() {
11*673dc3d4SNico Weber   void *p = malloc(42);
12*673dc3d4SNico Weber   p = realloc(p, 0);
13*673dc3d4SNico Weber   if (p) {
14*673dc3d4SNico Weber     // NO-FREE: Allocated something on realloc(p, 0)
15*673dc3d4SNico Weber     fprintf(stderr, "Allocated something on realloc(p, 0)\n");
16*673dc3d4SNico Weber   } else {
17*673dc3d4SNico Weber     // CHECK: realloc(p, 0) returned nullptr
18*673dc3d4SNico Weber     fprintf(stderr, "realloc(p, 0) returned nullptr\n");
19*673dc3d4SNico Weber   }
20*673dc3d4SNico Weber   free(p);
21*673dc3d4SNico Weber }
22