analyzer icon indicating copy to clipboard operation
analyzer copied to clipboard

Clear up meaning of `MayEscape` & Distinguish a local becoming reachable via globals from being reachable by other threads

Open michael-schwarz opened this issue 1 year ago • 1 comments

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/05 to fail which requires MayEscape to 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.

michael-schwarz avatar Jul 16 '24 15:07 michael-schwarz

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.

sim642 avatar Jul 16 '24 17:07 sim642