From 5f5422a2ddcfcec8282bc2fde0729083eeeb2926 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Tue, 21 Jun 2022 07:07:41 -0700 Subject: [dev.unified] cmd/compile/internal/noder: start writing implicit conversions This CL adds support for implicit conversions to the unified IR export data format, and starts inserting them in a few low-hanging places (send statements, index expressions). Subsequentl CLs will handle the remaining trickier cases. Change-Id: Iaea9d1c5df8432b61bd82578ab2ef02adaf26367 Reviewed-on: https://go-review.googlesource.com/c/go/+/413396 Run-TryBot: Matthew Dempsky Reviewed-by: Keith Randall Reviewed-by: David Chase TryBot-Result: Gopher Robot --- src/cmd/compile/internal/noder/reader.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/cmd/compile/internal/noder/reader.go') diff --git a/src/cmd/compile/internal/noder/reader.go b/src/cmd/compile/internal/noder/reader.go index bed56d1be7..fed500bcf1 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -1782,6 +1782,7 @@ func (r *reader) expr() (res ir.Node) { return typecheck.Expr(ir.NewUnaryExpr(pos, ir.ONEW, typ)) case exprConvert: + implicit := r.Bool() typ := r.typ() pos := r.pos() x := r.expr() @@ -1799,7 +1800,11 @@ func (r *reader) expr() (res ir.Node) { base.ErrorExit() // harsh, but prevents constructing invalid IR } - return typecheck.Expr(ir.NewConvExpr(pos, ir.OCONV, typ, x)) + n := typecheck.Expr(ir.NewConvExpr(pos, ir.OCONV, typ, x)) + if implicit && n.Op() != ir.OLITERAL { + n.(ImplicitNode).SetImplicit(true) + } + return n } } -- cgit v1.3