gc: cmplx typecheck bug fix

Fixes #729.

R=ken2
CC=golang-dev
https://golang.org/cl/875048
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 8c8646e..d6df9dd 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -790,7 +790,7 @@
 		defaultlit2(&l, &r, 0);
 		n->left = l;
 		n->right = r;
-		if(l->type->etype != l->type->etype) {
+		if(l->type->etype != r->type->etype) {
 		badcmplx:
 			yyerror("invalid operation: %#N (cmplx of types %T, %T)", n, l->type, r->type);
 			goto error;
diff --git a/test/cmplx.go b/test/cmplx.go
new file mode 100644
index 0000000..6262c68
--- /dev/null
+++ b/test/cmplx.go
@@ -0,0 +1,31 @@
+// errchk $G -e $D/$F.go
+
+// Copyright 2010 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.
+
+package main
+
+var (
+	f float
+	f32 float32
+	f64 float64
+
+	c complex
+	c64 complex64
+	c128 complex128
+)
+	
+func main() {
+	// ok
+	c = cmplx(f, f)
+	c64 = cmplx(f32, f32)
+	c128 = cmplx(f64, f64)
+
+	_ = cmplx(f, f32)	// ERROR "cmplx"
+	_ = cmplx(f, f64)	// ERROR "cmplx"
+	_ = cmplx(f32, f)	// ERROR "cmplx"
+	_ = cmplx(f32, f64)	// ERROR "cmplx"
+	_ = cmplx(f64, f)	// ERROR "cmplx"
+	_ = cmplx(f64, f32)	// ERROR "cmplx"
+}