From e617b2b0dd14faddad82599f31f64bce3ff2ca2f Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Fri, 2 Apr 2021 21:48:00 -0400 Subject: [PATCH] cmd/compile: add a debug flag to enable/disable open-coded defers For debugging. Change-Id: I831947376569cd2285b713ad304329951adf60ab Reviewed-on: https://go-review.googlesource.com/c/go/+/307230 Trust: Cherry Zhang Run-TryBot: Cherry Zhang TryBot-Result: Go Bot Reviewed-by: Than McIntosh Reviewed-by: Austin Clements --- src/cmd/compile/internal/base/debug.go | 1 + src/cmd/compile/internal/ssagen/ssa.go | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/cmd/compile/internal/base/debug.go b/src/cmd/compile/internal/base/debug.go index 7590dc1bfa..71712ab1a5 100644 --- a/src/cmd/compile/internal/base/debug.go +++ b/src/cmd/compile/internal/base/debug.go @@ -39,6 +39,7 @@ type DebugFlags struct { Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"` LocationLists int `help:"print information about DWARF location list creation"` Nil int `help:"print information about nil checks"` + NoOpenDefer int `help:"disable open-coded defers"` PCTab string `help:"print named pc-value table"` Panic int `help:"show all compiler panics"` Slice int `help:"print information about slice compilation"` diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index 67c9e9c198..0a49ca214d 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -470,6 +470,8 @@ func buildssa(fn *ir.Func, worker int) *ssa.Func { s.hasOpenDefers = base.Flag.N == 0 && s.hasdefer && !s.curfn.OpenCodedDeferDisallowed() switch { + case base.Debug.NoOpenDefer != 0: + s.hasOpenDefers = false case s.hasOpenDefers && (base.Ctxt.Flag_shared || base.Ctxt.Flag_dynlink) && base.Ctxt.Arch.Name == "386": // Don't support open-coded defers for 386 ONLY when using shared // libraries, because there is extra code (added by rewriteToUseGot()) -- 2.50.0