Commit 4ad505d1 authored by Russ Cox's avatar Russ Cox

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

Fixes #3915.
Fixes #3923.

R=ken2
CC=golang-dev
https://golang.org/cl/7281044
parent e87cc3dc
......@@ -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);
......
// 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"
)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment