// 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) | |
} | |
} |