1// run
2
3// Copyright 2012 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Issue 4518. In some circumstances "return F(...)"
8// where F has multiple returns is miscompiled by 6g due to
9// bold assumptions in componentgen.
10
11package main
12
13//go:noinline
14func F(e interface{}) (int, int) {
15	return 3, 7
16}
17
18//go:noinline
19func G() (int, int) {
20	return 3, 7
21}
22
23func bogus1(d interface{}) (int, int) {
24	switch {
25	default:
26		return F(d)
27	}
28	return 0, 0
29}
30
31func bogus2() (int, int) {
32	switch {
33	default:
34		return F(3)
35	}
36	return 0, 0
37}
38
39func bogus3(d interface{}) (int, int) {
40	switch {
41	default:
42		return G()
43	}
44	return 0, 0
45}
46
47func bogus4() (int, int) {
48	switch {
49	default:
50		return G()
51	}
52	return 0, 0
53}
54
55func check(a, b int) {
56	if a != 3 || b != 7 {
57		println(a, b)
58		panic("a != 3 || b != 7")
59	}
60}
61
62func main() {
63	check(bogus1(42))
64	check(bogus2())
65}
66