Commit e8317194 authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/cgo: do not rewrite call if there are more args than parameters

We already skipped rewriting the call if there were fewer args than
parameters. But we can also get a cgo crash if there are more args,
if at least one of the extra args uses a name qualified with "C.".
Skip the rewrite, since the build will fail later anyhow.

Fixes #33061

Change-Id: I62ff3518b775b502ad10c2bacf9102db4c9a531c
Reviewed-on: https://go-review.googlesource.com/c/go/+/185797
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarAndrew Bonventre <andybons@golang.org>
parent 7942671a
......@@ -112,6 +112,7 @@ func TestReportsTypeErrors(t *testing.T) {
"issue18452.go",
"issue18889.go",
"issue28721.go",
"issue33061.go",
} {
check(t, file)
}
......
// Copyright 2019 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.
// cgo shouldn't crash if there is an extra argument with a C reference.
package main
// void F(void* p) {};
import "C"
import "unsafe"
func F() {
var i int
C.F(unsafe.Pointer(&i), C.int(0)) // ERROR HERE
}
......@@ -793,10 +793,10 @@ func (p *Package) rewriteCall(f *File, call *Call) (string, bool) {
params := name.FuncType.Params
args := call.Call.Args
// Avoid a crash if the number of arguments is
// less than the number of parameters.
// Avoid a crash if the number of arguments doesn't match
// the number of parameters.
// This will be caught when the generated file is compiled.
if len(args) < len(params) {
if len(args) != len(params) {
return "", false
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment