The specification allows implementations to have limits on maximum call stack depth and all sorts of other things. It's absolutely semantically meaningful in C to allocate a new stack frame.
The details of how a stack is managed isn't normally part of programming language semantics.
The details of how a stack is managed isn't normally part of programming language semantics.