gc: handle complex CONVNOP
Fixes #2256.
R=ken2
CC=golang-dev
https://golang.org/cl/5044047
diff --git a/src/cmd/gc/cplx.c b/src/cmd/gc/cplx.c
index 5bc8d64..52038e7 100644
--- a/src/cmd/gc/cplx.c
+++ b/src/cmd/gc/cplx.c
@@ -133,6 +133,9 @@
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 b36e93e..89f4a04 100644
--- a/test/ken/cplx2.go
+++ b/test/ken/cplx2.go
@@ -105,4 +105,16 @@
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")
+ }
}