// run

// Copyright 2012 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.

// Issue 4518. In some circumstances "return F(...)"
// where F has multiple returns is miscompiled by 6g due to
// bold assumptions in componentgen.

package main

func DontInline() {}

func F(e interface{}) (int, int) {
	DontInline()
	return 3, 7
}

func G() (int, int) {
	DontInline()
	return 3, 7
}

func bogus1(d interface{}) (int, int) {
	switch {
	default:
		return F(d)
	}
	return 0, 0
}

func bogus2() (int, int) {
	switch {
	default:
		return F(3)
	}
	return 0, 0
}

func bogus3(d interface{}) (int, int) {
	switch {
	default:
		return G()
	}
	return 0, 0
}

func bogus4() (int, int) {
	switch {
	default:
		return G()
	}
	return 0, 0
}

func check(a, b int) {
	if a != 3 || b != 7 {
		println(a, b)
		panic("a != 3 || b != 7")
	}
}

func main() {
	check(bogus1(42))
	check(bogus2())
}
