src/cmd/compile/internal/noder/writer.go | 2 +- test/fixedbugs/issue81165.go | 26 ++++++++++++++++++++++++++ diff --git a/src/cmd/compile/internal/noder/writer.go b/src/cmd/compile/internal/noder/writer.go index 92f0100ae64b4f608789dc4401403ac8a09a5442..bcc68bbc81b910205590c5e6ec9c14966d4d5ff3 100644 --- a/src/cmd/compile/internal/noder/writer.go +++ b/src/cmd/compile/internal/noder/writer.go @@ -1088,7 +1088,7 @@ // They must be contextualized by their defining type. if isGenericMethod(obj.Type()) { recv := obj.Type().(*types2.Signature).Recv().Type() fstr := "%s.%s" - if _, ok := recv.(*types2.Pointer); ok { + if _, ok := types2.Unalias(recv).(*types2.Pointer); ok { fstr = "(*%s).%s" } name = fmt.Sprintf(fstr, types2.Unalias(deref2(recv)).(*types2.Named).Obj().Name(), name) diff --git a/test/fixedbugs/issue81165.go b/test/fixedbugs/issue81165.go new file mode 100644 index 0000000000000000000000000000000000000000..31c5dd4b07a1b4d5db2f95a26b62aa10c01f9e98 --- /dev/null +++ b/test/fixedbugs/issue81165.go @@ -0,0 +1,26 @@ +// build + +// Copyright 2026 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 someType struct{} +type someTypeAlias = *someType + +//go:noinline +func (tm someTypeAlias) FailedLink[T any](v T) { + println(v) +} + +//go:noinline +func (tm *someType) SuccessLink[T any](v T) { + println(v) +} + +func main() { + var value someType + value.SuccessLink(42) + value.FailedLink(42) +}