Skip to content

Commit

Permalink
gc: fix struct and array comparisons for new bool rules
Browse files Browse the repository at this point in the history
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
  • Loading branch information
ality committed Mar 19, 2012
1 parent aa1d417 commit e1f22bd
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/cmd/gc/walk.c
Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down
39 changes: 39 additions & 0 deletions 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
}

0 comments on commit e1f22bd

Please sign in to comment.