]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: Make sure bools lose idealness when used with logical operators.
authorDaniel Morsing <daniel.morsing@gmail.com>
Mon, 26 Nov 2012 21:23:13 +0000 (22:23 +0100)
committerDaniel Morsing <daniel.morsing@gmail.com>
Mon, 26 Nov 2012 21:23:13 +0000 (22:23 +0100)
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
test/fixedbugs/issue3924.go [new file with mode: 0644]

index 3b32de21167f851f46309023dca53a354c27839b..2b6af2b6de0f94fa583888960fc7fc351ba01e4a 100644 (file)
@@ -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 (file)
index 0000000..d4739b2
--- /dev/null
@@ -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"