]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: allow inlining of ORANGE
authornimelehin <nimelehin@gmail.com>
Tue, 19 Oct 2021 15:59:34 +0000 (18:59 +0300)
committerDan Scales <danscales@google.com>
Thu, 28 Oct 2021 14:25:03 +0000 (14:25 +0000)
Updates #14768

Change-Id: I33831f616eae5eeb099033e2b9cf90fa70d6ca86
Reviewed-on: https://go-review.googlesource.com/c/go/+/356869
Run-TryBot: Alberto Donizetti <alb.donizetti@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
Trust: Dan Scales <danscales@google.com>
Trust: Alberto Donizetti <alb.donizetti@gmail.com>

src/cmd/compile/internal/inline/inl.go
test/fixedbugs/issue49100b.go [new file with mode: 0644]
test/fixedbugs/issue49100b.out [new file with mode: 0644]
test/inline.go
test/linkname.dir/linkname1.go

index 483b3d5d46fe6127b03791d6fb27cc7fd6e30243..da905bd627fcd2c3f477baeb7fc434809651b9da 100644 (file)
@@ -358,8 +358,7 @@ func (v *hairyVisitor) doNode(n ir.Node) bool {
                        return true
                }
 
-       case ir.ORANGE,
-               ir.OSELECT,
+       case ir.OSELECT,
                ir.OGO,
                ir.ODEFER,
                ir.ODCLTYPE, // can't print yet
diff --git a/test/fixedbugs/issue49100b.go b/test/fixedbugs/issue49100b.go
new file mode 100644 (file)
index 0000000..992ff96
--- /dev/null
@@ -0,0 +1,27 @@
+// run
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+func r(j int) {
+loop:
+       for i, c := range "goclang" {
+               if i == 2 {
+                       continue loop
+               }
+               println(string(c))
+       }
+}
+
+func main() {
+loop:
+       for j := 0; j < 4; j++ {
+               r(j)
+               if j == 0 {
+                       break loop
+               }
+       }
+}
diff --git a/test/fixedbugs/issue49100b.out b/test/fixedbugs/issue49100b.out
new file mode 100644 (file)
index 0000000..d5abb92
--- /dev/null
@@ -0,0 +1,6 @@
+g
+o
+l
+a
+n
+g
index 599d5233e0f3f2b373c27e56b7d72356cb16e0c4..d0ebe84aa5fcee84106a07fb44e33b8a03c3fb71 100644 (file)
@@ -160,6 +160,19 @@ func switchType(x interface{}) int { // ERROR "can inline switchType" "x does no
        }
 }
 
+func inlineRangeIntoMe(data []int) { // ERROR "can inline inlineRangeIntoMe" "data does not escape"
+       rangeFunc(data, 12) // ERROR "inlining call to rangeFunc"
+}
+
+func rangeFunc(xs []int, b int) int { // ERROR "can inline rangeFunc" "xs does not escape"
+       for i, x := range xs {
+               if x == b {
+                       return i
+               }
+       }
+       return -1
+}
+
 type T struct{}
 
 func (T) meth(int, int) {} // ERROR "can inline T.meth"
index c61a0d7d95ce09259d389d7d1220bd96476dc73b..7d51b94802841f23e34e989dff025f538d15e124 100644 (file)
@@ -1,6 +1,6 @@
 package x
 
-func indexByte(xs []byte, b byte) int { // ERROR "xs does not escape"
+func indexByte(xs []byte, b byte) int { // ERROR "xs does not escape" "can inline indexByte"
        for i, x := range xs {
                if x == b {
                        return i