aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/devirtualize/devirtualize.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2023-08-18 19:40:33 -0700
committerGopher Robot <gobot@golang.org>2023-08-20 05:57:18 +0000
commit9ac6b00e79312e5ad4665acc063ac7b77becddf8 (patch)
tree42a6c9f97a393b0fbfddfcd4f36deac93c4c0009 /src/cmd/compile/internal/devirtualize/devirtualize.go
parent3761e3fbfd1a1e40074cc123e1912007abfd0e92 (diff)
downloadgo-9ac6b00e79312e5ad4665acc063ac7b77becddf8.tar.xz
cmd/compile/internal/typecheck: add selector helpers
This CL refactors common patterns for constructing field and method selector expressions. Notably, XDotField and XDotMethod are now the only two functions where a SelecterExpr with OXDOT is constructed. Change-Id: I4c087225d8b295c4a6a92281ffcbcabafe2dc94d Reviewed-on: https://go-review.googlesource.com/c/go/+/520979 Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/devirtualize/devirtualize.go')
-rw-r--r--src/cmd/compile/internal/devirtualize/devirtualize.go4
1 files changed, 1 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/devirtualize/devirtualize.go b/src/cmd/compile/internal/devirtualize/devirtualize.go
index b156b66312..93882a3496 100644
--- a/src/cmd/compile/internal/devirtualize/devirtualize.go
+++ b/src/cmd/compile/internal/devirtualize/devirtualize.go
@@ -113,10 +113,9 @@ func staticCall(call *ir.CallExpr) {
dt := ir.NewTypeAssertExpr(sel.Pos(), sel.X, nil)
dt.SetType(typ)
- x := typecheck.Callee(ir.NewSelectorExpr(sel.Pos(), ir.OXDOT, dt, sel.Sel))
+ x := typecheck.XDotMethod(sel.Pos(), dt, sel.Sel, true)
switch x.Op() {
case ir.ODOTMETH:
- x := x.(*ir.SelectorExpr)
if base.Flag.LowerM != 0 {
base.WarnfAt(call.Pos(), "devirtualizing %v to %v", sel, typ)
}
@@ -124,7 +123,6 @@ func staticCall(call *ir.CallExpr) {
call.X = x
case ir.ODOTINTER:
// Promoted method from embedded interface-typed field (#42279).
- x := x.(*ir.SelectorExpr)
if base.Flag.LowerM != 0 {
base.WarnfAt(call.Pos(), "partially devirtualizing %v to %v", sel, typ)
}