Assume you are tasked with writing a compiler for a language that can be parsed in a single pass, like C, but does not necessarily have to be. What are the pros and cons for doing this? Would you do this in a compiler for a language meant to be used in production, or would you make the parser multi-pass? Why?
To clarify: what I mean by "single pass" is not to smash the usual passes (parsing, type-checking, optimization, and code gen) together into one mess. That question is here.
What I mean is a language where the parser can be a single pass, and no extra name resolution pass is needed, because forward declarations are required.
(Yes, I know, the name resolution pass probably wouldn't be implemented by the parser.)
Also, I consider the lexer and parser to be one pass together in this context.
In addition, by "in production," I mean for a compiler that companies might use in critical code, including safety-critical code. While I am doing this in my spare time, I still don't want to do this halfway.
Note: This question was inspired by an exchange I had with @AlexisKing, but I have made the question more general because I also want other people to chime in about this fascinating subtopic of compiler design.