From: Russ Cox Date: Mon, 19 Apr 2010 16:21:51 +0000 (-0700) Subject: gc: cmplx typecheck bug fix X-Git-Tag: weekly.2010-04-27~74 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d97bbabbaaeb28e374267c19aae5072d356c1353;p=gostls13.git 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 8c8646e411..d6df9ddb4f 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 0000000000..6262c682d0 --- /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" +}