| // Test that initially callocked memory is properly freed |
| // (see https://github.com/google/sanitizers/issues/626). |
| // |
| // RUN: %clang %s -o %t |
| // RUN: env LD_PRELOAD=%shared_libasan %run %t |
| // |
| // REQUIRES: asan-dynamic-runtime |
| // |
| // This way of setting LD_PRELOAD does not work with Android test runner. |
| // REQUIRES: not-android |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| static void *ptr; |
| |
| // This constructor will run before __asan_init |
| // so calloc will allocate memory from special pool. |
| static void init() { |
| ptr = calloc(10, 1); |
| } |
| |
| __attribute__((section(".preinit_array"), used)) |
| void *dummy = init; |
| |
| void free_memory() { |
| // This used to abort because |
| // Asan's free didn't recognize ptr. |
| free(ptr); |
| } |
| |
| int main() { |
| free_memory(); |
| return 0; |
| } |
| |