From c5ca59aab8c27791ce3f820caad760cff360cfc8 Mon Sep 17 00:00:00 2001 From: Alan Donovan Date: Tue, 14 Jul 2015 13:57:11 -0400 Subject: [PATCH] go/loader: issue informative error (not panic) if cgo used in ad hoc package See https://github.com/golang/go/issues/11627. Change-Id: I458bc4ea54d0db34f3ba96060d284eda4bad7111 Reviewed-on: https://go-review.googlesource.com/12190 Reviewed-by: David Crawshaw --- go/loader/loader.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/go/loader/loader.go b/go/loader/loader.go index 4503dd9e0a2..5555faacd5e 100644 --- a/go/loader/loader.go +++ b/go/loader/loader.go @@ -294,7 +294,7 @@ func (conf *Config) ImportWithTests(path string) { conf.addImport(path, true) } func (conf *Config) Import(path string) { conf.addImport(path, false) } func (conf *Config) addImport(path string, tests bool) { - if path == "unsafe" { + if path == "C" || path == "unsafe" { return // ignore; not a real package } if conf.ImportPkgs == nil { @@ -708,6 +708,13 @@ func (imp *importer) doImport(from *PackageInfo, to string) (*types.Package, err if to == "unsafe" { return types.Unsafe, nil } + if to == "C" { + // This should be unreachable, but ad hoc packages are + // not currently subject to cgo preprocessing. + // See https://github.com/golang/go/issues/11627. + return nil, fmt.Errorf(`the loader doesn't cgo-process ad hoc packages like %q; see Go issue 11627`, + from.Pkg.Path()) + } imp.importedMu.Lock() ii := imp.imported[to]