Skip to content

Commit

Permalink
cmd/gc: update ideal bool rules to match latest spec
Browse files Browse the repository at this point in the history
Fixes golang#3915.
Fixes golang#3923.

R=ken2
CC=golang-dev
https://golang.org/cl/7281044
  • Loading branch information
rsc committed Feb 3, 2013
1 parent e87cc3d commit 4ad505d
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/cmd/gc/const.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
30 changes: 30 additions & 0 deletions test/const6.go
Original file line number Diff line number Diff line change
@@ -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"
)

0 comments on commit 4ad505d

Please sign in to comment.