diff --git a/compiler-rt/test/gwp_asan/backtrace.c b/compiler-rt/test/gwp_asan/backtrace.c new file mode 100644 --- /dev/null +++ b/compiler-rt/test/gwp_asan/backtrace.c @@ -0,0 +1,29 @@ +// REQUIRES: gwp_asan +// RUN: %clang_gwp_asan %s -g -o %t +// RUN: %expect_crash %t 2>&1 | FileCheck %s + +#include + +__attribute__((noinline)) void *allocate_mem() { return malloc(1); } + +__attribute__((noinline)) void free_mem(void *ptr) { free(ptr); } + +__attribute__((noinline)) void touch_mem(void *ptr) { + volatile char sink = *((volatile char *)ptr); +} + +// CHECK: Use After Free +// CHECK: touch_mem +// CHECK: was deallocated +// CHECK: free_mem +// CHECK: was allocated +// CHECK: allocate_mem + +int main() { + for (unsigned i = 0; i < 0x10000; ++i) { + void *ptr = allocate_mem(); + free_mem(ptr); + touch_mem(ptr); + } + return 0; +}