From 7dbbb5bacf4e52bc4efbd3caecdebf6ffb730783 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 30 May 2020 16:34:23 +0200 Subject: cmd/cgo,cmd/fix,misc/cgo: map the EGLConfig C type to uintptr in Go Similarly to EGLDisplay, EGLConfig is declared as a pointer but may contain non-pointer values. I believe this is the root cause of https://todo.sr.ht/~eliasnaur/gio/121. Change-Id: I412c4fbc2eef4aa028534d68bda95db98e3a365d Reviewed-on: https://go-review.googlesource.com/c/go/+/235817 Run-TryBot: Elias Naur TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/cgo/doc.go | 9 +++++++-- src/cmd/cgo/gcc.go | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'src/cmd/cgo') diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index 8c3bf81bf7..4366df4b55 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -413,7 +413,7 @@ type in Go are instead represented by a uintptr. Those include: jobjectArray jweak -3. The EGLDisplay type from the EGL API. +3. The EGLDisplay and EGLConfig types from the EGL API. These types are uintptr on the Go side because they would otherwise confuse the Go garbage collector; they are sometimes not really @@ -429,11 +429,16 @@ from Go 1.9 and earlier, use the cftype or jni rewrites in the Go fix tool: It will replace nil with 0 in the appropriate places. -The EGLDisplay case were introduced in Go 1.12. Use the egl rewrite +The EGLDisplay case was introduced in Go 1.12. Use the egl rewrite to auto-update code from Go 1.11 and earlier: go tool fix -r egl +The EGLConfig case was introduced in Go 1.15. Use the eglconf rewrite +to auto-update code from Go 1.14 and earlier: + + go tool fix -r eglconf + Using cgo directly Usage: diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index edcbd8d2d1..d903a7afb5 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -3029,7 +3029,7 @@ func (c *typeConv) badPointerTypedef(dt *dwarf.TypedefType) bool { if c.badJNI(dt) { return true } - if c.badEGLDisplay(dt) { + if c.badEGLType(dt) { return true } return false @@ -3168,11 +3168,11 @@ func (c *typeConv) badJNI(dt *dwarf.TypedefType) bool { return false } -func (c *typeConv) badEGLDisplay(dt *dwarf.TypedefType) bool { - if dt.Name != "EGLDisplay" { +func (c *typeConv) badEGLType(dt *dwarf.TypedefType) bool { + if dt.Name != "EGLDisplay" && dt.Name != "EGLConfig" { return false } - // Check that the typedef is "typedef void *EGLDisplay". + // Check that the typedef is "typedef void *". if ptr, ok := dt.Type.(*dwarf.PtrType); ok { if _, ok := ptr.Type.(*dwarf.VoidType); ok { return true -- cgit v1.3