aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/gc
diff options
context:
space:
mode:
authorShenghou Ma <minux@golang.org>2015-01-31 02:50:56 -0500
committerMinux Ma <minux@golang.org>2015-02-02 14:14:21 +0000
commit3bf005cea365639bb65cd52d9eebe7601ab5a74f (patch)
treef9045e05fe2f1789ff0a02881f78d330082894df /src/cmd/gc
parent09114fb359e5666f2fe557db063bcd460476cc72 (diff)
downloadgo-3bf005cea365639bb65cd52d9eebe7601ab5a74f.tar.xz
cmd/gc: always treat the output parameters as having been assigned in capturevars.
Fixes #9738. Change-Id: Iab75de2d78335d4e31c3dce6a0e1826d8cddf5f3 Reviewed-on: https://go-review.googlesource.com/3690 Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Diffstat (limited to 'src/cmd/gc')
-rw-r--r--src/cmd/gc/closure.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/cmd/gc/closure.c b/src/cmd/gc/closure.c
index b067228052..5d25ffe4ad 100644
--- a/src/cmd/gc/closure.c
+++ b/src/cmd/gc/closure.c
@@ -209,7 +209,8 @@ capturevars(Node *xfunc)
dowidth(v->type);
outer = v->outerexpr;
v->outerexpr = N;
- if(!v->closure->addrtaken && !v->closure->assigned && v->type->width <= 128)
+ // out parameters will be assigned to implicitly upon return.
+ if(outer->class != PPARAMOUT && !v->closure->addrtaken && !v->closure->assigned && v->type->width <= 128)
v->byval = 1;
else {
outer = nod(OADDR, outer, N);