From e4b624eae5fa3c51b8ca808da29442d3e3aaef04 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Wed, 31 Aug 2022 13:48:06 -0700 Subject: cmd/compile: use HaveInlineBody for unified IR In go.dev/cl/419674 I added a mechanism to the inliner to allow inlining to fail gracefully when a function body is missing, but I missed we already have a mechanism for that: typecheck.HaveInlineBody. This CL makes it overridable so that unified IR can plug in its appropriate logic, like it does with the logic for building the ir.InlinedCallExpr node. While here, rename inline.NewInline to inline.InlineCall, because the name "NewInline" is now a misnomer since we initialize it to oldInline (now named oldInlineCall). Change-Id: I4e65618d3725919f69e6f43cf409699d20fb797c Reviewed-on: https://go-review.googlesource.com/c/go/+/427234 TryBot-Result: Gopher Robot Reviewed-by: David Chase Run-TryBot: Matthew Dempsky Auto-Submit: Matthew Dempsky --- src/cmd/compile/internal/noder/reader.go | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (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 a34d5c924a..8270c403fe 100644 --- a/src/cmd/compile/internal/noder/reader.go +++ b/src/cmd/compile/internal/noder/reader.go @@ -3374,22 +3374,28 @@ func (r *reader) pkgObjs(target *ir.Package) []*ir.Name { // @@@ Inlining +// unifiedHaveInlineBody reports whether we have the function body for +// fn, so we can inline it. +func unifiedHaveInlineBody(fn *ir.Func) bool { + if fn.Inl == nil { + return false + } + + _, ok := bodyReaderFor(fn) + return ok +} + var inlgen = 0 -// InlineCall implements inline.NewInline by re-reading the function +// unifiedInlineCall implements inline.NewInline by re-reading the function // body from its Unified IR export data. -func InlineCall(call *ir.CallExpr, fn *ir.Func, inlIndex int) *ir.InlinedCallExpr { +func unifiedInlineCall(call *ir.CallExpr, fn *ir.Func, inlIndex int) *ir.InlinedCallExpr { // TODO(mdempsky): Turn callerfn into an explicit parameter. callerfn := ir.CurFunc pri, ok := bodyReaderFor(fn) if !ok { - // TODO(mdempsky): Reconsider this diagnostic's wording, if it's - // to be included in Go 1.20. - if base.Flag.LowerM != 0 { - base.WarnfAt(call.Pos(), "cannot inline call to %v: missing inline body", fn) - } - return nil + base.FatalfAt(call.Pos(), "cannot inline call to %v: missing inline body", fn) } if fn.Inl.Body == nil { -- cgit v1.3