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

     1  // run
     2  
     3  // Copyright 2011 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  // Test that dynamic interface checks treat byte=uint8
     8  // and rune=int or rune=int32.
     9  
    10  package main
    11  
    12  func main() {
    13  	var x interface{}
    14  
    15  	x = byte(1)
    16  	switch x.(type) {
    17  	case uint8:
    18  		// ok
    19  	default:
    20  		panic("byte != uint8")
    21  	}
    22  
    23  	x = uint8(2)
    24  	switch x.(type) {
    25  	case byte:
    26  		// ok
    27  	default:
    28  		panic("uint8 != byte")
    29  	}
    30  
    31  	rune32 := false
    32  	x = rune(3)
    33  	switch x.(type) {
    34  	case int:
    35  		// ok
    36  	case int32:
    37  		// must be new code
    38  		rune32 = true
    39  	default:
    40  		panic("rune != int and rune != int32")
    41  	}
    42  
    43  	if rune32 {
    44  		x = int32(4)
    45  	} else {
    46  		x = int(5)
    47  	}
    48  	switch x.(type) {
    49  	case rune:
    50  		// ok
    51  	default:
    52  		panic("int (or int32) != rune")
    53  	}
    54  }