From ac8d97b6796aad8ca33db9d377064ddb3952a834 Mon Sep 17 00:00:00 2001 From: Todd Neal Date: Fri, 1 Apr 2016 23:28:14 -0500 Subject: [PATCH] cmd/compile: fix inlining of switch issue 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 --- src/cmd/compile/internal/gc/fmt.go | 1 + test/fixedbugs/issue15071.dir/exp/exp.go | 24 ++++++++++++++++++++++++ test/fixedbugs/issue15071.dir/main.go | 14 ++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 test/fixedbugs/issue15071.dir/exp/exp.go create mode 100644 test/fixedbugs/issue15071.dir/main.go diff --git a/src/cmd/compile/internal/gc/fmt.go b/src/cmd/compile/internal/gc/fmt.go index 7ed08516a0..72e1bc3142 100644 --- a/src/cmd/compile/internal/gc/fmt.go +++ b/src/cmd/compile/internal/gc/fmt.go @@ -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 index 0000000000..703f247249 --- /dev/null +++ b/test/fixedbugs/issue15071.dir/exp/exp.go @@ -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 index 0000000000..61f2de0e38 --- /dev/null +++ b/test/fixedbugs/issue15071.dir/main.go @@ -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)) +} -- 2.48.1