mirror of
https://github.com/golang/go
synced 2024-11-25 02:17:57 -07:00
go/types, types2: add test for receiver type parameters
Issue #51503 was fixed with the rewrite in CL 594740. Add a respective test case. Fixes #51503. For #51343. Change-Id: Iff9e7e3274c5ad40789e107b6f62d17e335e2428 Reviewed-on: https://go-review.googlesource.com/c/go/+/595697 Reviewed-by: Robert Griesemer <gri@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
ea82219d1c
commit
9e40780a46
31
src/internal/types/testdata/fixedbugs/issue51503.go
vendored
Normal file
31
src/internal/types/testdata/fixedbugs/issue51503.go
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Copyright 2024 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 p
|
||||||
|
|
||||||
|
type T[T any] struct{}
|
||||||
|
|
||||||
|
// The inner T in T[T] must not conflict with the receiver base type T.
|
||||||
|
func (T[T]) m1() {}
|
||||||
|
|
||||||
|
// The receiver parameter r is declared after the receiver type parameter
|
||||||
|
// r in T[r]. An error is expected for the receiver parameter.
|
||||||
|
func (r /* ERROR "r redeclared" */ T[r]) m2() {}
|
||||||
|
|
||||||
|
type C any
|
||||||
|
|
||||||
|
// The scope of type parameter C starts after the type name (_)
|
||||||
|
// because we want to be able to use type parameters in the type
|
||||||
|
// parameter list. Hence, the 2nd C in the type parameter list below
|
||||||
|
// refers to the first C. Since constraints cannot be type parameters
|
||||||
|
// this is an error.
|
||||||
|
type _[C C /* ERROR "cannot use a type parameter as constraint" */] struct{}
|
||||||
|
|
||||||
|
// Same issue here.
|
||||||
|
func _[C C /* ERROR "cannot use a type parameter as constraint" */]() {}
|
||||||
|
|
||||||
|
// The scope of ordinary parameter C starts after the function signature.
|
||||||
|
// Therefore, the 2nd C in the parameter list below refers to the type C.
|
||||||
|
// This code is correct.
|
||||||
|
func _(C C) {} // okay
|
Loading…
Reference in New Issue
Block a user