-
Notifications
You must be signed in to change notification settings - Fork 17.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmd/cgo: typedef pointer arguments regression #27340
Comments
git bisect points to 94076fe |
Splitting up the typedef fixes the warning and the build failure, but this is package main
// typedef struct { int a; } S;
// typedef S *PTRS;
//
// void cfuncptr(PTRS s) {}
import "C"
func main() {
var s C.S
C.cfuncptr(C.PTRS(&s))
} |
CC @randall77 Well this looks really painful. |
@gopherbot please file this to be considered for backport to 1.11 and 1.10. This is a regression. |
Backport issue(s) opened: #27395 (for 1.11), #27396 (for 1.10). Remember to create the cherry-pick CL(s) as soon as the patch is submitted to master, according to https://golang.org/wiki/MinorReleases. |
@randall77 Any ideas on this one? |
The breaking change seems to have been https://golang.org/cl/122575 for #24161. Before that change _cgo_gotypes.go has this: type _Ctype_PTRS *_Ctype_struct___0
type _Ctype_S = _Ctype_struct___0
type _Ctype_struct___0 struct {
a _Ctype_int
}
func _Cfunc_cfuncptr(p0 *_Ctype_struct___0) (r1 _Ctype_void) { After that change the file has this: type _Ctype_PTRS *_Ctype_struct___0
type _Ctype_S = _Ctype_struct___0
type _Ctype_struct___0 struct {
a _Ctype_int
}
type _Ctype_struct___1 struct {
a _Ctype_int
}
func _Cfunc_cfuncptr(p0 *_Ctype_struct___1) (r1 _Ctype_void) { Either way the generated .cgo1.go file has this: var s _Ctype_struct___0
(_Cfunc_cfuncptr)(_Ctype_PTRS(&s)) So the problem seems to be this introduced |
Change https://golang.org/cl/152762 mentions this issue: |
Change https://golang.org/cl/154277 mentions this issue: |
…dDWARF loop CL 122575 and its successors introduced a loop calling loadDWARF, whereas before we only called it once. Pass a single typeConv to each call, rather than creating a new one in loadDWARF itself. Change the maps from dwarf.Type to use string keys rather than dwarf.Type keys, since when the DWARF is reloaded the dwarf.Type pointers will be different. These changes permit typeConv.Type to return a consistent value for a given DWARF type, avoiding spurious type conversion errors due to typedefs loaded after the first loop iteration. Updates #27340 Fixes #27395 Change-Id: Ic33467bbfca4c54e95909621b35ba2a58216d96e Reviewed-on: https://go-review.googlesource.com/c/152762 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org> (cherry picked from commit 6d43587) Reviewed-on: https://go-review.googlesource.com/c/154277 Run-TryBot: Filippo Valsorda <filippo@golang.org>
There seems to be a regression regarding calling C functions with typedef pointer arguments in go 1.11/1.10.4
The following code
previously generated a C compiler warning (#19832). With go 1.11 (and go 1.10.4) this results in a build failure
The text was updated successfully, but these errors were encountered: