Files
clang-p2996/libunwind/test/libunwind_02.pass.cpp
Louis Dionne 60fe1f59d0 [runtimes][ci] Run the tests for libunwind in the CI
We should arguably have always been doing that. The state of libunwind
is quite sad, so this commit adds several XFAILs to make the CI pass.
We need to investigate why so many tests are not passing in some
configurations, but I'll defer that to folks who actually work on
libunwind for lack of bandwidth.

Differential Revision: https://reviews.llvm.org/D110872
2021-10-06 11:25:26 -04:00

46 lines
782 B
C++

// TODO: Investigate these failures
// XFAIL: asan, tsan, ubsan
// TODO: Investigate this failure
// XFAIL: 32bits-on-64bits
#include <assert.h>
#include <stdlib.h>
#include <unwind.h>
#define EXPECTED_NUM_FRAMES 50
#define NUM_FRAMES_UPPER_BOUND 100
_Unwind_Reason_Code callback(_Unwind_Context *context, void *cnt) {
(void)context;
int *i = (int *)cnt;
++*i;
if (*i > NUM_FRAMES_UPPER_BOUND) {
abort();
}
return _URC_NO_REASON;
}
void test_backtrace() {
int n = 0;
_Unwind_Backtrace(&callback, &n);
if (n < EXPECTED_NUM_FRAMES) {
abort();
}
}
int test(int i) {
if (i == 0) {
test_backtrace();
return 0;
} else {
return i + test(i - 1);
}
}
int main(int, char**) {
int total = test(50);
assert(total == 1275);
return 0;
}