aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pratt <mpratt@google.com>2024-04-24 11:19:17 -0400
committerJoedian Reid <joedian@google.com>2024-04-26 16:29:48 +0000
commita7ff78d5854b410f9126c7f807f4bc2fa4234bfd (patch)
tree295642c8e1c931214db306ed1fb722777b7212bc
parent12c11770454d95c0add4ce5620d1e0ddde68063c (diff)
downloadgo-a7ff78d5854b410f9126c7f807f4bc2fa4234bfd.tar.gz
go-a7ff78d5854b410f9126c7f807f4bc2fa4234bfd.zip
[release-branch.go1.22] cmd/compile: bail PGO method lookup on interface types
Interface types don't have concrete method implementations, so it does not make sense to attempt a lookup. An interface method would not normally appear in a PGO profile as it has no symbol in the final binary. However it can appear if the method was concrete when the profile was collected and it has since been refactored to an interface method in the code being compiled. The guards here (OTYPE, !Alias, !IsInterface) now match noder.linker.relocObj, which does a similar iteration of all methods. For #67016. Fixes #67017. Change-Id: I858c58929c890ac0b2019fbd7c99f683ab63f8bb Reviewed-on: https://go-review.googlesource.com/c/go/+/581436 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> (cherry picked from commit 508e76197842792f87504d9f031ce4f7bf453c4f) Reviewed-on: https://go-review.googlesource.com/c/go/+/581438
-rw-r--r--src/cmd/compile/internal/noder/unified.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go
index 492b00d256..562b2e6314 100644
--- a/src/cmd/compile/internal/noder/unified.go
+++ b/src/cmd/compile/internal/noder/unified.go
@@ -120,6 +120,9 @@ func lookupMethod(pkg *types.Pkg, symName string) (*ir.Func, error) {
if name.Alias() {
return nil, fmt.Errorf("type sym %v refers to alias", typ)
}
+ if name.Type().IsInterface() {
+ return nil, fmt.Errorf("type sym %v refers to interface type", typ)
+ }
for _, m := range name.Type().Methods() {
if m.Sym == meth {