aboutsummaryrefslogtreecommitdiff
path: root/test/typeparam
diff options
context:
space:
mode:
authorDan Scales <danscales@google.com>2021-07-19 12:41:30 -0700
committerDan Scales <danscales@google.com>2021-07-22 04:45:49 +0000
commit8e9109e95a8c4be92ba018a1353104706acf8466 (patch)
tree02c74b9d2986860bb1fbe2921dec64023cee74ee /test/typeparam
parentee20dff27debb738ca3a89a7a30113771c1c078f (diff)
downloadgo-8e9109e95a8c4be92ba018a1353104706acf8466.tar.gz
go-8e9109e95a8c4be92ba018a1353104706acf8466.zip
[dev.typeparams] Fix problem with 14.go
Removed a case in transformCall() where we were setting a type on n, which isn't needed, since noder2 already set the type of n. More importantly, we are losing information, since the type of the results may be a shape type, but the actual type of call is the known type from types2, which may be a concrete type (in this case Zero[MyInt]). That concrete type will then be used correctly if the concrete result is converted to an interface. If we are inlining the call to Zero[MyInt], we need to add an implicit CONVNOP operation, since we are going to use the result variable directly, which has a shape type. So, add an implicit CONVNOP to remember that the known type is the concrete type. Also cleaned up 14.go a bit, so it is more understandable. Renamed type T to AnyInt, since T is used elsewhere as a type parameter. Reformatted Zero function and added a comment. Change-Id: Id917a2e054e0bbae9bd302232853fa8741d49b64 Reviewed-on: https://go-review.googlesource.com/c/go/+/336430 Trust: Dan Scales <danscales@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/typeparam')
-rw-r--r--test/typeparam/mdempsky/14.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/test/typeparam/mdempsky/14.go b/test/typeparam/mdempsky/14.go
index 61f9436910..ba685bc35c 100644
--- a/test/typeparam/mdempsky/14.go
+++ b/test/typeparam/mdempsky/14.go
@@ -6,11 +6,14 @@
package main
-func Zero[T any]() (_ T) { return }
+// Zero returns the zero value of T
+func Zero[T any]() (_ T) {
+ return
+}
-type T[X any] int
+type AnyInt[X any] int
-func (T[X]) M() {
+func (AnyInt[X]) M() {
var have interface{} = Zero[X]()
var want interface{} = Zero[MyInt]()
@@ -22,7 +25,7 @@ func (T[X]) M() {
type I interface{ M() }
type MyInt int
-type U = T[MyInt]
+type U = AnyInt[MyInt]
var x = U(0)
var i I = x