Commit 43491f8
cmd/cgo: use the export'ed file/line in error messages
When an unpinned Go pointer (or a pointer to an unpinned Go pointer) is
returned from Go to C,
1 package main
2
3 import (
4 "C"
5 )
6
7 //export foo
8 func foo(CLine *C.char) string {
9 return C.GoString(CLine)
10 }
11
12
13 func main() {
14 }
The error message mentions the file/line of the cgo wrapper,
panic: runtime error: cgo result is unpinned Go pointer or points to unpinned Go pointer
goroutine 17 [running, locked to thread]:
panic({0x798f2341a4c0?, 0xc000112000?})
/usr/lib/go/src/runtime/panic.go:802 +0x168
runtime.cgoCheckArg(0x798f23417e20, 0xc000066e50, 0x0?, 0x0, {0x798f233f5a62, 0x42})
/usr/lib/go/src/runtime/cgocall.go:679 +0x35b
runtime.cgoCheckResult({0x798f23417e20, 0xc000066e50})
/usr/lib/go/src/runtime/cgocall.go:795 +0x4b
_cgoexp_3c910ddb72c4_foo(0x7ffc9fa9bfa0)
_cgo_gotypes.go:65 +0x5d
runtime.cgocallbackg1(0x798f233ec780, 0x7ffc9fa9bfa0, 0x0)
/usr/lib/go/src/runtime/cgocall.go:446 +0x289
runtime.cgocallbackg(0x798f233ec780, 0x7ffc9fa9bfa0, 0x0)
/usr/lib/go/src/runtime/cgocall.go:350 +0x132
runtime.cgocallbackg(0x798f233ec780, 0x7ffc9fa9bfa0, 0x0)
<autogenerated>:1 +0x2b
runtime.cgocallback(0x0, 0x0, 0x0)
/usr/lib/go/src/runtime/asm_amd64.s:1082 +0xcd
runtime.goexit({})
/usr/lib/go/src/runtime/asm_amd64.s:1693 +0x1
The cgo wrapper (_cgoexp_3c910ddb72c4_foo) is located in a temporary
build artifact (_cgo_gotypes.go)
$ go tool cgo -objdir objdir parse.go
$ cat -n objdir/_cgo_gotypes.go | sed -n '55,70p'
55 //go:cgo_export_dynamic foo
56 //go:linkname _cgoexp_d48770e267d1_foo _cgoexp_d48770e267d1_foo
57 //go:cgo_export_static _cgoexp_d48770e267d1_foo
58 func _cgoexp_d48770e267d1_foo(a *struct {
59 p0 *_Ctype_char
60 r0 string
61 }) {
62 a.r0 = foo(a.p0)
63 _cgoCheckResult(a.r0)
64 }
The file/line of the export'ed function is expected in the error message.
Use it in error messages.
panic: runtime error: cgo result is unpinned Go pointer or points to unpinned Go pointer
goroutine 17 [running, locked to thread]:
panic({0x7df72b1d8ae0?, 0x3ec8a1790030?})
/mnt/go/src/runtime/panic.go:877 +0x16f
runtime.cgoCheckArg(0x7df72b1d62c0, 0x3ec8a16eee50, 0x68?, 0x0, {0x7df72b1ad44c, 0x42})
/mnt/go/src/runtime/cgocall.go:679 +0x35b
runtime.cgoCheckResult({0x7df72b1d62c0, 0x3ec8a16eee50})
/mnt/go/src/runtime/cgocall.go:795 +0x4b
_cgoexp_3c910ddb72c4_foo(0x7ffca1b21020)
/mnt/tmp/parse.go:8 +0x5d
runtime.cgocallbackg1(0x7df72b1a4360, 0x7ffca1b21020, 0x0)
/mnt/go/src/runtime/cgocall.go:446 +0x289
runtime.cgocallbackg(0x7df72b1a4360, 0x7ffca1b21020, 0x0)
/mnt/go/src/runtime/cgocall.go:350 +0x132
runtime.cgocallbackg(0x7df72b1a4360, 0x7ffca1b21020, 0x0)
<autogenerated>:1 +0x2b
runtime.cgocallback(0x0, 0x0, 0x0)
/mnt/go/src/runtime/asm_amd64.s:1101 +0xcd
runtime.goexit({})
/mnt/go/src/runtime/asm_amd64.s:1712 +0x1
So doing, fix typos in comments.
Link: https://web.archive.org/web/20251008114504/https://dave.cheney.net/2018/01/08/gos-hidden-pragmas
Suggested-by: Keith Randall <khr@golang.org>
For #75856
Change-Id: I0bf36d5c8c5c0c7df13b00818bc4641009058979
GitHub-Last-Rev: e65839c
GitHub-Pull-Request: #76118
Reviewed-on: https://go-review.googlesource.com/c/go/+/716441
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Florian Lehner <lehner.florian86@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>1 parent aa94fdf commit 43491f8
2 files changed
+6
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
75 | | - | |
76 | | - | |
| 75 | + | |
| 76 | + | |
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1144 | 1144 | | |
1145 | 1145 | | |
1146 | 1146 | | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
1147 | 1151 | | |
1148 | 1152 | | |
1149 | 1153 | | |
| |||
0 commit comments