From a9d0da75f139c81a337b7fc912a100c3496bd0f1 Mon Sep 17 00:00:00 2001 From: Eden Li Date: Mon, 23 Nov 2009 22:02:12 -0800 Subject: [PATCH] cgo translates empty function arguments into void instead of dying with 'unexpected type: ...'. Fixes #162. R=rsc https://golang.org/cl/157147 --- src/cmd/cgo/gcc.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index 7614f5a3b1..d2a7eeaddb 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -571,6 +571,15 @@ func (c *typeConv) FuncType(dtype *dwarf.FuncType) *FuncType { p := make([]*Type, len(dtype.ParamType)); gp := make([]*ast.Field, len(dtype.ParamType)); for i, f := range dtype.ParamType { + // gcc's DWARF generator outputs a single DotDotDotType parameter for + // function pointers that specify no parameters (e.g. void + // (*__cgo_0)()). Treat this special case as void. This case is + // invalid according to ISO C anyway (i.e. void (*__cgo_1)(...) is not + // legal). + if _, ok := f.(*dwarf.DotDotDotType); ok && i == 0 { + p, gp = nil, nil; + break; + } p[i] = c.FuncArg(f); gp[i] = &ast.Field{Type: p[i].Go}; } -- 2.48.1