From e03f368f68fe17a53450a8e7f8b9b6c12cccdd90 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 8 Mar 2010 14:19:28 -0800 Subject: 5g/6g/8g: fix double function call in slice Fixes issue 654. R=ken2 CC=golang-dev http://codereview.appspot.com/310041 --- src/cmd/gc/subr.c | 3 +++ src/cmd/gc/walk.c | 6 ++++++ 2 files changed, 9 insertions(+) (limited to 'src/cmd/gc') diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index 2cfca1985..eaf673f74 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -2476,6 +2476,9 @@ safeexpr(Node *n, NodeList **init) Node *r; Node *a; + if(n == N) + return N; + switch(n->op) { case ONAME: case OLITERAL: diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index fded073a3..ab4f946bd 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -900,8 +900,11 @@ walkexpr(Node **np, NodeList **init) case OSLICE: walkexpr(&n->left, init); + n->left = safeexpr(n->left, init); walkexpr(&n->right->left, init); + n->right->left = safeexpr(n->right->left, init); walkexpr(&n->right->right, init); + n->right->right = safeexpr(n->right->right, init); // dynamic slice // sliceslice(old []any, lb int, hb int, width int) (ary []any) // sliceslice1(old []any, lb int, width int) (ary []any) @@ -928,8 +931,11 @@ walkexpr(Node **np, NodeList **init) case OSLICEARR: walkexpr(&n->left, init); + n->left = safeexpr(n->left, init); walkexpr(&n->right->left, init); + n->right->left = safeexpr(n->right->left, init); walkexpr(&n->right->right, init); + n->right->right = safeexpr(n->right->right, init); // static slice // slicearray(old *any, nel int, lb int, hb int, width int) (ary []any) t = n->type; -- cgit v1.2.3