gc: fix struct and array comparisons for new bool rules

The two optimizations for small structs and arrays
were missing the implicit cast from ideal bool.

Fixes #3351.

R=rsc, lvd
CC=golang-dev
https://golang.org/cl/5848062
This commit is contained in:
Anthony Martin 2012-03-19 15:57:28 -07:00
parent aa1d4170a4
commit e1f22bdcc5
2 changed files with 41 additions and 0 deletions

View File

@ -2514,6 +2514,7 @@ walkcompare(Node **np, NodeList **init)
expr = nodbool(n->op == OEQ);
typecheck(&expr, Erv);
walkexpr(&expr, init);
expr->type = n->type;
*np = expr;
return;
}
@ -2534,6 +2535,7 @@ walkcompare(Node **np, NodeList **init)
expr = nodbool(n->op == OEQ);
typecheck(&expr, Erv);
walkexpr(&expr, init);
expr->type = n->type;
*np = expr;
return;
}

39
test/fixedbugs/bug427.go Normal file
View File

@ -0,0 +1,39 @@
// compile
// 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.
// http://code.google.com/p/go/issues/detail?id=3351
package main
// struct with four fields of basic type
type S struct {a, b, c, d int}
// struct with five fields of basic type
type T struct {a, b, c, d, e int}
// array with four elements
type A [4]int
// array with five elements
type B [5]int
func main() {
var i interface{}
var s1, s2 S
i = s1 == s2
var t1, t2 T
i = t1 == t2
var a1, a2 A
i = a1 == a2
var b1, b2 B
i = b1 == b2
_ = i
}