Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/cgo: C code with function taking pointer typedef leads to C compiler warning #19832

ianlancetaylor opened this issue Apr 4, 2017 · 3 comments


Copy link

@ianlancetaylor ianlancetaylor commented Apr 4, 2017

Building this file gets a warning from the C compiler:

package main

// typedef struct { int i; } *PS;
// void F(PS p) {}
import "C"

func main() {

The warning I see is:

# command-line-arguments
cgo-gcc-prolog: In function ‘_cgo_0164fa09626e_Cfunc_F’:
cgo-gcc-prolog:37:2: warning: passing argument 1 of ‘F’ from incompatible pointer type [enabled by default]
/home/iant/foo8.go:4:7: note: expected ‘PS’ but argument is of type ‘struct <anonymous> *’
 // void F(PS p) {}

The code generated by cgo looks like:

_cgo_0164fa09626e_Cfunc_F(void *v)
	struct {
		struct {int i; }* p0;
	} __attribute__((__packed__, __gcc_struct__)) *a = v;

The C function expects PS* but we are passing struct{int i;}*. That is, we aren't using the typedef.

Changing the Go code to use C.PS(unsafe.Pointer(nil)) also fails in the same way.

Copy link

@gopherbot gopherbot commented Jul 18, 2017

CL mentions this issue.


Copy link

@gopherbot gopherbot commented Feb 6, 2018

Change mentions this issue: cmd/cgo: revert CL 49490 "fix for function taking pointer typedef"


gopherbot pushed a commit that referenced this issue Feb 7, 2018
CL 49490 fixed a warning when compiling the C code generated by cgo,
but it introduced typedef conflicts in Go code that cgo is supposed to

Original CL description:

    cmd/cgo: fix for function taking pointer typedef

    Fixes #19832

Updates #19832
Fixes #23720

Change-Id: I22a732db31be0b4f7248c105277ab8ee44ef6cfb
Run-TryBot: Ian Lance Taylor <>
TryBot-Result: Gobot Gobot <>
Reviewed-by: Austin Clements <>
Copy link
Contributor Author

@ianlancetaylor ianlancetaylor commented Feb 7, 2018

Reopening to fix in 1.11, without breaking #23720 .


@ianlancetaylor ianlancetaylor reopened this Feb 7, 2018
@ianlancetaylor ianlancetaylor removed this from the Go1.10 milestone Feb 7, 2018
@ianlancetaylor ianlancetaylor added this to the Go1.11 milestone Feb 7, 2018
@gopherbot gopherbot removed this from the Go1.11 milestone May 23, 2018
@gopherbot gopherbot added this to the Unplanned milestone May 23, 2018
Gskartwii pushed a commit to Gskartwii/windivert-go that referenced this issue Nov 10, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants