diff options
author | Anthony Martin <ality@pbrane.org> | 2012-03-19 15:57:28 -0700 |
---|---|---|
committer | Anthony Martin <ality@pbrane.org> | 2012-03-19 15:57:28 -0700 |
commit | e1f22bdcc56b52a163ecccfe6e95aaf75addcdce (patch) | |
tree | 60080229279c51a1381c6353e4eaeba72136cf70 | |
parent | aa1d4170a4f586bf2d9c68097f049977146bd31c (diff) | |
download | go-e1f22bdcc56b52a163ecccfe6e95aaf75addcdce.tar.gz go-e1f22bdcc56b52a163ecccfe6e95aaf75addcdce.zip |
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
-rw-r--r-- | src/cmd/gc/walk.c | 2 | ||||
-rw-r--r-- | test/fixedbugs/bug427.go | 39 |
2 files changed, 41 insertions, 0 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 0ed68f86b0..5c8282b52e 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -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; } diff --git a/test/fixedbugs/bug427.go b/test/fixedbugs/bug427.go new file mode 100644 index 0000000000..1239e7a332 --- /dev/null +++ b/test/fixedbugs/bug427.go @@ -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 +} |