aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2011-09-19 11:50:53 -0400
committerRuss Cox <rsc@golang.org>2011-09-19 11:50:53 -0400
commitad7dea1e96fdebc682b10e02dd14456cdccf4dfa (patch)
tree4510197b1e2f43f1c6634a2bad45e0212f168a00
parentf554c90cefd27ba6ee884d00dd4c55fa10a86202 (diff)
downloadgo-ad7dea1e96fdebc682b10e02dd14456cdccf4dfa.tar.gz
go-ad7dea1e96fdebc682b10e02dd14456cdccf4dfa.zip
gc: handle complex CONVNOP
Fixes #2256. R=ken2 CC=golang-dev https://golang.org/cl/5044047
-rw-r--r--src/cmd/gc/cplx.c3
-rw-r--r--test/ken/cplx2.go12
2 files changed, 15 insertions, 0 deletions
diff --git a/src/cmd/gc/cplx.c b/src/cmd/gc/cplx.c
index 5bc8d64aa2..52038e71c3 100644
--- a/src/cmd/gc/cplx.c
+++ b/src/cmd/gc/cplx.c
@@ -133,6 +133,9 @@ complexgen(Node *n, Node *res)
dump("\ncomplexgen-n", n);
dump("complexgen-res", res);
}
+
+ while(n->op == OCONVNOP)
+ n = n->left;
// pick off float/complex opcodes
switch(n->op) {
diff --git a/test/ken/cplx2.go b/test/ken/cplx2.go
index b36e93ecd6..89f4a04181 100644
--- a/test/ken/cplx2.go
+++ b/test/ken/cplx2.go
@@ -105,4 +105,16 @@ func main() {
println("opcode x", ce, Ce)
panic("fail")
}
+
+ r32 := real(complex64(ce))
+ if r32 != float32(real(Ce)) {
+ println("real(complex64(ce))", r32, real(Ce))
+ panic("fail")
+ }
+
+ r64 := real(complex128(ce))
+ if r64 != real(Ce) {
+ println("real(complex128(ce))", r64, real(Ce))
+ panic("fail")
+ }
}