]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix inlining of switch issue
authorTodd Neal <todd@tneal.org>
Sat, 2 Apr 2016 04:28:14 +0000 (23:28 -0500)
committerTodd Neal <todd@tneal.org>
Sat, 2 Apr 2016 12:38:00 +0000 (12:38 +0000)
The issue was seen when inlining an exported function that contained
a fallthrough statement.

Fixes #15071

Change-Id: I1e8215ad49d57673dba7e8f8bd2ed8ad290dc452
Reviewed-on: https://go-review.googlesource.com/21452
Reviewed-by: Dave Cheney <dave@cheney.net>
src/cmd/compile/internal/gc/fmt.go
test/fixedbugs/issue15071.dir/exp/exp.go [new file with mode: 0644]
test/fixedbugs/issue15071.dir/main.go [new file with mode: 0644]

index 7ed08516a0f596189fac626698b64b6bb2a9ac78..72e1bc31424f4587c1e0bbf721e14965358e3e8f 100644 (file)
@@ -189,6 +189,7 @@ var goopnames = []string{
        OSUB:      "-",
        OSWITCH:   "switch",
        OXOR:      "^",
+       OXFALL:    "fallthrough",
 }
 
 // Fmt "%O":  Node opcodes
diff --git a/test/fixedbugs/issue15071.dir/exp/exp.go b/test/fixedbugs/issue15071.dir/exp/exp.go
new file mode 100644 (file)
index 0000000..703f247
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright 2016 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 exp
+
+func Exported(x int) int {
+       return inlined(x)
+}
+
+func inlined(x int) int {
+       y := 0
+       switch {
+       case x > 0:
+               y += 5
+               return 0 + y
+       case x < 1:
+               y += 6
+               fallthrough
+       default:
+               y += 7
+               return 2 + y
+       }
+}
diff --git a/test/fixedbugs/issue15071.dir/main.go b/test/fixedbugs/issue15071.dir/main.go
new file mode 100644 (file)
index 0000000..61f2de0
--- /dev/null
@@ -0,0 +1,14 @@
+// run
+
+// Copyright 2016 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
+
+import "os"
+import "./exp"
+
+func main() {
+       _ = exp.Exported(len(os.Args))
+}