The decompiler already reconstructs this feature almost completely, so
CS73_ExpressionVariablesInInitializers is a green pin: out var and
pattern variables inline in instance/static field initializers,
auto-property initializers, base(...)/this-style constructor
initializers (including reuse of the variable in a later argument and
in the constructor body, lambda captures of the variable, and a
value-type this(...) chain), plus query clauses (let, where with a
discard, second from, group by, join-on, and patterns in where/let).
Multiple constructors sharing a folded initializer and nested out vars
in one initializer are covered too; the second-from case needs an OPT
branch because debug builds decompile to a negated conditional.
CS73_DiscardsInFieldInitializers is Assert.Ignore'd (#829): when two
field initializers each discard an out argument of the same type, the
compiler shares one temporary local across the constructor prologue,
and the decompiler declares it as 'out var result' in the first
initializer and references it as 'out result' in the second, where it
is out of scope (CS0103, uncompilable). The same happens for static
field initializers in the cctor. The fixture is the desired output
('out var _' in each initializer); all six Roslyn 3.11/4.14/latest
debug/opt configs compile it and fail only at the output comparison.
Assisted-by: Claude:claude-fable-5:Claude Code