aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2021-04-02 21:48:00 -0400
committerCherry Zhang <cherryyz@google.com>2021-04-05 17:22:26 +0000
commite617b2b0dd14faddad82599f31f64bce3ff2ca2f (patch)
treed293fac707f6b15149e7b407298ac63cbc10c8ae /src/cmd/compile
parentdcf85b30ba422c50e6e96893a3ed930aea5b6b4a (diff)
downloadgo-e617b2b0dd14faddad82599f31f64bce3ff2ca2f.tar.xz
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 <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/cmd/compile')
-rw-r--r--src/cmd/compile/internal/base/debug.go1
-rw-r--r--src/cmd/compile/internal/ssagen/ssa.go2
2 files changed, 3 insertions, 0 deletions
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())