| // 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 |
| } |