1
0
mirror of https://github.com/golang/go synced 2024-11-22 02:34:40 -07:00

cmd/gc: fix escape analysis ordering

Functions without bodies were excluded from the ordering logic,
because when I wrote the ordering logic there was no reason to
analyze them.

But then we added //go:noescape tags that need analysis, and we
didn't update the ordering logic.

So in the absence of good ordering, //go:noescape only worked
if it appeared before the use in the source code.

Fixes #5773.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/10570043
This commit is contained in:
Russ Cox 2013-06-25 17:28:49 -04:00
parent a14e143c21
commit 148fac79a3
2 changed files with 20 additions and 1 deletions

View File

@ -144,7 +144,7 @@ visitcode(Node *n, uint32 min)
fn = n->left;
if(n->op == OCALLMETH)
fn = n->left->right->sym->def;
if(fn && fn->op == ONAME && fn->class == PFUNC && fn->defn && fn->defn->nbody)
if(fn && fn->op == ONAME && fn->class == PFUNC && fn->defn)
if((m = visit(fn->defn)) < min)
min = m;
}

View File

@ -1337,3 +1337,22 @@ func foo143() {
}()
}
}
// issue 5773
// Check that annotations take effect regardless of whether they
// are before or after the use in the source code.
//go:noescape
func foo144a(*int)
func foo144() {
var x int
foo144a(&x) // ERROR "&x does not escape"
var y int
foo144b(&y) // ERROR "&y does not escape"
}
//go:noescape
func foo144b(*int)