diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 8c8646e411c..d6df9ddb4f0 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 00000000000..6262c682d0b --- /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" +}