Commit 4a59d447 by Ian Lance Taylor

compiler: set captured variable address to nonescape until further flooded

    
    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
parent 47e8a22a
7c5e4d67041e3529a055a923b2b9f5ef09aa72a3 bea521d1d8688bea5b14b1ae2a03aec949f48a44
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -1774,9 +1774,7 @@ Escape_analysis_assign::expression(Expression** pexpr) ...@@ -1774,9 +1774,7 @@ Escape_analysis_assign::expression(Expression** pexpr)
for (; p != sce->vals()->end(); ++p) for (; p != sce->vals()->end(); ++p)
{ {
Node* enclosed_node = Node::make_node(*p); Node* enclosed_node = Node::make_node(*p);
Node::Escape_state* state = this->context_->track(enclosed_node);
enclosed_node->state(this->context_, NULL);
state->loop_depth = this->context_->loop_depth();
this->assign(closure_node, enclosed_node); this->assign(closure_node, enclosed_node);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment