Skip to content

Commit

Permalink
cmd/cgo: support multiple-value special form in VarDecl
Browse files Browse the repository at this point in the history
Fixes #13930.

Change-Id: I124b7d31d1f2be05b7f23dafd1e52d9f3f02f3f0
Reviewed-on: https://go-review.googlesource.com/18623
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
mdempsky committed Feb 18, 2016
1 parent a576e98 commit 1a94431
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
13 changes: 13 additions & 0 deletions misc/cgo/test/issue13930.go
Original file line number Diff line number Diff line change
@@ -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 <stdlib.h>
import "C"

var _, _ = C.abs(0)
6 changes: 5 additions & 1 deletion src/cmd/cgo/ast.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
3 changes: 2 additions & 1 deletion src/cmd/cgo/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 1a94431

Please sign in to comment.