]> Cypherpunks repositories - gostls13.git/commitdiff
insert ODCL in type switch case.
authorRuss Cox <rsc@golang.org>
Tue, 7 Jul 2009 06:42:57 +0000 (23:42 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 7 Jul 2009 06:42:57 +0000 (23:42 -0700)
needed for heap allocation if variable escapes.

package main
func main(){
var i interface{} = 42;
switch v := i.(type) {
case int:
println(&v, v);
}
}

R=ken
OCL=31245
CL=31245

src/cmd/gc/swt.c

index 6ea8c96288f2f701531234b2dfce896b4752cfce..4347eeac95d25198ba63b6295659bf2f65fb9627 100644 (file)
@@ -680,9 +680,11 @@ static     Node*   boolname;
 Node*
 typeone(Node *t)
 {
-       Node *a, *b;
+       Node *a, *b, *dcl;
 
        a = t->left->left;              // var
+       dcl = nod(ODCL, a, N);
+
        a = nod(OLIST, a, boolname);    // var,bool
 
        b = nod(ODOTTYPE, facename, N);
@@ -693,7 +695,7 @@ typeone(Node *t)
        b = nod(OIF, N, N);
        b->ntest = boolname;
        b->nbody = t->right;            // if bool { goto l }
-       return list(a, b);
+       return list(list(dcl, a), b);
 }
 
 Node*