From: Daniel Morsing Date: Mon, 26 Nov 2012 21:23:13 +0000 (+0100) Subject: cmd/gc: Make sure bools lose idealness when used with logical operators. X-Git-Tag: go1.1rc2~1782 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5188c0b59cfb9f904ece4ee7e8f69d56ab15fbbd;p=gostls13.git cmd/gc: Make sure bools lose idealness when used with logical operators. Bools from comparisons can be assigned to all bool types, but this idealness would propagate through logical operators when the result should have been lowered to a non-ideal form. Fixes #3924. R=golang-dev, remyoudompheng, r, rsc, mtj CC=golang-dev https://golang.org/cl/6855061 --- diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 3b32de2116..2b6af2b6de 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -614,7 +614,10 @@ reswitch: n->left = l; n->right = r; } - } + // non-comparison operators on ideal bools should make them lose their ideal-ness + } else if(t == idealbool) + t = types[TBOOL]; + if(et == TSTRING) { if(iscmp[n->op]) { n->etype = n->op; diff --git a/test/fixedbugs/issue3924.go b/test/fixedbugs/issue3924.go new file mode 100644 index 0000000000..d4739b21c9 --- /dev/null +++ b/test/fixedbugs/issue3924.go @@ -0,0 +1,13 @@ +// errorcheck + +// Copyright 2012 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 foo + +type mybool bool + +var x, y = 1, 2 +var _ mybool = x < y && x < y // ERROR "cannot use" +var _ mybool = x < y || x < y // ERROR "cannot use"