As discussed at the thread at http://gcc.gnu.org/ml/gcc-patches/2013-11/msg00505.html , the new -fisolate-erroneous-paths option does not work for Go. The option can change nil pointer deferences into a trap, but for Go we want those to consistently be a panic. This patch disables the option for Go.
If the option changes in a way that lets Go work, such as by disabling the option when using -fnon-call-exceptions, then this patch can be reverted. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline. Ian 2013-11-06 Ian Lance Taylor <i...@google.com> * go-lang.c (go_langhook_post_options): If -fisolate-erroneous-paths was turned on by an optimization option, turn it off.
Index: go-lang.c =================================================================== --- go-lang.c (revision 204430) +++ go-lang.c (working copy) @@ -268,6 +268,12 @@ go_langhook_post_options (const char **p if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT) flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD; + /* The isolate_erroneous_paths optimization can change a nil + dereference from a panic to a trap, so we have to disable it for + Go, even though it is normally enabled by -O2. */ + if (!global_options_set.x_flag_isolate_erroneous_paths) + global_options.x_flag_isolate_erroneous_paths = 0; + /* Returning false means that the backend should be used. */ return false; }