mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: change Func.{Dcl,Inldcl} from NodeList to slice
A slice uses less memory than a NodeList, and has better memory locality when walking the list. This uncovered a tricky case involving closures: the escape analysis pass when run on a closure was appending to the Dcl list of the OCLOSURE rather than the ODCLFUNC. This happened to work because they shared the same NodeList. Fixed with a change to addrescapes, and a check to Tempname to catch any recurrences. This removes the last use of the listsort function outside of tests. I'll send a separate CL to remove it. Unfortunately, while this passes all tests, it does not pass toolstash -cmp. The problem is that cmpstackvarlt does not fully determine the sort order, and the change from listsort to sort.Sort, while generally desirable, produces a different ordering. I could stage this by first making cmpstackvarlt fully determined, but no matter what toolstash -cmp is going to break at some point. In my casual testing the compiler is 2.2% faster. Update #14473. Change-Id: I367d66daa4ec73ed95c14c66ccda3a2133ad95d5 Reviewed-on: https://go-review.googlesource.com/19919 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
67dbde0d71
commit
b66a892358
21 changed files with 161 additions and 163 deletions
|
|
@ -2564,15 +2564,15 @@ func (p *parser) stmt() *Node {
|
|||
stmt := Nod(ORETURN, nil, nil)
|
||||
stmt.List = results
|
||||
if stmt.List == nil && Curfn != nil {
|
||||
for l := Curfn.Func.Dcl; l != nil; l = l.Next {
|
||||
if l.N.Class == PPARAM {
|
||||
for _, ln := range Curfn.Func.Dcl {
|
||||
if ln.Class == PPARAM {
|
||||
continue
|
||||
}
|
||||
if l.N.Class != PPARAMOUT {
|
||||
if ln.Class != PPARAMOUT {
|
||||
break
|
||||
}
|
||||
if l.N.Sym.Def != l.N {
|
||||
Yyerror("%s is shadowed during return", l.N.Sym.Name)
|
||||
if ln.Sym.Def != ln {
|
||||
Yyerror("%s is shadowed during return", ln.Sym.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue