modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/fixedbugs/issue8139.go (about)

     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  }