analyzer
analyzer copied to clipboard
Clear up meaning of `MayEscape` & Distinguish a local becoming reachable via globals from being reachable by other threads
We make inconsistent assumptions about what "has escaped" is supposed to mean:
- The analysis that answers the MayEscape queries claims it is about
Escape analysis for thread-local variables ([escape]). - Thus, one would assume adding an override to say things have not escaped when the program has never been multi-threaded would be a precision improvement.
- However, adding such a check, leads test
45/05to fail which requiresMayEscapeto answer true also in single-threaded settings.
I came across this when considering #1542, where this distinction leads to a new global variable being created when reading to g#in that has not received any values as the value of the variable is still tracked locally.
The description of the escape analysis should definitely at least be amended. I guess it would be possible to have two separate analyses and queries for the two different notions but that might be overkill. In the multi-threaded case they would probably have to amplify each other anyway.
Our notion of escaping would generalize anyway with #1491.