diff options
| author | Shenghou Ma <minux@golang.org> | 2015-01-31 02:50:56 -0500 |
|---|---|---|
| committer | Minux Ma <minux@golang.org> | 2015-02-02 14:14:21 +0000 |
| commit | 3bf005cea365639bb65cd52d9eebe7601ab5a74f (patch) | |
| tree | f9045e05fe2f1789ff0a02881f78d330082894df /src/cmd/gc | |
| parent | 09114fb359e5666f2fe557db063bcd460476cc72 (diff) | |
| download | go-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.c | 3 |
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); |
