aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/cgo/internal/test/test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/cgo/internal/test/test.go')
-rw-r--r--src/cmd/cgo/internal/test/test.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cmd/cgo/internal/test/test.go b/src/cmd/cgo/internal/test/test.go
index e83e367174..4dd14facb5 100644
--- a/src/cmd/cgo/internal/test/test.go
+++ b/src/cmd/cgo/internal/test/test.go
@@ -959,6 +959,18 @@ char * const issue75751p = &issue75751v;
#define issue75751m issue75751p
char * const volatile issue75751p2 = &issue75751v;
#define issue75751m2 issue75751p2
+
+typedef struct { void *t; void *v; } GoInterface;
+extern int exportAny76340Param(GoInterface);
+extern GoInterface exportAny76340Return(int);
+
+int issue76340testFromC(GoInterface obj) {
+ return exportAny76340Param(obj);
+}
+
+GoInterface issue76340returnFromC(int val) {
+ return exportAny76340Return(val);
+}
*/
import "C"
@@ -2407,3 +2419,22 @@ func test69086(t *testing.T) {
func test75751() int {
return int(*C.issue75751m) + int(*C.issue75751m2)
}
+
+// Issue 76340.
+func test76340(t *testing.T) {
+ var emptyInterface C.GoInterface
+ r1 := C.issue76340testFromC(emptyInterface)
+ if r1 != 0 {
+ t.Errorf("issue76340testFromC with nil interface: got %d, want 0", r1)
+ }
+
+ r2 := C.issue76340returnFromC(42)
+ if r2.t == nil && r2.v == nil {
+ t.Error("issue76340returnFromC(42) returned nil interface")
+ }
+
+ r3 := C.issue76340returnFromC(0)
+ if r3.t != nil || r3.v != nil {
+ t.Errorf("issue76340returnFromC(0) returned non-nil interface: got %v, want nil", r3)
+ }
+}