Go's stacks sometimes get relocated. The goes-wrong case here might be:
1) stack gets really large, grows as necessary.
2) stack gets small, GC has not noticed yet.
3) you call C function, which for whatever reason takes a little time to run.
4) meanwhile, GC runs, notices that your stack shrank a lot, and moves it into a smaller place.
5) C function runs, but the stack data that it was planning to read may have changed
(In practice, the old stack is probably left alone for a short while, so maybe your C function
gets lucky, as long as it is only reading, not writing).
In general, the short answer to "can we pass stack allocated objects to C?" is no.
Changing that answer would require some changes in how the Go runtime manages stacks,
and making that change would soon commit us to keep that change in the future, because
you are already planning to write the code that will run slowly if we reversed the change.
That doesn't mean it won't happen, but it does mean that we're reluctant,
because we don't think we know enough yet to make the commitment.
Depending on your application, maybe you keep a pre-allocated cache of [2]C.int to use
for this purpose?
David