diff options
author | Russ Cox <rsc@golang.org> | 2009-02-15 13:15:46 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-02-15 13:15:46 -0800 |
commit | 975b981f8addc32a25344ca3f642709e13171f83 (patch) | |
tree | 3471aea414b5988607d0ba98e89d3fce3eb3c9f3 /src/cmd/gc/walk.c | |
parent | 91d9f761da326a8891bdf2ae75da4fe9c71b875d (diff) | |
download | golang-975b981f8addc32a25344ca3f642709e13171f83.tar.gz |
bug fix for &x[0] when x is slice
R=ken
OCL=25044
CL=25044
Diffstat (limited to 'src/cmd/gc/walk.c')
-rw-r--r-- | src/cmd/gc/walk.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 1d2063348..f3a3bd6e5 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -3745,10 +3745,13 @@ addrescapes(Node *n) case ODOT: case OINDEX: - // ODOTPTR has already been - // introduced, so these are the non-pointer - // ODOT and OINDEX. - addrescapes(n->left); + // ODOTPTR has already been introduced, + // so these are the non-pointer ODOT and OINDEX. + // In &x[0], if x is a slice, then x does not + // escape--the pointer inside x does, but that + // is always a heap pointer anyway. + if(!isslice(n->left->type)) + addrescapes(n->left); break; } } |