Commit 5b708a6b authored by Josh Bleecher Snyder's avatar Josh Bleecher Snyder

cmd/compile: lvalues are only required for == when calling runtime fns

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: 's avatarIan Lance Taylor <iant@golang.org>
parent e83d5067
...@@ -3117,12 +3117,12 @@ func walkcompare(n *Node, init *Nodes) *Node { ...@@ -3117,12 +3117,12 @@ func walkcompare(n *Node, init *Nodes) *Node {
cmpr = cmpr.Left cmpr = cmpr.Left
} }
// Chose not to inline. Call equality function directly.
if !inline {
if !islvalue(cmpl) || !islvalue(cmpr) { if !islvalue(cmpl) || !islvalue(cmpr) {
Fatalf("arguments of comparison must be lvalues - %v %v", cmpl, cmpr) Fatalf("arguments of comparison must be lvalues - %v %v", cmpl, cmpr)
} }
// Chose not to inline. Call equality function directly.
if !inline {
// eq algs take pointers // eq algs take pointers
pl := temp(ptrto(t)) pl := temp(ptrto(t))
al := nod(OAS, pl, nod(OADDR, cmpl, nil)) al := nod(OAS, pl, nod(OADDR, cmpl, nil))
......
// 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 }{} {
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment