| // Copyright 2015 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. |
| |
| package importC |
| |
| import "C" |
| import _ /* ERROR cannot rename import "C" */ "C" |
| import foo /* ERROR cannot rename import "C" */ "C" |
| import . /* ERROR cannot rename import "C" */ "C" |
| |
| // Test cases extracted from issue #22090. |
| |
| import "unsafe" |
| |
| const _ C.int = 0xff // no error due to invalid constant type |
| |
| type T struct { |
| Name string |
| Ordinal int |
| } |
| |
| func _(args []T) { |
| var s string |
| for i, v := range args { |
| cname := C.CString(v.Name) |
| args[i].Ordinal = int(C.sqlite3_bind_parameter_index(s, cname)) // no error due to i not being "used" |
| C.free(unsafe.Pointer(cname)) |
| } |
| } |
| |
| type CType C.Type |
| |
| const _ CType = C.X // no error due to invalid constant type |
| const _ = C.X |
| |
| // Test cases extracted from issue #23712. |
| |
| func _() { |
| var a [C.ArrayLength]byte |
| _ = a[0] // no index out of bounds error here |
| } |
| |
| // Additional tests to verify fix for #23712. |
| |
| func _() { |
| var a [C.ArrayLength1]byte |
| _ = 1 / len(a) // no division by zero error here and below |
| _ = 1 / cap(a) |
| _ = uint(unsafe.Sizeof(a)) // must not be negative |
| |
| var b [C.ArrayLength2]byte |
| a = b // should be valid |
| } |