| // Copyright 2021 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. | 
 |  | 
 | // Issue 42580: cmd/cgo: shifting identifier position in ast | 
 |  | 
 | package cgotest | 
 |  | 
 | // typedef int (*intFunc) (); | 
 | // | 
 | // char* strarg = ""; | 
 | // | 
 | // int func_with_char(char* arg, void* dummy) | 
 | // {return 5;} | 
 | // | 
 | // int* get_arr(char* arg, void* dummy) | 
 | // {return NULL;} | 
 | import "C" | 
 | import "unsafe" | 
 |  | 
 | // Test variables | 
 | var ( | 
 | 	checkedPointer            = []byte{1} | 
 | 	doublePointerChecked      = []byte{1} | 
 | 	singleInnerPointerChecked = []byte{1} | 
 | ) | 
 |  | 
 | // This test checks the positions of variable identifiers. | 
 | // Changing the positions of the test variables idents after this point will break the test. | 
 |  | 
 | func TestSingleArgumentCast() C.int { | 
 | 	retcode := C.func_with_char((*C.char)(unsafe.Pointer(&checkedPointer[0])), unsafe.Pointer(C.strarg)) | 
 | 	return retcode | 
 | } | 
 |  | 
 | func TestSingleArgumentCastRecFuncAsSimpleArg() C.int { | 
 | 	retcode := C.func_with_char((*C.char)(unsafe.Pointer(C.get_arr((*C.char)(unsafe.Pointer(&singleInnerPointerChecked[0])), unsafe.Pointer(C.strarg)))), nil) | 
 | 	return retcode | 
 | } | 
 |  | 
 | func TestSingleArgumentCastRecFunc() C.int { | 
 | 	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)) | 
 | 	return retcode | 
 | } |