|  | // run | 
|  |  | 
|  | // Copyright 2014 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 8139. The x.(T) assertions used to write 1 (unexpected) | 
|  | // return byte for the 0-byte return value T. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "fmt" | 
|  |  | 
|  | type T struct{} | 
|  |  | 
|  | func (T) M() {} | 
|  |  | 
|  | type M interface { | 
|  | M() | 
|  | } | 
|  |  | 
|  | var e interface{} = T{} | 
|  | var i M = T{} | 
|  | var b bool | 
|  |  | 
|  | func f1() int { | 
|  | if b { | 
|  | return f1() // convince inliner not to inline | 
|  | } | 
|  | z := 0x11223344 | 
|  | _ = e.(T) | 
|  | return z | 
|  | } | 
|  |  | 
|  | func f2() int { | 
|  | if b { | 
|  | return f1() // convince inliner not to inline | 
|  | } | 
|  | z := 0x11223344 | 
|  | _ = i.(T) | 
|  | return z | 
|  | } | 
|  |  | 
|  | func main() { | 
|  | x := f1() | 
|  | y := f2() | 
|  | if x != 0x11223344 || y != 0x11223344 { | 
|  | fmt.Printf("BUG: x=%#x y=%#x, want 0x11223344 for both\n", x, y) | 
|  | } | 
|  | } |