Skip to content

Commit

Permalink
cmd/compile: lvalues are only required for == when calling runtime fns
Browse files Browse the repository at this point in the history
Fixes #18661.

Change-Id: I865802a9b88ab22560c9914a70901d1924242bdc
Reviewed-on: https://go-review.googlesource.com/35236
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
josharian committed Jan 16, 2017
1 parent e83d506 commit 5b708a6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
8 changes: 4 additions & 4 deletions src/cmd/compile/internal/gc/walk.go
Expand Up @@ -3117,12 +3117,12 @@ func walkcompare(n *Node, init *Nodes) *Node {
cmpr = cmpr.Left
}

if !islvalue(cmpl) || !islvalue(cmpr) {
Fatalf("arguments of comparison must be lvalues - %v %v", cmpl, cmpr)
}

// Chose not to inline. Call equality function directly.
if !inline {
if !islvalue(cmpl) || !islvalue(cmpr) {
Fatalf("arguments of comparison must be lvalues - %v %v", cmpl, cmpr)
}

// eq algs take pointers
pl := temp(ptrto(t))
al := nod(OAS, pl, nod(OADDR, cmpl, nil))
Expand Down
18 changes: 18 additions & 0 deletions test/fixedbugs/issue18661.go
@@ -0,0 +1,18 @@
// compile

// Copyright 2017 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.

package p

var (
e interface{}
s = struct{ a *int }{}
b = e == s
)

func test(obj interface{}) {
if obj != struct{ a *string }{} {
}
}

0 comments on commit 5b708a6

Please sign in to comment.