From 7ada00790c88f4d7f9dfd365a3a78e67da642c01 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 17 May 2019 14:33:38 +0200 Subject: [PATCH] cgo: print better error messages for unknown types Types used in a program may not be implemented. Print a nice error message explaining the situation, instead of just prepending C. to the type spelling (and hoping the user knows what that undefined reference means). --- cgo/libclang.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cgo/libclang.go b/cgo/libclang.go index cca4487e..ce6df766 100644 --- a/cgo/libclang.go +++ b/cgo/libclang.go @@ -613,9 +613,15 @@ func (p *cgoPackage) makeASTType(typ C.CXType, pos token.Pos) ast.Expr { } } if typeName == "" { + // Report this as an error. + spelling := getString(C.clang_getTypeSpelling(typ)) + p.errors = append(p.errors, scanner.Error{ + Pos: p.fset.PositionFor(pos, true), + Msg: fmt.Sprintf("unknown C type: %v (libclang type kind %d)", spelling, typ.kind), + }) // Fallback, probably incorrect but at least the error points to an odd // type name. - typeName = "C." + getString(C.clang_getTypeSpelling(typ)) + typeName = "C." + spelling } return &ast.Ident{ NamePos: pos,