]> Cypherpunks repositories - gostls13.git/commit
cmd/compile: distinguish bound calls/field access in getInstInfo
authorDan Scales <danscales@google.com>
Wed, 19 Jan 2022 22:46:58 +0000 (14:46 -0800)
committerDan Scales <danscales@google.com>
Mon, 24 Jan 2022 17:07:30 +0000 (17:07 +0000)
commitf88c3b9f4d087895c3eab5ac4dd8459c76d0d0d8
treefe44d2cca3e0c41d42a58492628382461372b7c2
parentf9df4ea0c9426eecb93375d31e36cccf95b46e1f
cmd/compile: distinguish bound calls/field access in getInstInfo

Given we have support for field access to type params with a single
structural type, we need to distinguish between methods calls and field
access when we have an OXDOT node on an expression which is a typeparam
(or correspondingly a shape). We were missing checks in getInstInfo,
which figures out the dictionary format, which then caused problems when
we generate the dictionaries. We don't need/want dictionary entries for
field access, only for bound method calls. Added a new function
isBoundMethod() to distinguish OXDOT nodes which are bound calls vs.
field accesses on a shape.

Removed isShapeDeref() - we can't have field access or method call on a
pointer to variable of type param type.

Fixes #50690

Change-Id: Id692f65e6f427f28cd2cfe474dd30e53c71877a7
Reviewed-on: https://go-review.googlesource.com/c/go/+/379674
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/noder/stencil.go
test/typeparam/issue50690a.go [new file with mode: 0644]
test/typeparam/issue50690a.out [new file with mode: 0644]
test/typeparam/issue50690b.go [new file with mode: 0644]
test/typeparam/issue50690b.out [new file with mode: 0644]
test/typeparam/issue50690c.go [new file with mode: 0644]
test/typeparam/issue50690c.out [new file with mode: 0644]