diff options
author | Russ Cox <rsc@golang.org> | 2011-08-25 09:26:13 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2011-08-25 09:26:13 -0400 |
commit | c5f0f7f932a8e3d6260fc142c68e32be46a821bb (patch) | |
tree | 4e345eefbfc20c82e6f382e93d5b996b536ffa1e /test/escape2.go | |
parent | d8d3048e2b1ce129c4f87c57e259fc44f9fad950 (diff) | |
download | go-c5f0f7f932a8e3d6260fc142c68e32be46a821bb.tar.gz |
gc: fix some spurious leaks
Probably will spark some discussion. ?
R=lvd
CC=golang-dev
http://codereview.appspot.com/4948041
Diffstat (limited to 'test/escape2.go')
-rw-r--r-- | test/escape2.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/test/escape2.go b/test/escape2.go index abbb57494..f9d377acf 100644 --- a/test/escape2.go +++ b/test/escape2.go @@ -613,3 +613,89 @@ func foo92(x *int) [2]*int { // ERROR "leaking param: NAME-x" return [2]*int{ x, nil } } +// does not leak c +func foo93(c chan *int) *int { + for v := range c { + return v + } + return nil +} + +// does not leak m +func foo94(m map[*int]*int, b bool) *int { + for k, v := range m { + if b { + return k + } + return v + } + return nil +} + +// does leak x +func foo95(m map[*int]*int, x *int) { // ERROR "leaking param: NAME-x" + m[x] = x +} + +// does not leak m +func foo96(m []*int) *int { + return m[0] +} + +// does leak m +func foo97(m [1]*int) *int { // ERROR "leaking param: NAME-m" + return m[0] +} + +// does not leak m +func foo98(m map[int]*int) *int { + return m[0] +} + +// does leak m +func foo99(m *[1]*int) []*int { // ERROR "leaking param: NAME-m" + return m[:] +} + +// does not leak m +func foo100(m []*int) *int { + for _, v := range m { + return v + } + return nil +} + +// does leak m +func foo101(m [1]*int) *int { // ERROR "leaking param: NAME-m" + for _, v := range m { + return v + } + return nil +} + +// does leak x +func foo102(m []*int, x *int) { // ERROR "leaking param: NAME-x" + m[0] = x +} + +// does not leak x +func foo103(m [1]*int, x *int) { + m[0] = x +} + +var y []*int + +// does not leak x +func foo104(x []*int) { + copy(y, x) +} + +// does not leak x +func foo105(x []*int) { + _ = append(y, x...) +} + +// does leak x +func foo106(x *int) { // ERROR "leaking param: NAME-x" + _ = append(y, x) +} |