This might be splitted into 2 separate patchs:
- the initializer of a variable should play no part in decl "invalid" bit;
- preserve the exprs in an error initializer via recovery exprs;
if we do 1) only, we will regress the diagnostics (one big regression is that
we loose the "selected 'begin' function with iterator type" diagnostic in for-range stmt;
with 2) together, we don't have regressions (the new diagnostics seems to be
improved).
if the variable is an undeduced auto (and the type of the recoveryexpr is unknown), we still have to mark it invalid. Does that happen somewhere else?