From e0693790f21e3f1f99ef03cc782353aa8b9b4924 Mon Sep 17 00:00:00 2001 From: R?my Oudompheng Date: Fri, 15 Mar 2013 09:03:45 +0100 Subject: 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 --- test/escape2.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'test/escape2.go') 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 } -- cgit v1.2.1