summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/gc/typecheck.c2
-rw-r--r--test/cmplx.go31
2 files changed, 32 insertions, 1 deletions
diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c
index 8c8646e41..d6df9ddb4 100644
--- a/src/cmd/gc/typecheck.c
+++ b/src/cmd/gc/typecheck.c
@@ -790,7 +790,7 @@ reswitch:
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 000000000..6262c682d
--- /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"
+}