1
0
mirror of https://github.com/golang/go synced 2024-07-08 20:29:48 +00:00
go/test/typeparam/issue50417.go
Robert Griesemer 2bf5ae0c28 go/types, types2: rename structuralType/String to coreType/String
This is a pure rename of the respective Go functions/methods
with corresponding adjustments to error messages and tests.
A couple of comments were manually rephrased.

With this change, the implementation and error messages match
the latest spec.

No functionality change.

Change-Id: Iaa92a08b64756356fb2c5abdaca5c943c9105c96
Reviewed-on: https://go-review.googlesource.com/c/go/+/384618
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
2022-02-09 22:58:35 +00:00

141 lines
1.4 KiB
Go

// run -gcflags=-G=3
// 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() {}
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]