The escape analysis models closures by flowing captured variable
address to the closure node. However, the escape state for the
address expressions remained unset as ESCAPE_UNKNOWN. This
caused later passes to conclude that the address escapes. Fix this by
setting its escape state to ESCAPE_NONE first. If it escapes
(because the closure escapes), the flood phase will set its
escape state properly.
Reviewed-on: https://go-review.googlesource.com/86240
From-SVN: r256411
-7c5e4d67041e3529a055a923b2b9f5ef09aa72a3
+bea521d1d8688bea5b14b1ae2a03aec949f48a44
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
for (; p != sce->vals()->end(); ++p)
{
Node* enclosed_node = Node::make_node(*p);
- Node::Escape_state* state =
- enclosed_node->state(this->context_, NULL);
- state->loop_depth = this->context_->loop_depth();
+ this->context_->track(enclosed_node);
this->assign(closure_node, enclosed_node);
}
}