V9016¶
- Code
V9016
- Message
Container declares a call depth that exceeds the VM frame-stack buffer
The container’s declared worst-case call depth
(FileHeader.max_call_depth) is larger than the call-frame buffer
the embedder provided to the VM. VmReady::start rejects the
container before any init code runs, so no PLC instructions execute.
Codegen computes max_call_depth from the program’s static call
graph (longest path through CALL and user-FB_CALL edges,
counting the entry frame). The VM compares that number against
VmBuffers.frames.len().
To resolve:
Grow the embedder’s frame buffer if the program legitimately needs the declared depth, then reload.
Recompile with a shallower call chain.
The trap message reports both numbers (required and capacity).
A declared depth of 0 is invalid and is rejected separately at load
with V9017 before this comparison runs.
Think IronPLC is wrong about this?
If you believe this diagnostic is incorrect, open an issue on GitHub with a small sample that demonstrates the problem.