0
1
mirror of https://github.com/golang/go synced 2025-05-06 03:31:35 +00:00

cmd/gc: update ideal bool rules to match latest spec

Fixes .
Fixes .

R=ken2
CC=golang-dev
https://golang.org/cl/7281044
This commit is contained in:
Russ Cox
2013-02-03 01:44:03 -05:00
parent e87cc3dc5b
commit 4ad505d102
2 changed files with 36 additions and 3 deletions
src/cmd/gc
test

@ -78,7 +78,6 @@ convlit1(Node **np, Type *t, int explicit)
if(!explicit && !isideal(n->type))
return;
if(n->op == OLITERAL) {
nn = nod(OXXX, N, N);
*nn = *n;
@ -88,8 +87,12 @@ convlit1(Node **np, Type *t, int explicit)
switch(n->op) {
default:
if(n->type == idealbool)
n->type = types[TBOOL];
if(n->type == idealbool) {
if(t->etype == TBOOL)
n->type = t;
else
n->type = types[TBOOL];
}
if(n->type->etype == TIDEAL) {
convlit(&n->left, t);
convlit(&n->right, t);

30
test/const6.go Normal file

@ -0,0 +1,30 @@
// errorcheck
// Copyright 2013 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.
// Ideal vs non-ideal bool. See issue 3915, 3923.
package p
type mybool bool
type mybool1 bool
var (
x, y int = 1, 2
c1 bool = x < y
c2 mybool = x < y
c3 mybool = c2 == (x < y)
c4 mybool = c2 == (1 < 2)
c5 mybool = 1 < 2
c6 mybool1 = x < y
c7 = c1 == c2 // ERROR "mismatched types"
c8 = c2 == c6 // ERROR "mismatched types"
c9 = c1 == c6 // ERROR "mismatched types"
_ = c2 && (x < y)
_ = c2 && (1 < 2)
_ = c1 && c2 // ERROR "mismatched types"
_ = c2 && c6 // ERROR "mismatched types"
_ = c1 && c6 // ERROR "mismatched types"
)