1
0
mirror of https://github.com/golang/go synced 2024-11-22 04:14:42 -07:00

cmd/cgo: fail on v, err := C.fn when fn is a builtin function

We were already checking for _CMalloc, but in fact none of the
builtin functions support returning an error.

Fixes #67707

Change-Id: I0ee432a9f13ace472c3f36f641efc7d18eda0631
Reviewed-on: https://go-review.googlesource.com/c/go/+/589575
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Ian Lance Taylor 2024-05-30 22:29:35 -07:00 committed by Gopher Robot
parent 1b4f1dc95d
commit d73a8a206a
3 changed files with 18 additions and 2 deletions

View File

@ -1601,8 +1601,8 @@ func (p *Package) rewriteName(f *File, r *Ref, addPosition bool) ast.Expr {
break
}
if r.Context == ctxCall2 {
if r.Name.Go == "_CMalloc" {
error_(r.Pos(), "no two-result form for C.malloc")
if builtinDefs[r.Name.Go] != "" {
error_(r.Pos(), "no two-result form for C.%s", r.Name.Go)
break
}
// Invent new Name for the two-result function.

View File

@ -127,6 +127,7 @@ func TestReportsTypeErrors(t *testing.T) {
"issue33061.go",
"issue50710.go",
"issue67517.go",
"issue67707.go",
} {
check(t, file)
}

View File

@ -0,0 +1,15 @@
// Copyright 2024 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.
package p
import "C"
func F() *C.char {
s, err := C.CString("hi") // ERROR HERE: no two-result form
if err != nil {
println(err)
}
return s
}