On Thu, Dec 5, 2013 at 12:18 AM, Jan-Benedict Glaw <jbg...@lug-owl.de> wrote: > On Wed, 2013-12-04 20:19:29 -0700, Jeff Law <l...@redhat.com> wrote: >> This patch splits up the erroneous path optimization into two >> pieces. One which detects NULL dereferences and isolates those paths >> and a second which detects passing/returning a NULL pointer in cases >> where an attribute says a non-NULL value is required. > [...] > > This seems to break Go, see eg. > http://toolchain.lug-owl.de/buildbot/show_build_details.php?id=50428 : > > g++ -c -DDEFAULT_TARGET_VERSION=\"4.9.0\" > -DDEFAULT_TARGET_MACHINE=\"i686-pc-linux-gnu\" -DIN_GCC_FRONTEND -g -O2 > -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions -fno-rtti > -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings > -Wcast-qual -Wmissing-format-attribute -pedantic -Wno-long-long > -Wno-variadic-macros -Wno-overlength-strings -Werror -fno-common > -DHAVE_CONFIG_H -I. -Igo -I../../../gcc/gcc -I../../../gcc/gcc/go > -I../../../gcc/gcc/../include -I../../../gcc/gcc/../libcpp/include > -I/opt/cfarm/mpc/include -I../../../gcc/gcc/../libdecnumber > -I../../../gcc/gcc/../libdecnumber/bid -I../libdecnumber > -I../../../gcc/gcc/../libbacktrace -o go/go-lang.o -MT go/go-lang.o -MMD > -MP -MF go/.deps/go-lang.TPo ../../../gcc/gcc/go/go-lang.c > ../../../gcc/gcc/go/go-lang.c: In function ‘bool > go_langhook_post_options(const char**)’: > ../../../gcc/gcc/go/go-lang.c:276:27: error: ‘struct gcc_options’ has no > member named ‘x_flag_isolate_erroneous_paths’ > if (!global_options_set.x_flag_isolate_erroneous_paths) > ^ > ../../../gcc/gcc/go/go-lang.c:277:20: error: ‘struct gcc_options’ has no > member named ‘x_flag_isolate_erroneous_paths’ > global_options.x_flag_isolate_erroneous_paths = 0; > ^ > make[2]: *** [go/go-lang.o] Error 1
I've committed this patch to mainline to fix this problem. I could have removed this code earlier but hadn't gotten around to it. Ian 2013-12-05 Ian Lance Taylor <i...@google.com> Revert this change; no longer required. 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: gcc/go/go-lang.c =================================================================== --- gcc/go/go-lang.c (revision 205710) +++ gcc/go/go-lang.c (working copy) @@ -270,12 +270,6 @@ 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; }