Text file src/go/types/testdata/check/conversions.src

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // conversions
     6  
     7  package conversions
     8  
     9  import "unsafe"
    10  
    11  // argument count
    12  var (
    13  	_ = int() /* ERROR "missing argument" */
    14  	_ = int(1, 2 /* ERROR "too many arguments" */ )
    15  )
    16  
    17  // numeric constant conversions are in const1.src.
    18  
    19  func string_conversions() {
    20  	const A = string(65)
    21  	assert(A == "A")
    22  	const E = string(-1)
    23  	assert(E == "\uFFFD")
    24  	assert(E == string(1234567890))
    25  
    26  	type myint int
    27  	assert(A == string(myint(65)))
    28  
    29  	type mystring string
    30  	const _ mystring = mystring("foo")
    31  
    32  	const _ = string(true /* ERROR "cannot convert" */ )
    33  	const _ = string(1.2 /* ERROR "cannot convert" */ )
    34  	const _ = string(nil /* ERROR "cannot convert" */ )
    35  
    36  	// issues 11357, 11353: argument must be of integer type
    37  	_ = string(0.0 /* ERROR "cannot convert" */ )
    38  	_ = string(0i /* ERROR "cannot convert" */ )
    39  	_ = string(1 /* ERROR "cannot convert" */ + 2i)
    40  }
    41  
    42  func interface_conversions() {
    43  	type E interface{}
    44  
    45  	type I1 interface{
    46  		m1()
    47  	}
    48  
    49  	type I2 interface{
    50  		m1()
    51  		m2(x int)
    52  	}
    53  
    54  	type I3 interface{
    55  		m1()
    56  		m2() int
    57  	}
    58  
    59  	var e E
    60  	var i1 I1
    61  	var i2 I2
    62  	var i3 I3
    63  
    64  	_ = E(0)
    65  	_ = E(nil)
    66  	_ = E(e)
    67  	_ = E(i1)
    68  	_ = E(i2)
    69  
    70  	_ = I1(0 /* ERROR "cannot convert" */ )
    71  	_ = I1(nil)
    72  	_ = I1(i1)
    73  	_ = I1(e /* ERROR "cannot convert" */ )
    74  	_ = I1(i2)
    75  
    76  	_ = I2(nil)
    77  	_ = I2(i1 /* ERROR "cannot convert" */ )
    78  	_ = I2(i2)
    79  	_ = I2(i3 /* ERROR "cannot convert" */ )
    80  
    81  	_ = I3(nil)
    82  	_ = I3(i1 /* ERROR "cannot convert" */ )
    83  	_ = I3(i2 /* ERROR "cannot convert" */ )
    84  	_ = I3(i3)
    85  
    86  	// TODO(gri) add more tests, improve error message
    87  }
    88  
    89  func issue6326() {
    90  	type T unsafe.Pointer
    91  	var x T
    92  	_ = uintptr(x) // see issue 6326
    93  }
    94  

View as plain text