mirror of
https://github.com/icsharpcode/ILSpy.git
synced 2026-10-12 02:15:58 +00:00
The reaching-definitions analysis does not track address loads, so a variable that is only ever written through its address stays potentially uninitialized for its whole life. SplitVariables merges every such load into one live range, which is why csc lowering two deconstructions onto the same pair of temporaries left neither of them recognizable. IL cannot express that a method assigns through an address without reading it first - 'out' is a C# convention over 'ref' - so the address loads that qualify have to be named. A Deconstruct method is the one case that matters here, and C#'s definite assignment rules rule out a read; a Deconstruct method written in IL could read the argument, and that possibility is knowingly ignored. Assisted-by: Claude:claude-opus-5:Claude Code