diff options
| author | Michael Stapelberg <michael@stapelberg.de> | 2013-03-23 11:29:06 +0100 |
|---|---|---|
| committer | Michael Stapelberg <michael@stapelberg.de> | 2013-03-23 11:29:06 +0100 |
| commit | cc71238f4c5d23ee2ebffd0d6c307e308ea163c1 (patch) | |
| tree | dd0b57254871fac715258385f5485ba136d6b62a /src/cmd/gc/esc.c | |
| parent | b32e37d71adab0e2a2b7c4433e7bad169a9a4f98 (diff) | |
| parent | b39e15dde5ec7b96c15da9faf4ab5892501c1aae (diff) | |
| download | golang-cc71238f4c5d23ee2ebffd0d6c307e308ea163c1.tar.gz | |
Merge tag 'upstream/1.1_hg20130323' into debian-sid
Upstream version 1.1~hg20130323
Diffstat (limited to 'src/cmd/gc/esc.c')
| -rw-r--r-- | src/cmd/gc/esc.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/cmd/gc/esc.c b/src/cmd/gc/esc.c index 46c06d10e..df273e392 100644 --- a/src/cmd/gc/esc.c +++ b/src/cmd/gc/esc.c @@ -596,6 +596,14 @@ esc(EscState *e, Node *n) // Contents make it to memory, lose track. escassign(e, &e->theSink, n->left); break; + + case OCALLPART: + n->esc = EscNone; // until proven otherwise + e->noesc = list(e->noesc, n); + n->escloopdepth = e->loopdepth; + // Contents make it to memory, lose track. + escassign(e, &e->theSink, n->left); + break; case OMAPLIT: n->esc = EscNone; // until proven otherwise @@ -667,6 +675,7 @@ escassign(EscState *e, Node *dst, Node *src) case OCONVNOP: case OMAPLIT: case OSTRUCTLIT: + case OCALLPART: break; case ONAME: @@ -713,6 +722,7 @@ escassign(EscState *e, Node *dst, Node *src) case OMAKESLICE: case ONEW: case OCLOSURE: + case OCALLPART: escflows(e, dst, src); break; @@ -1033,7 +1043,7 @@ escwalk(EscState *e, int level, Node *dst, Node *src) switch(src->op) { case ONAME: - if(src->class == PPARAM && leaks && src->esc != EscHeap) { + if(src->class == PPARAM && (leaks || dst->escloopdepth < 0) && src->esc != EscHeap) { src->esc = EscScope; if(debug['m']) warnl(src->lineno, "leaking param: %hN", src); @@ -1073,6 +1083,7 @@ escwalk(EscState *e, int level, Node *dst, Node *src) case OMAPLIT: case ONEW: case OCLOSURE: + case OCALLPART: if(leaks) { src->esc = EscHeap; if(debug['m']) |
