From d1593b7a4a8cd60e30bfc41df83fb22ab8393d51 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Sat, 19 Aug 2023 22:32:08 -0700 Subject: [PATCH] cmd/compile: do some TODOs about Fatalf Separate CL in case I'm mistaken. Change-Id: I6b5fa0efb27a6b4fb4c133698bd7e2f01b4cccdb Reviewed-on: https://go-review.googlesource.com/c/go/+/521195 TryBot-Result: Gopher Robot Reviewed-by: Austin Clements Auto-Submit: Matthew Dempsky Run-TryBot: Matthew Dempsky Reviewed-by: Cuong Manh Le --- .../compile/internal/devirtualize/devirtualize.go | 6 +----- src/cmd/compile/internal/typecheck/expr.go | 12 +++++++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/devirtualize/devirtualize.go b/src/cmd/compile/internal/devirtualize/devirtualize.go index 93882a3496..ae9f24d9a5 100644 --- a/src/cmd/compile/internal/devirtualize/devirtualize.go +++ b/src/cmd/compile/internal/devirtualize/devirtualize.go @@ -129,11 +129,7 @@ func staticCall(call *ir.CallExpr) { call.SetOp(ir.OCALLINTER) call.X = x default: - // TODO(mdempsky): Turn back into Fatalf after more testing. - if base.Flag.LowerM != 0 { - base.WarnfAt(call.Pos(), "failed to devirtualize %v (%v)", x, x.Op()) - } - return + base.FatalfAt(call.Pos(), "failed to devirtualize %v (%v)", x, x.Op()) } // Duplicated logic from typecheck for function call return diff --git a/src/cmd/compile/internal/typecheck/expr.go b/src/cmd/compile/internal/typecheck/expr.go index edf0472567..7e685ab569 100644 --- a/src/cmd/compile/internal/typecheck/expr.go +++ b/src/cmd/compile/internal/typecheck/expr.go @@ -469,7 +469,9 @@ func dot(pos src.XPos, typ *types.Type, op ir.Op, x ir.Node, selection *types.Fi // inserted too. func XDotField(pos src.XPos, x ir.Node, sym *types.Sym) *ir.SelectorExpr { n := Expr(ir.NewSelectorExpr(pos, ir.OXDOT, x, sym)).(*ir.SelectorExpr) - // TODO(mdempsky): Assert n is ODOT/ODOTPTR. + if n.Op() != ir.ODOT && n.Op() != ir.ODOTPTR { + base.FatalfAt(pos, "unexpected result op: %v (%v)", n.Op(), n) + } return n } @@ -483,10 +485,14 @@ func XDotMethod(pos src.XPos, x ir.Node, sym *types.Sym, callee bool) *ir.Select n := ir.NewSelectorExpr(pos, ir.OXDOT, x, sym) if callee { n = Callee(n).(*ir.SelectorExpr) - // TODO(mdempsky): Assert n is ODOTMETH/ODOTINTER. + if n.Op() != ir.ODOTMETH && n.Op() != ir.ODOTINTER { + base.FatalfAt(pos, "unexpected result op: %v (%v)", n.Op(), n) + } } else { n = Expr(n).(*ir.SelectorExpr) - // TODO(mdempsky): Assert n is OMETHVALUE. + if n.Op() != ir.OMETHVALUE { + base.FatalfAt(pos, "unexpected result op: %v (%v)", n.Op(), n) + } } return n } -- 2.50.0