summaryrefslogtreecommitdiff
path: root/test/escape2.go
diff options
context:
space:
mode:
authorR?my Oudompheng <oudomphe@phare.normalesup.org>2013-03-15 09:03:45 +0100
committerR?my Oudompheng <oudomphe@phare.normalesup.org>2013-03-15 09:03:45 +0100
commite0693790f21e3f1f99ef03cc782353aa8b9b4924 (patch)
tree105f36c3ed0a659f40634c5f6ee281263a6f89b4 /test/escape2.go
parent258af631ad27fa03c771c3206ef1bc8d1e3efed6 (diff)
downloadgo-e0693790f21e3f1f99ef03cc782353aa8b9b4924.tar.gz
cmd/gc: fix escape analysis bug.
It used to not mark parameters as escaping if only one of the fields it points to leaks out of the function. This causes problems when importing from another package. Fixes issue 4964. R=rsc, lvd, dvyukov, daniel.morsing CC=golang-dev https://codereview.appspot.com/7648045
Diffstat (limited to 'test/escape2.go')
-rw-r--r--test/escape2.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/test/escape2.go b/test/escape2.go
index 948161933..3473e4fa4 100644
--- a/test/escape2.go
+++ b/test/escape2.go
@@ -80,7 +80,9 @@ func foo12(yyy **int) { // ERROR "leaking param: yyy"
xxx = yyy
}
-func foo13(yyy **int) { // ERROR "yyy does not escape"
+// Must treat yyy as leaking because *yyy leaks, and the escape analysis
+// summaries in exported metadata do not distinguish these two cases.
+func foo13(yyy **int) { // ERROR "leaking param: yyy"
*xxx = *yyy
}
@@ -299,7 +301,8 @@ func (f *Foo) foo45() { // ERROR "f does not escape"
F.x = f.x
}
-func (f *Foo) foo46() { // ERROR "f does not escape"
+// See foo13 above for explanation of why f leaks.
+func (f *Foo) foo46() { // ERROR "leaking param: f"
F.xx = f.xx
}