From 5188c0b59cfb9f904ece4ee7e8f69d56ab15fbbd Mon Sep 17 00:00:00 2001 From: Daniel Morsing Date: Mon, 26 Nov 2012 22:23:13 +0100 Subject: [PATCH] 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 --- src/cmd/gc/typecheck.c | 5 ++++- test/fixedbugs/issue3924.go | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/issue3924.go 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" -- 2.48.1