]> Cypherpunks repositories - gostls13.git/commit
[dev.typeparams] cmd/compile: fixing case where type arg is an interface
authorDan Scales <danscales@google.com>
Wed, 4 Aug 2021 21:25:01 +0000 (14:25 -0700)
committerDan Scales <danscales@google.com>
Thu, 5 Aug 2021 17:33:41 +0000 (17:33 +0000)
commit3cdf8b429e7550c04ab986327bf9aed8de08d6fa
tree6684d2e1841466d33c3315e341d75539b4e63725
parent1b708c0260b6627fc23dda30c3f1e691373c032d
[dev.typeparams] cmd/compile: fixing case where type arg is an interface

In this case, we can't use an itab for doing a bound call, since we're
converting from an interface to an interface. We do a static or dynamic
type assert in new function assertToBound().

The dynamic type assert in assertToBound() is only needed if a bound is
parameterized. In that case, we must do a dynamic type assert, and
therefore need a dictionary entry for the type bound (see change in
getGfInfo). I'm not sure if we can somehow limit this case, since using
an interface as a type arg AND having the type bound of the type
arg be parameterized is a very unlikely case.

Had to add the TUNION case to parameterizedBy1() (which is only used for
extra checking).

Added a bunch of these test cases to 13.go, which now passes.

Change-Id: Ic22eed637fa879b5bbb46d36b40aaad6f90b9d01
Reviewed-on: https://go-review.googlesource.com/c/go/+/339898
Trust: Dan Scales <danscales@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/noder/stencil.go
test/run.go
test/typeparam/mdempsky/13.go