diff options
author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-05-05 09:23:52 +0700 |
---|---|---|
committer | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-05-05 18:03:32 +0000 |
commit | 95dde3f0290b0df797770afc899ae977ed89833e (patch) | |
tree | 3e299507c3a804929bfaf6adf81e257418b66aad /src/cmd/compile/internal/inline | |
parent | d0583b131a1c4c99249aa1b158492cd99d7ee904 (diff) | |
download | go-95dde3f0290b0df797770afc899ae977ed89833e.tar.gz go-95dde3f0290b0df797770afc899ae977ed89833e.zip |
cmd/compile: do not substitute OGOTO inside a closure when inlining
The inlsubst already does the same thing for OLABEL, so we must do the
same thing for OGOTO. Otherwise, new inlined OGOTO node will be
associated with non-existed label.
Fixes #45947
Change-Id: I40eef095f57fd3438c38a0b5d9751d5d7ebf759e
Reviewed-on: https://go-review.googlesource.com/c/go/+/316931
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
Diffstat (limited to 'src/cmd/compile/internal/inline')
-rw-r--r-- | src/cmd/compile/internal/inline/inl.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 339ea77509..e07bb3b324 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -1394,6 +1394,10 @@ func (subst *inlsubst) node(n ir.Node) ir.Node { return ir.NewBlockStmt(base.Pos, init) case ir.OGOTO: + if subst.newclofn != nil { + // Don't do special substitutions if inside a closure + break + } n := n.(*ir.BranchStmt) m := ir.Copy(n).(*ir.BranchStmt) m.SetPos(subst.updatedPos(m.Pos())) |