github.com/golang/gofrontend@v0.0.0-20240429183944-60f985a78526/libgo/misc/cgo/errors/testdata/issue42580.go (about) 1 // Copyright 2021 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 // Issue 42580: cmd/cgo: shifting identifier position in ast 6 7 package cgotest 8 9 // typedef int (*intFunc) (); 10 // 11 // char* strarg = ""; 12 // 13 // int func_with_char(char* arg, void* dummy) 14 // {return 5;} 15 // 16 // int* get_arr(char* arg, void* dummy) 17 // {return NULL;} 18 import "C" 19 import "unsafe" 20 21 // Test variables 22 var ( 23 checkedPointer = []byte{1} 24 doublePointerChecked = []byte{1} 25 singleInnerPointerChecked = []byte{1} 26 ) 27 28 // This test checks the positions of variable identifiers. 29 // Changing the positions of the test variables idents after this point will break the test. 30 31 func TestSingleArgumentCast() C.int { 32 retcode := C.func_with_char((*C.char)(unsafe.Pointer(&checkedPointer[0])), unsafe.Pointer(C.strarg)) 33 return retcode 34 } 35 36 func TestSingleArgumentCastRecFuncAsSimpleArg() C.int { 37 retcode := C.func_with_char((*C.char)(unsafe.Pointer(C.get_arr((*C.char)(unsafe.Pointer(&singleInnerPointerChecked[0])), unsafe.Pointer(C.strarg)))), nil) 38 return retcode 39 } 40 41 func TestSingleArgumentCastRecFunc() C.int { 42 retcode := C.func_with_char((*C.char)(unsafe.Pointer(C.get_arr((*C.char)(unsafe.Pointer(&doublePointerChecked[0])), unsafe.Pointer(C.strarg)))), unsafe.Pointer(C.strarg)) 43 return retcode 44 }