In Go the top-level name "init" is special, as it names a function that
is run when the program starts.  The language therefore does not permit
other uses of "init" at top level.  This change to the Go frontend
detects and bans one of those cases: importing a package under the local
name "init".  Bootstrapped and ran Go testsuite on
x86_64-unknown-linux-gnu.  Committed to mainline.

Ian

diff -r 8a7a4f1b970f go/gogo.cc
--- a/go/gogo.cc	Thu Dec 12 10:36:16 2013 -0800
+++ b/go/gogo.cc	Thu Dec 12 11:23:20 2013 -0800
@@ -440,6 +440,9 @@
       return;
     }
 
+  if (local_name == "init")
+    error_at(location, "cannot import package as init");
+
   if (filename == "unsafe")
     {
       this->import_unsafe(local_name, is_local_name_exported, location);

Reply via email to