Index: misc/cgo/test/fpvar.go |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/misc/cgo/test/fpvar.go |
@@ -0,0 +1,50 @@ |
+// Copyright 2013 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. |
+ |
+// This file contains test cases for cgo with function pointer variables. |
+ |
+package cgotest |
+ |
+/* |
+typedef int (*intFunc) (); |
+ |
+int |
+bridge_int_func(intFunc f) |
+{ |
+ return f(); |
+} |
+ |
+int fortytwo() |
+{ |
+ return 42; |
+} |
+ |
+*/ |
+import "C" |
+import "testing" |
+ |
+func callBridge(f C.intFunc) int { |
+ return int(C.bridge_int_func(f)) |
+} |
+ |
+func callCBridge(f C.intFunc) C.int { |
+ return C.bridge_int_func(f) |
+} |
+ |
+func testFpVar(t *testing.T) { |
+ const expected = 42 |
+ f := C.intFunc(C.fortytwo) |
+ res1 := C.bridge_int_func(f) |
+ if r1 := int(res1); r1 != expected { |
+ t.Errorf("got %d, want %d", r1, expected) |
+ } |
+ res2 := callCBridge(f) |
+ if r2 := int(res2); r2 != expected { |
+ t.Errorf("got %d, want %d", r2, expected) |
+ } |
+ r3 := callBridge(f) |
+ if r3 != expected { |
+ t.Errorf("got %d, want %d", r3, expected) |
+ } |
+} |