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 <crawshaw@golang.org>
diff --git a/go/loader/loader.go b/go/loader/loader.go
index 4503dd9..5555faa 100644
--- a/go/loader/loader.go
+++ b/go/loader/loader.go
@@ -294,7 +294,7 @@
 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 @@
 	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]