Commit 23ffbe61 authored by Rémy Oudompheng's avatar Rémy Oudompheng Committed by Russ Cox

cgo: print error instead of panic on undeclared enums/structs

Types are left as nil if no DWARF information is found and
checking in the rewriting pass so that appropriate errors
with line numbers can be printed.
Fixes #2408.

R=rsc
CC=golang-dev, remy
https://golang.org/cl/5336041
parent 17105870
......@@ -577,6 +577,9 @@ func (p *Package) loadDWARF(f *File, names []*Name) {
var conv typeConv
conv.Init(p.PtrSize)
for i, n := range names {
if types[i] == nil {
continue
}
f, fok := types[i].(*dwarf.FuncType)
if n.Kind != "type" && fok {
n.Kind = "func"
......@@ -664,6 +667,10 @@ func (p *Package) rewriteRef(f *File) {
case "type":
if r.Name.Kind != "type" {
error_(r.Pos(), "expression C.%s used as type", r.Name.Go)
} else if r.Name.Type == nil {
// Use of C.enum_x, C.struct_x or C.union_x without C definition.
// GCC won't raise an error when using pointers to such unknown types.
error_(r.Pos(), "type C.%s: undefined C type '%s'", r.Name.Go, r.Name.C)
} else {
expr = r.Name.Type.Go
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment