Skip to content

Commit

Permalink
runtime: testprogcgo: don't call exported Go functions directly from Go
Browse files Browse the repository at this point in the history
Instead route through a C function, to avoid declaration conflicts
between the declaration needed in the cgo comment and the declaration
generated by cgo in _cgo_export.h.

This is not something user code will ever do, so no need to make it
work in cgo.

Fixes #46502

Change-Id: I1bfffdc76ef8ea63e3829871298d0774157957a5
Reviewed-on: https://go-review.googlesource.com/c/go/+/327309
Trust: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
  • Loading branch information
ianlancetaylor committed Jun 12, 2021
1 parent 9d46ee5 commit 1ed0d12
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/runtime/testdata/testprogcgo/aprof.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ package main
// The test fails when the function is the first C function.
// The exported functions are the first C functions, so we use that.

// extern void GoNop();
// extern void CallGoNop();
import "C"

import (
Expand Down Expand Up @@ -38,7 +38,7 @@ func CgoCCodeSIGPROF() {
break
}
}
C.GoNop()
C.CallGoNop()
}
c <- true
}()
Expand Down
9 changes: 9 additions & 0 deletions src/runtime/testdata/testprogcgo/aprof_c.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Copyright 2021 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.

#include "_cgo_export.h"

void CallGoNop() {
GoNop();
}
12 changes: 12 additions & 0 deletions src/runtime/testdata/testprogcgo/bigstack1_windows.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright 2021 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 is not in bigstack_windows.c because it needs to be part of
// testprogcgo but is not part of the DLL built from bigstack_windows.c.

#include "_cgo_export.h"

void CallGoBigStack1(char* p) {
goBigStack1(p);
}
4 changes: 2 additions & 2 deletions src/runtime/testdata/testprogcgo/bigstack_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ package main

/*
typedef void callback(char*);
extern void goBigStack1(char*);
extern void CallGoBigStack1(char*);
extern void bigStack(callback*);
*/
import "C"
Expand All @@ -18,7 +18,7 @@ func init() {
func BigStack() {
// Create a large thread stack and call back into Go to test
// if Go correctly determines the stack bounds.
C.bigStack((*C.callback)(C.goBigStack1))
C.bigStack((*C.callback)(C.CallGoBigStack1))
}

//export goBigStack1
Expand Down

0 comments on commit 1ed0d12

Please sign in to comment.