From 0417aafe755acc5eb0cac0a030de08216e44488b Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 6 Jul 2009 23:42:57 -0700 Subject: [PATCH] insert ODCL in type switch case. 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 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cmd/gc/swt.c b/src/cmd/gc/swt.c index 6ea8c96288..4347eeac95 100644 --- a/src/cmd/gc/swt.c +++ b/src/cmd/gc/swt.c @@ -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* -- 2.48.1