cmd/compile: add support for a go:noinline directive
Some tests need to disable inlining of a function. It's currently done
in one of a few ways (adding a function call, an empty switch, or a
defer). Add support for a less fragile 'go:noinline' directive that
prevents inlining.
Fixes #12312
Change-Id: Ife444e13361b4a927709d81aa41e448f32eec8d4
Reviewed-on: https://go-review.googlesource.com/13911
Run-TryBot: Todd Neal <todd@tneal.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
diff --git a/src/cmd/compile/internal/gc/inl.go b/src/cmd/compile/internal/gc/inl.go
index cb165f4..66d5b74 100644
--- a/src/cmd/compile/internal/gc/inl.go
+++ b/src/cmd/compile/internal/gc/inl.go
@@ -106,6 +106,11 @@
Fatalf("caninl no nname %v", Nconv(fn, obj.FmtSign))
}
+ // If marked "go:noinline", don't inline
+ if fn.Func.Noinline {
+ return
+ }
+
// If fn has no body (is defined outside of Go), cannot inline it.
if fn.Nbody == nil {
return