firstErr is never consumed