modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue4518.go (about) 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 11 package main 12 13 //go:noinline 14 func F(e interface{}) (int, int) { 15 return 3, 7 16 } 17 18 //go:noinline 19 func G() (int, int) { 20 return 3, 7 21 } 22 23 func bogus1(d interface{}) (int, int) { 24 switch { 25 default: 26 return F(d) 27 } 28 return 0, 0 29 } 30 31 func bogus2() (int, int) { 32 switch { 33 default: 34 return F(3) 35 } 36 return 0, 0 37 } 38 39 func bogus3(d interface{}) (int, int) { 40 switch { 41 default: 42 return G() 43 } 44 return 0, 0 45 } 46 47 func bogus4() (int, int) { 48 switch { 49 default: 50 return G() 51 } 52 return 0, 0 53 } 54 55 func check(a, b int) { 56 if a != 3 || b != 7 { 57 println(a, b) 58 panic("a != 3 || b != 7") 59 } 60 } 61 62 func main() { 63 check(bogus1(42)) 64 check(bogus2()) 65 }