// 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 //go:noinline func F(e interface{}) (int, int) { return 3, 7 } //go:noinline func G() (int, int) { 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()) }