github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/types/testdata/check/importC.go (about)

     1  // -fakeImportC
     2  
     3  // Copyright 2015 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  package importC
     8  
     9  import "C"
    10  import _ /* ERROR `cannot rename import "C"` */ "C"
    11  import foo /* ERROR `cannot rename import "C"` */ "C"
    12  import . /* ERROR `cannot rename import "C"` */ "C"
    13  
    14  // Test cases extracted from issue #22090.
    15  
    16  import "unsafe"
    17  
    18  const _ C.int = 0xff // no error due to invalid constant type
    19  
    20  type T struct {
    21  	Name    string
    22  	Ordinal int
    23  }
    24  
    25  func _(args []T) {
    26  	var s string
    27  	for i, v := range args {
    28  		cname := C.CString(v.Name)
    29  		args[i].Ordinal = int(C.sqlite3_bind_parameter_index(s, cname)) // no error due to i not being "used"
    30  		C.free(unsafe.Pointer(cname))
    31  	}
    32  }
    33  
    34  type CType C.Type
    35  
    36  const _ CType = C.X // no error due to invalid constant type
    37  const _ = C.X
    38  
    39  // Test cases extracted from issue #23712.
    40  
    41  func _() {
    42  	var a [C.ArrayLength]byte
    43  	_ = a[0] // no index out of bounds error here
    44  }
    45  
    46  // Additional tests to verify fix for #23712.
    47  
    48  func _() {
    49  	var a [C.ArrayLength1]byte
    50  	_ = 1 / len(a) // no division by zero error here and below
    51  	_ = 1 / cap(a)
    52  	_ = uint(unsafe.Sizeof(a)) // must not be negative
    53  
    54  	var b [C.ArrayLength2]byte
    55  	a = b // should be valid
    56  }