1 #include "sandboxed_api/sandbox2/testcases/symbolize_lib.h"
2
3 #include "absl/base/attributes.h"
4
5 ABSL_ATTRIBUTE_NOINLINE
6 ABSL_ATTRIBUTE_NO_TAIL_CALL
7 void LibRecurseA(void (*cb)(int), int data, int n);
8
9 ABSL_ATTRIBUTE_NOINLINE
10 ABSL_ATTRIBUTE_NO_TAIL_CALL
LibCallCallback(void (* cb)(int),int data)11 void LibCallCallback(void (*cb)(int), int data) { cb(data); }
12
13 ABSL_ATTRIBUTE_NOINLINE
14 ABSL_ATTRIBUTE_NO_TAIL_CALL
LibRecurseB(void (* cb)(int),int data,int n)15 void LibRecurseB(void (*cb)(int), int data, int n) {
16 if (n > 1) {
17 return LibRecurseA(cb, data, n - 1);
18 }
19 return LibCallCallback(cb, data);
20 }
21
LibRecurseA(void (* cb)(int),int data,int n)22 void LibRecurseA(void (*cb)(int), int data, int n) {
23 if (n > 1) {
24 return LibRecurseB(cb, data, n - 1);
25 }
26 return LibCallCallback(cb, data);
27 }
28
LibRecurse(void (* cb)(int),int data,int n)29 void LibRecurse(void (*cb)(int), int data, int n) { LibRecurseA(cb, data, n); }
30