]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/gc/gen.go
[dev.ssa] Merge remote-tracking branch 'origin/master' into ssamerge
[gostls13.git] / src / cmd / compile / internal / gc / gen.go
index 721ef31247931150d10b98304cb3b2400f9dd749..ddd864f6098c2f86a005c870f9413fbf310c9c1f 100644 (file)
@@ -76,6 +76,9 @@ func addrescapes(n *Node) {
                        oldfn := Curfn
 
                        Curfn = n.Name.Curfn
+                       if Curfn.Func.Closure != nil && Curfn.Op == OCLOSURE {
+                               Curfn = Curfn.Func.Closure
+                       }
                        n.Name.Heapaddr = temp(Ptrto(n.Type))
                        buf := fmt.Sprintf("&%v", n.Sym)
                        n.Name.Heapaddr.Sym = Lookup(buf)
@@ -218,6 +221,12 @@ func Genlist(l *NodeList) {
        }
 }
 
+func Genslice(l []*Node) {
+       for _, n := range l {
+               gen(n)
+       }
+}
+
 // generate code to start new proc running call n.
 func cgen_proc(n *Node, proc int) {
        switch n.Left.Op {
@@ -587,6 +596,10 @@ func Tempname(nn *Node, t *Type) {
        if Curfn == nil {
                Fatalf("no curfn for tempname")
        }
+       if Curfn.Func.Closure != nil && Curfn.Op == OCLOSURE {
+               Dump("Tempname", Curfn)
+               Fatalf("adding tempname to wrong closure function")
+       }
 
        if t == nil {
                Yyerror("tempname called with nil type")
@@ -606,7 +619,7 @@ func Tempname(nn *Node, t *Type) {
        n.Ullman = 1
        n.Esc = EscNever
        n.Name.Curfn = Curfn
-       Curfn.Func.Dcl = list(Curfn.Func.Dcl, n)
+       Curfn.Func.Dcl = append(Curfn.Func.Dcl, n)
 
        dowidth(t)
        n.Xoffset = 0