Loading...
#include <cstdint>

#define _CALL_10(expr) \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr); \
		(expr)

#define CALL_100(expr) \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr); \
		_CALL_10(expr)

#define N_UNIQUE_CALLSITES 200

// must match constant above
#define CALL_N_CALLSITES(expr) \
		CALL_100(expr); \
		CALL_100(expr)

extern "C" {

struct test_struct {
	uint64_t a[8];
};

void
call_n_cpp_new(void **ptrs)
{
	int i = 0;
	CALL_N_CALLSITES(({ ptrs[i] = (void *)(new test_struct()); i++; }));
}

void
delete_n_cpp(void **ptrs)
{
	for (int i = 0; i < N_UNIQUE_CALLSITES; i++) {
		delete (test_struct *)ptrs[i];
	}
}

}