From: Luuk van Dijk Date: Mon, 23 Jan 2012 15:56:57 +0000 (+0100) Subject: gc: handle function calls in arguments to builtin complex operations. X-Git-Tag: weekly.2012-01-27~99 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5ad9e2db28a9058547983a85cfd2883788d5a704;p=gostls13.git gc: handle function calls in arguments to builtin complex operations. Fixes #2582 R=rsc CC=golang-dev https://golang.org/cl/5574044 --- diff --git a/src/cmd/gc/cplx.c b/src/cmd/gc/cplx.c index 52038e71c3..dea7bc3bbb 100644 --- a/src/cmd/gc/cplx.c +++ b/src/cmd/gc/cplx.c @@ -204,6 +204,8 @@ complexgen(Node *n, Node *res) case OIND: case ONAME: // PHEAP or PPARAMREF var case OCALLFUNC: + case OCALLMETH: + case OCALLINTER: igen(n, &n1, res); complexmove(&n1, res); regfree(&n1); diff --git a/test/fixedbugs/bug401.go b/test/fixedbugs/bug401.go new file mode 100644 index 0000000000..baad1bc7da --- /dev/null +++ b/test/fixedbugs/bug401.go @@ -0,0 +1,29 @@ +// $G $D/$F.go || echo "Bug398" + +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Issue 2582 +package foo + +type T struct {} +func (T) cplx() complex128 { + for false {} // avoid inlining + return complex(1,0) +} + +type I interface { + cplx() complex128 +} + +func f(e float32, t T) { + + _ = real(t.cplx()) + _ = imag(t.cplx()) + + var i I + i = t + _ = real(i.cplx()) + _ = imag(i.cplx()) +} \ No newline at end of file