1// RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
2
3// Windows does not have execinfo.h. For now, be conservative and
4// restrict the test to glibc.
5// REQUIRES: glibc-2.27
6
7// Test the backtrace() interceptor.
8
9#include <assert.h>
10#include <execinfo.h>
11#include <math.h>
12#include <stdio.h>
13#include <stdlib.h>
14
15#define MAX_BT 100
16
17int main() {
18 void **buffer = (void **)malloc(size: sizeof(void *) * MAX_BT);
19 assert(buffer != NULL);
20 free(ptr: buffer);
21
22 // Deliberate use-after-free of 'buffer'. We expect ASan to
23 // catch this, without triggering internal sanitizer errors.
24 int numEntries = backtrace(array: buffer, MAX_BT);
25 printf(format: "backtrace returned %d entries\n", numEntries);
26
27 // CHECK: use-after-free
28 // CHECK: SUMMARY
29 return 0;
30}
31

source code of compiler-rt/test/asan/TestCases/backtrace_interceptor.cpp