This patch changes the Go frontend to not export any functions with special names. This keeps init functions from appearing in the export data. Checking for special names in general means that we don't need to check specifically for nested functions or thunks, which have special names. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline.
Ian
Index: gcc/go/gofrontend/MERGE =================================================================== --- gcc/go/gofrontend/MERGE (revision 265297) +++ gcc/go/gofrontend/MERGE (working copy) @@ -1,4 +1,4 @@ -6f4bce815786ff3803741355f7f280e4e2c89668 +e1dc92a6037a3f81ea1b8ea8fb6207af33505f0c The first line of this file holds the git revision number of the last merge done from the gofrontend repository. Index: gcc/go/gofrontend/export.cc =================================================================== --- gcc/go/gofrontend/export.cc (revision 265296) +++ gcc/go/gofrontend/export.cc (working copy) @@ -75,12 +75,8 @@ should_export(Named_object* no) if (Gogo::is_hidden_name(no->name())) return false; - // We don't export nested functions. - if (no->is_function() && no->func_value()->enclosing() != NULL) - return false; - - // We don't export thunks. - if (no->is_function() && Gogo::is_thunk(no)) + // We don't export various special functions. + if (Gogo::is_special_name(no->name())) return false; // Methods are exported with the type, not here.