I'm not entirely sure about this, but `ExprAssign` at least calls this after the outputs have been handled. Could you add a few test cases with colorful usage of inputs and outputs to make sure that this tracks them correctly? One case off the top of my head that I can think of is a simultaneous use and assignment of an uninitialized variable should be disallowed.