This test renames a receiver, type parameter, parameter or result var whose name matches a package-level decl. Prior to go1.22, this used to cause a spurious shadowing error because of an edge case in the behavior of types.Scope for function parameters and results. This is a regression test for issue #60752, a bug in the type checker. -- flags -- -min_go=go1.22 -- go.mod -- module example.com go 1.18 -- a/type.go -- package a type t int -- a/recv.go -- package a func (v t) _() {} //@ rename("v", "t", recv) -- a/param.go -- package a func _(v t) {} //@ rename("v", "t", param) -- a/result.go -- package a func _() (v t) { return } //@ rename("v", "t", result) -- a/typeparam.go -- package a func _[v t]() {} //@ renameerr("v", "t", re"would shadow (.|\n)*type.go:3:6") -- b/b.go -- package b import _ "example.com/a" -- @param/a/param.go -- @@ -3 +3 @@ -func _(v t) {} //@ rename("v", "t", param) +func _(t t) {} //@ rename("v", "t", param) -- @recv/a/recv.go -- @@ -3 +3 @@ -func (v t) _() {} //@ rename("v", "t", recv) +func (t t) _() {} //@ rename("v", "t", recv) -- @result/a/result.go -- @@ -3 +3 @@ -func _() (v t) { return } //@ rename("v", "t", result) +func _() (t t) { return } //@ rename("v", "t", result)