Initial commit: Go 1.23 release state
This commit is contained in:
146
test/typeparam/issue50417.go
Normal file
146
test/typeparam/issue50417.go
Normal file
@@ -0,0 +1,146 @@
|
||||
// run
|
||||
|
||||
// Copyright 2022 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
|
||||
|
||||
func main() {}
|
||||
|
||||
// Field accesses through type parameters are disabled
|
||||
// until we have a more thorough understanding of the
|
||||
// implications on the spec. See issue #51576.
|
||||
|
||||
/*
|
||||
type Sf struct {
|
||||
f int
|
||||
}
|
||||
|
||||
func f0[P Sf](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
func f0t[P ~struct{ f int }](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f0[Sf]
|
||||
var _ = f0t[Sf]
|
||||
|
||||
func f1[P interface {
|
||||
~struct{ f int }
|
||||
m()
|
||||
}](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
p.m()
|
||||
}
|
||||
|
||||
var _ = f1[Sfm]
|
||||
|
||||
type Sm struct{}
|
||||
|
||||
func (Sm) m() {}
|
||||
|
||||
type Sfm struct {
|
||||
f int
|
||||
}
|
||||
|
||||
func (Sfm) m() {}
|
||||
|
||||
func f2[P interface {
|
||||
Sfm
|
||||
m()
|
||||
}](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
p.m()
|
||||
}
|
||||
|
||||
var _ = f2[Sfm]
|
||||
|
||||
// special case: core type is a named pointer type
|
||||
|
||||
type PSfm *Sfm
|
||||
|
||||
func f3[P interface{ PSfm }](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f3[PSfm]
|
||||
|
||||
// special case: core type is an unnamed pointer type
|
||||
|
||||
func f4[P interface{ *Sfm }](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f4[*Sfm]
|
||||
|
||||
type A int
|
||||
type B int
|
||||
type C float64
|
||||
|
||||
type Int interface {
|
||||
*Sf | A
|
||||
*Sf | B
|
||||
}
|
||||
|
||||
func f5[P Int](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f5[*Sf]
|
||||
|
||||
type Int2 interface {
|
||||
*Sf | A
|
||||
any
|
||||
*Sf | C
|
||||
}
|
||||
|
||||
func f6[P Int2](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f6[*Sf]
|
||||
|
||||
type Int3 interface {
|
||||
Sf
|
||||
~struct{ f int }
|
||||
}
|
||||
|
||||
func f7[P Int3](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f7[Sf]
|
||||
|
||||
type Em1 interface {
|
||||
*Sf | A
|
||||
}
|
||||
|
||||
type Em2 interface {
|
||||
*Sf | B
|
||||
}
|
||||
|
||||
type Int4 interface {
|
||||
Em1
|
||||
Em2
|
||||
any
|
||||
}
|
||||
|
||||
func f8[P Int4](p P) {
|
||||
_ = p.f
|
||||
p.f = 0
|
||||
}
|
||||
|
||||
var _ = f8[*Sf]
|
||||
*/
|
||||
Reference in New Issue
Block a user