go/test/typeparam/interfacearg.go
Robert Griesemer 37d2219960 [dev.typeparams] cmd/compile/internal/types2: embedded type cannot be a (pointer to) a type parameter
Change-Id: I5eb03ae349925f0799dd866e207221429bc9fb3c
Reviewed-on: https://go-review.googlesource.com/c/go/+/337353
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
2021-07-26 20:53:17 +00:00

45 lines
704 B
Go

// run -gcflags=-G=3
// Copyright 2021 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 main
type I interface{}
type _S[T any] struct {
x *T
}
// F is a non-generic function, but has a type _S[I] which is instantiated from a
// generic type. Test that _S[I] is successfully exported.
func F() {
v := _S[I]{}
if v.x != nil {
panic(v)
}
}
// Testing the various combinations of method expressions.
type S1 struct{}
func (*S1) M() {}
type S2 struct{}
func (S2) M() {}
func _F1[T interface{ M() }](t T) {
_ = T.M
}
func F2() {
_F1(&S1{})
_F1(S2{})
_F1(&S2{})
}
func main() {
F()
F2()
}