On Saturday, 25 September 2021 at 07:53:11 UTC, Chris Katko wrote:
Is that some sort of "NP complete" can't-fix issue or something?
The general case is obviously unsolvable. Trivial proof: float x = nan; if (undecidable) use x. I'm sure your imagination can supply more realistic cases (but I promise they really do come up!)
However that doesn't mean we can't do flow analysis conservatively. Similar caveats apply to @live, but that does not mean it is useless. (Not saying @live isn't useless, just that this doesn't indicate that.) The bigger problem is that it really is hard to tell if you 'meant' to use a nan somewhere or not.
And if you tried to apply such a semantic analysis pass to existing code, you would find it riddled with false positives, where a float was default-initialized to nan and the compiler was unable to convince itself the variable was overridden before being used in all paths.