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
// 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
}
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
}