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 Weberint 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