summaryrefslogtreecommitdiff
path: root/src/cmd/gc/walk.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-02-15 13:15:46 -0800
committerRuss Cox <rsc@golang.org>2009-02-15 13:15:46 -0800
commit975b981f8addc32a25344ca3f642709e13171f83 (patch)
tree3471aea414b5988607d0ba98e89d3fce3eb3c9f3 /src/cmd/gc/walk.c
parent91d9f761da326a8891bdf2ae75da4fe9c71b875d (diff)
downloadgolang-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.c11
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;
}
}