mirror of
https://github.com/golang/go
synced 2024-11-25 12:07:56 -07:00
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:
parent
aa1d4170a4
commit
e1f22bdcc5
@ -2514,6 +2514,7 @@ walkcompare(Node **np, NodeList **init)
|
|||||||
expr = nodbool(n->op == OEQ);
|
expr = nodbool(n->op == OEQ);
|
||||||
typecheck(&expr, Erv);
|
typecheck(&expr, Erv);
|
||||||
walkexpr(&expr, init);
|
walkexpr(&expr, init);
|
||||||
|
expr->type = n->type;
|
||||||
*np = expr;
|
*np = expr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2534,6 +2535,7 @@ walkcompare(Node **np, NodeList **init)
|
|||||||
expr = nodbool(n->op == OEQ);
|
expr = nodbool(n->op == OEQ);
|
||||||
typecheck(&expr, Erv);
|
typecheck(&expr, Erv);
|
||||||
walkexpr(&expr, init);
|
walkexpr(&expr, init);
|
||||||
|
expr->type = n->type;
|
||||||
*np = expr;
|
*np = expr;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
39
test/fixedbugs/bug427.go
Normal file
39
test/fixedbugs/bug427.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user