1 // run 2 3 // Copyright 2014 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 8139. The x.(T) assertions used to write 1 (unexpected) 8 // return byte for the 0-byte return value T. 9 10 package main 11 12 import "fmt" 13 14 type T struct{} 15 16 func (T) M() {} 17 18 type M interface { 19 M() 20 } 21 22 var e interface{} = T{} 23 var i M = T{} 24 var b bool 25 26 func f1() int { 27 if b { 28 return f1() // convince inliner not to inline 29 } 30 z := 0x11223344 31 _ = e.(T) 32 return z 33 } 34 35 func f2() int { 36 if b { 37 return f1() // convince inliner not to inline 38 } 39 z := 0x11223344 40 _ = i.(T) 41 return z 42 } 43 44 func main() { 45 x := f1() 46 y := f2() 47 if x != 0x11223344 || y != 0x11223344 { 48 fmt.Printf("BUG: x=%#x y=%#x, want 0x11223344 for both\n", x, y) 49 } 50 } 51