You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
615 B
37 lines
615 B
#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) { |
|
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 total = test(50); |
|
assert(total == 1275); |
|
}
|
|
|