1 | // Test that initially callocked memory is properly freed |
2 | // (see https://github.com/google/sanitizers/issues/626). |
3 | // |
4 | // RUN: %clang %s -o %t |
5 | // RUN: env LD_PRELOAD=%shared_libasan %run %t |
6 | // |
7 | // REQUIRES: asan-dynamic-runtime |
8 | // |
9 | // This way of setting LD_PRELOAD does not work with Android test runner. |
10 | // REQUIRES: !android |
11 | |
12 | #include <stdio.h> |
13 | #include <stdlib.h> |
14 | |
15 | static void *ptr; |
16 | |
17 | // This constructor will run before __asan_init |
18 | // so calloc will allocate memory from special pool. |
19 | static void init() { |
20 | ptr = calloc(nmemb: 10, size: 1); |
21 | } |
22 | |
23 | __attribute__((section(".preinit_array" ), used)) |
24 | void *dummy = init; |
25 | |
26 | void free_memory() { |
27 | // This used to abort because |
28 | // Asan's free didn't recognize ptr. |
29 | free(ptr: ptr); |
30 | } |
31 | |
32 | int main() { |
33 | free_memory(); |
34 | return 0; |
35 | } |
36 | |
37 | |