Commit 148fac79 authored by Russ Cox's avatar Russ Cox

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
parent a14e143c
......@@ -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;
}
......
......@@ -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)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment