Skip to content

Commit 12fe149

Browse files
committed
internal/typeparams: improve the panic in OriginMethod
Improve the panic message to help debug golang/go#61196. Updates golang/go#61196 Change-Id: Ia3ab9583886d67b971914310e82a99a1a2b15a59 Reviewed-on: https://go-review.googlesource.com/c/tools/+/508795 Run-TryBot: Robert Findley <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Alan Donovan <[email protected]> gopls-CI: kokoro <[email protected]>
1 parent 89d9fae commit 12fe149

File tree

4 files changed

+9
-3
lines changed

4 files changed

+9
-3
lines changed

internal/facts/imports.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func importMap(imports []*types.Package) map[string]*types.Package {
5555
// infinite expansions:
5656
// type N[T any] struct { F *N[N[T]] }
5757
// importMap() is called on such types when Analyzer.RunDespiteErrors is true.
58-
T = typeparams.NamedTypeOrigin(T).(*types.Named)
58+
T = typeparams.NamedTypeOrigin(T)
5959
if !typs[T] {
6060
typs[T] = true
6161
addObj(T.Obj())

internal/typeparams/common.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package typeparams
2424

2525
import (
26+
"fmt"
2627
"go/ast"
2728
"go/token"
2829
"go/types"
@@ -125,6 +126,11 @@ func OriginMethod(fn *types.Func) *types.Func {
125126
}
126127
}
127128

129+
// In golang/go#61196, we observe another crash, this time inexplicable.
130+
if gfn == nil {
131+
panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods()))
132+
}
133+
128134
return gfn.(*types.Func)
129135
}
130136

internal/typeparams/typeparams_go117.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func NamedTypeArgs(*types.Named) *TypeList {
129129
}
130130

131131
// NamedTypeOrigin is the identity method at this Go version.
132-
func NamedTypeOrigin(named *types.Named) types.Type {
132+
func NamedTypeOrigin(named *types.Named) *types.Named {
133133
return named
134134
}
135135

internal/typeparams/typeparams_go118.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func NamedTypeArgs(named *types.Named) *TypeList {
103103
}
104104

105105
// NamedTypeOrigin returns named.Orig().
106-
func NamedTypeOrigin(named *types.Named) types.Type {
106+
func NamedTypeOrigin(named *types.Named) *types.Named {
107107
return named.Origin()
108108
}
109109

0 commit comments

Comments
 (0)