| #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 total = test(50); | 
 |   assert(total == 1275); | 
 | } |