#include "sandboxed_api/sandbox2/testcases/symbolize_lib.h"

#include "absl/base/attributes.h"

ABSL_ATTRIBUTE_NOINLINE
ABSL_ATTRIBUTE_NO_TAIL_CALL
void LibRecurseA(void (*cb)(int), int data, int n);

ABSL_ATTRIBUTE_NOINLINE
ABSL_ATTRIBUTE_NO_TAIL_CALL
void LibCallCallback(void (*cb)(int), int data) { cb(data); }

ABSL_ATTRIBUTE_NOINLINE
ABSL_ATTRIBUTE_NO_TAIL_CALL
void LibRecurseB(void (*cb)(int), int data, int n) {
  if (n > 1) {
    return LibRecurseA(cb, data, n - 1);
  }
  return LibCallCallback(cb, data);
}

void LibRecurseA(void (*cb)(int), int data, int n) {
  if (n > 1) {
    return LibRecurseB(cb, data, n - 1);
  }
  return LibCallCallback(cb, data);
}

void LibRecurse(void (*cb)(int), int data, int n) { LibRecurseA(cb, data, n); }
