Calling a function with the wrong argument types was the classic source of C bugs before ANSI prototypes, and it still bites through implicit declarations — the Linux kernel builds with -Werror=implicit-function-declaration for exactly this reason. Clang's Sema layer performs the same arity and type checks you are writing, thousands of times per file.