diff --git a/misc/cgo/test/issue13930.go b/misc/cgo/test/issue13930.go new file mode 100644 index 00000000000..3a22459e689 --- /dev/null +++ b/misc/cgo/test/issue13930.go @@ -0,0 +1,13 @@ +// Copyright 2016 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. + +// Issue 13930. Test that cgo's multiple-value special form for +// C function calls works in variable declaration statements. + +package cgotest + +// #include +import "C" + +var _, _ = C.abs(0) diff --git a/src/cmd/cgo/ast.go b/src/cmd/cgo/ast.go index c3a24c2b763..4c5dc9a23d3 100644 --- a/src/cmd/cgo/ast.go +++ b/src/cmd/cgo/ast.go @@ -447,7 +447,11 @@ func (f *File) walk(x interface{}, context string, visit func(*File, interface{} case *ast.ImportSpec: case *ast.ValueSpec: f.walk(&n.Type, "type", visit) - f.walk(n.Values, "expr", visit) + if len(n.Names) == 2 && len(n.Values) == 1 { + f.walk(&n.Values[0], "as2", visit) + } else { + f.walk(n.Values, "expr", visit) + } case *ast.TypeSpec: f.walk(&n.Type, "type", visit) diff --git a/src/cmd/cgo/doc.go b/src/cmd/cgo/doc.go index bd38a5c153b..8b4e2bfd58e 100644 --- a/src/cmd/cgo/doc.go +++ b/src/cmd/cgo/doc.go @@ -148,8 +148,9 @@ assignment context to retrieve both the return value (if any) and the C errno variable as an error (use _ to skip the result value if the function returns void). For example: - n, err := C.sqrt(-1) + n, err = C.sqrt(-1) _, err := C.voidFunc() + var n, err = C.sqrt(1) Calling C function pointers is currently not supported, however you can declare Go variables which hold C function pointers and pass them