aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBranden J Brown <zephyrtronium@gmail.com>2020-10-25 14:26:19 -0400
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2020-10-29 16:47:10 +0000
commit4fb429138881e3fe171e4c2e958ed0da26ddfd9c (patch)
tree1536e989bf91b42352ac09a4829be1b5c1574289 /test
parent25d28ec55aded46e0be9c2298f24287d296a9e47 (diff)
downloadgo-4fb429138881e3fe171e4c2e958ed0da26ddfd9c.tar.gz
go-4fb429138881e3fe171e4c2e958ed0da26ddfd9c.zip
cmd/compile: inline functions evaluated in go and defer statements
The inlining pass previously bailed upon encountering a go or defer statement, so it would not inline functions e.g. used to provide arguments to the deferred function. This change preserves the behavior of not inlining the deferred function itself, but it allows the inlining walk to proceed into its arguments. Fixes #42194 Change-Id: I4e82029d8dcbe69019cc83ae63a4b29af45ec777 Reviewed-on: https://go-review.googlesource.com/c/go/+/264997 Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/inline.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/inline.go b/test/inline.go
index 9b75bc5065..470414f883 100644
--- a/test/inline.go
+++ b/test/inline.go
@@ -246,3 +246,20 @@ func ii() { // ERROR "can inline ii"
f := getMeth(t1) // ERROR "inlining call to getMeth" "t1.meth does not escape"
_ = f(3)
}
+
+// Issue #42194 - make sure that functions evaluated in
+// go and defer statements can be inlined.
+func gd1(int) {
+ defer gd1(gd2()) // ERROR "inlining call to gd2"
+ defer gd3()() // ERROR "inlining call to gd3"
+ go gd1(gd2()) // ERROR "inlining call to gd2"
+ go gd3()() // ERROR "inlining call to gd3"
+}
+
+func gd2() int { // ERROR "can inline gd2"
+ return 1
+}
+
+func gd3() func() { // ERROR "can inline gd3"
+ return ii
+}