]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile: trim more unnecessary escape analysis messages
authorMatthew Dempsky <mdempsky@google.com>
Mon, 1 Apr 2019 21:01:58 +0000 (14:01 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 2 Apr 2019 18:00:32 +0000 (18:00 +0000)
"leaking closure reference" is redundant for similar reasons as "&x
escapes to heap" for OADDR nodes: the reference itself does not
allocate, and we already report when the referenced variable is moved
to heap.

"mark escaped content" is redundant with "leaking param content".

Updates #23109.

Change-Id: I1ab599cb1e8434f1918dd80596a70cba7dc8a0cf
Reviewed-on: https://go-review.googlesource.com/c/go/+/170321
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/esc.go
test/escape2.go
test/escape2n.go
test/escape_array.go

index 5180a07ce8417f88fec40561acc111aeac3d9ed7..f162fc641b9d4c796f7af707e821ebb62885047d 100644 (file)
@@ -1837,10 +1837,6 @@ func (e *EscState) escwalkBody(level Level, dst *Node, src *Node, step *EscStep,
                src.Op == ONAME && src.Class() == PPARAM && src.Esc&EscMask < EscHeap &&
                level.int() > 0 {
                src.Esc = escMax(EscContentEscapes|src.Esc, EscNone)
-               if Debug['m'] != 0 {
-                       Warnl(src.Pos, "mark escaped content: %S", src)
-                       step.describe(src)
-               }
        }
 
        leaks = level.int() <= 0 && level.guaranteedDereference() <= 0 && dstE.Loopdepth < modSrcLoopdepth
@@ -1880,10 +1876,6 @@ func (e *EscState) escwalkBody(level Level, dst *Node, src *Node, step *EscStep,
                // Treat a captured closure variable as equivalent to the
                // original variable.
                if src.IsClosureVar() {
-                       if leaks && Debug['m'] != 0 {
-                               Warnl(src.Pos, "leaking closure reference %S", src)
-                               step.describe(src)
-                       }
                        e.escwalk(level, dst, src.Name.Defn, e.stepWalk(dst, src.Name.Defn, "closure-var", step))
                }
 
index a95f89a5cdd4ab90f7e725429ea337e32b3e7103..e3561a0f60b718aa3d5d82399c773dc3689e9eda 100644 (file)
@@ -1186,7 +1186,7 @@ func foo124(x **int) { // ERROR "foo124 x does not escape$"
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo124 func literal does not escape$"
-               *x = p // ERROR "leaking closure reference p$"
+               *x = p
        }()
 }
 
@@ -1194,7 +1194,7 @@ func foo125(ch chan *int) { // ERROR "foo125 ch does not escape$"
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo125 func literal does not escape$"
-               ch <- p // ERROR "leaking closure reference p$"
+               ch <- p
        }()
 }
 
@@ -1204,7 +1204,7 @@ func foo126() {
                // loopdepth 1
                var i int // ERROR "moved to heap: i$"
                func() {  // ERROR "foo126 func literal does not escape$"
-                       px = &i // ERROR "leaking closure reference i"
+                       px = &i
                }()
        }
        _ = px
@@ -1230,9 +1230,9 @@ func foo129() {
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo129 func literal does not escape$"
-               q := p   // ERROR "leaking closure reference p$"
+               q := p
                func() { // ERROR "foo129.func1 func literal does not escape$"
-                       r := q // ERROR "leaking closure reference q$"
+                       r := q
                        px = r
                }()
        }()
@@ -1242,7 +1242,7 @@ func foo130() {
        for {
                var i int // ERROR "moved to heap: i$"
                func() {  // ERROR "foo130 func literal does not escape$"
-                       px = &i // ERROR "leaking closure reference i$"
+                       px = &i
                }()
        }
 }
@@ -1250,21 +1250,21 @@ func foo130() {
 func foo131() {
        var i int // ERROR "moved to heap: i$"
        func() {  // ERROR "foo131 func literal does not escape$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
 func foo132() {
        var i int   // ERROR "moved to heap: i$"
        go func() { // ERROR "func literal escapes to heap$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
 func foo133() {
        var i int      // ERROR "moved to heap: i$"
        defer func() { // ERROR "foo133 func literal does not escape$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
@@ -1296,9 +1296,9 @@ func foo136() {
        var i int   // ERROR "moved to heap: i$"
        p := &i
        go func() { // ERROR "func literal escapes to heap$"
-               q := p   // ERROR "leaking closure reference p$"
+               q := p
                func() { // ERROR "foo136.func1 func literal does not escape$"
-                       r := q // ERROR "leaking closure reference q$"
+                       r := q
                        px = r
                }()
        }()
@@ -1308,7 +1308,7 @@ func foo137() {
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo137 func literal does not escape$"
-               q := p      // ERROR "leaking closure reference p$"
+               q := p
                go func() { // ERROR "func literal escapes to heap$"
                        r := q
                        _ = r
index bb29eea732b41004c5d48317a5d4776c3b9942f4..6ec198fd32598c6c6f2308603db6023d84e39718 100644 (file)
@@ -1186,7 +1186,7 @@ func foo124(x **int) { // ERROR "foo124 x does not escape$"
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo124 func literal does not escape$"
-               *x = p // ERROR "leaking closure reference p$"
+               *x = p
        }()
 }
 
@@ -1194,7 +1194,7 @@ func foo125(ch chan *int) { // ERROR "foo125 ch does not escape$"
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo125 func literal does not escape$"
-               ch <- p // ERROR "leaking closure reference p$"
+               ch <- p
        }()
 }
 
@@ -1204,7 +1204,7 @@ func foo126() {
                // loopdepth 1
                var i int // ERROR "moved to heap: i$"
                func() {  // ERROR "foo126 func literal does not escape$"
-                       px = &i // ERROR "leaking closure reference i"
+                       px = &i
                }()
        }
        _ = px
@@ -1230,9 +1230,9 @@ func foo129() {
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo129 func literal does not escape$"
-               q := p   // ERROR "leaking closure reference p$"
+               q := p
                func() { // ERROR "foo129.func1 func literal does not escape$"
-                       r := q // ERROR "leaking closure reference q$"
+                       r := q
                        px = r
                }()
        }()
@@ -1242,7 +1242,7 @@ func foo130() {
        for {
                var i int // ERROR "moved to heap: i$"
                func() {  // ERROR "foo130 func literal does not escape$"
-                       px = &i // ERROR "leaking closure reference i$"
+                       px = &i
                }()
        }
 }
@@ -1250,21 +1250,21 @@ func foo130() {
 func foo131() {
        var i int // ERROR "moved to heap: i$"
        func() {  // ERROR "foo131 func literal does not escape$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
 func foo132() {
        var i int   // ERROR "moved to heap: i$"
        go func() { // ERROR "func literal escapes to heap$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
 func foo133() {
        var i int      // ERROR "moved to heap: i$"
        defer func() { // ERROR "foo133 func literal does not escape$"
-               px = &i // ERROR "leaking closure reference i$"
+               px = &i
        }()
 }
 
@@ -1296,9 +1296,9 @@ func foo136() {
        var i int   // ERROR "moved to heap: i$"
        p := &i
        go func() { // ERROR "func literal escapes to heap$"
-               q := p   // ERROR "leaking closure reference p$"
+               q := p
                func() { // ERROR "foo136.func1 func literal does not escape$"
-                       r := q // ERROR "leaking closure reference q$"
+                       r := q
                        px = r
                }()
        }()
@@ -1308,7 +1308,7 @@ func foo137() {
        var i int // ERROR "moved to heap: i$"
        p := &i
        func() {  // ERROR "foo137 func literal does not escape$"
-               q := p      // ERROR "leaking closure reference p$"
+               q := p
                go func() { // ERROR "func literal escapes to heap$"
                        r := q
                        _ = r
index 231186ca1fdeb3e121f91952be30a6513ba5e4f6..d363b98eac3cb06869557f049f270ba9ba595728 100644 (file)
@@ -26,7 +26,7 @@ func bff(a, b *string) U { // ERROR "leaking param: a to result ~r2 level=0$" "l
 
 func tbff1() *string {
        a := "cat"
-       b := "dog"       // ERROR "moved to heap: b$"
+       b := "dog" // ERROR "moved to heap: b$"
        u := bff(&a, &b)
        _ = u[0]
        return &b
@@ -34,8 +34,8 @@ func tbff1() *string {
 
 // BAD: need fine-grained analysis to track u[0] and u[1] differently.
 func tbff2() *string {
-       a := "cat"       // ERROR "moved to heap: a$"
-       b := "dog"       // ERROR "moved to heap: b$"
+       a := "cat" // ERROR "moved to heap: a$"
+       b := "dog" // ERROR "moved to heap: b$"
        u := bff(&a, &b)
        _ = u[0]
        return u[1]
@@ -71,7 +71,7 @@ func fuo(x *U, y *U) *string { // ERROR "leaking param: x to result ~r2 level=1$
 // pointers stored in small array literals do not escape;
 // large array literals are heap allocated;
 // pointers stored in large array literals escape.
-func hugeLeaks1(x **string, y **string) { // ERROR "leaking param content: x" "hugeLeaks1 y does not escape" "mark escaped content: x"
+func hugeLeaks1(x **string, y **string) { // ERROR "leaking param content: x" "hugeLeaks1 y does not escape"
        a := [10]*string{*y}
        _ = a
        // 4 x 4,000,000 exceeds MaxStackVarSize, therefore it must be heap allocated if pointers are 4 bytes or larger.