forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			38 lines
		
	
	
		
			615 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			615 B
		
	
	
	
		
			C++
		
	
	
	
#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);
 | 
						|
}
 |