]> Cypherpunks repositories - gostls13.git/commitdiff
gc: cmplx typecheck bug fix
authorRuss Cox <rsc@golang.org>
Mon, 19 Apr 2010 16:21:51 +0000 (09:21 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 19 Apr 2010 16:21:51 +0000 (09:21 -0700)
Fixes #729.

R=ken2
CC=golang-dev
https://golang.org/cl/875048

src/cmd/gc/typecheck.c
test/cmplx.go [new file with mode: 0644]

index 8c8646e411c9d8bdefdc0eab3db3c1e6625e8113..d6df9ddb4f0ab89da75785bef93e6647d62c6ae3 100644 (file)
@@ -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 (file)
index 0000000..6262c68
--- /dev/null
@@ -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"
+}