From 5ad9e2db28a9058547983a85cfd2883788d5a704 Mon Sep 17 00:00:00 2001 From: Luuk van Dijk Date: Mon, 23 Jan 2012 16:56:57 +0100 Subject: [PATCH] gc: handle function calls in arguments to builtin complex operations. Fixes #2582 R=rsc CC=golang-dev https://golang.org/cl/5574044 --- src/cmd/gc/cplx.c | 2 ++ test/fixedbugs/bug401.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 test/fixedbugs/bug401.go 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 -- 2.50.0