https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66801
--- Comment #19 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Looks like -fbranch-probabilities is causing the issue. It it gcc.o that gets miscompiled. The following works (adding -fno-branch-probabilities): trippels@gcc2-power8 gcc % /home/trippels/gcc_build_dir_/./prev-gcc/xg++ -B/home/trippels/gcc_build_dir_/./prev-gcc/ -B/usr/local/powerpc64le-unknown-linux-gnu/bin/ -nostdinc++ -B/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -B/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -I/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/powerpc64le-unknown-linux-gnu -I/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include -I/home/trippels/gcc/libstdc++-v3/libsupc++ -L/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -L/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -fno-PIE -c -DSTANDARD_STARTFILE_PREFIX=\"../../../\" -DSTANDARD_EXEC_PREFIX=\"/usr/local/lib/gcc/\" -DSTANDARD_LIBEXEC_PREFIX=\"/usr/local/libexec/gcc/\" -DDEFAULT_TARGET_VERSION=\"6.0.0\" -DDEFAULT_REAL_TARGET_MACHINE=\"powerpc64le-unknown-linux-gnu\" -DDEFAULT_TARGET_MACHINE=\"powerpc64le-unknown-linux-gnu\" -DSTANDARD_BINDIR_PREFIX=\"/usr/local/bin/\" -DTOOLDIR_BASE_PREFIX=\"../../../../\" -DACCEL_DIR_SUFFIX=\"\" -DENABLE_SHARED_LIBGCC -DCONFIGURE_SPECS="\"\"" -O3 -g -flto=jobserver -frandom-seed=1 -fprofile-use -fno-branch-probabilities -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -I. -I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include -I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber -I../../gcc/gcc/../libbacktrace -o gcc.o -MT gcc.o -MMD -MP -MF ./.deps/gcc.TPo ../../gcc/gcc/gcc.c trippels@gcc2-power8 gcc % /home/trippels/gcc_build_dir_/./prev-gcc/xg++ -B/home/trippels/gcc_build_dir_/./prev-gcc/ -B/usr/local/powerpc64le-unknown-linux-gnu/bin/ -nostdinc++ -B/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -B/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -I/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include/powerpc64le-unknown-linux-gnu -I/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/include -I/home/trippels/gcc/libstdc++-v3/libsupc++ -L/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/src/.libs -L/home/trippels/gcc_build_dir_/prev-powerpc64le-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs -no-pie -O3 -g -flto=32 -frandom-seed=1 -fprofile-use -DIN_GCC -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -DHAVE_CONFIG_H -static-libstdc++ -static-libgcc -o xgcc gcc.o gcc-main.o ggc-none.o c/gccspec.o driver-rs6000.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a /usr/include/sys/resource.h:50:12: warning: type of ‘getrlimit’ does not match original declaration [-Wlto-type-mismatch] extern int getrlimit (__rlimit_resource_t __resource, ^ /usr/include/sys/resource.h:50:12: note: type mismatch in parameter 1 extern int getrlimit (__rlimit_resource_t __resource, ^ /usr/include/sys/resource.h:42:13: note: type ‘__rlimit_resource_t’ should match type ‘__rlimit_resource_t’ typedef int __rlimit_resource_t; ^ /usr/include/sys/resource.h:38:32: note: the incompatible type is defined here typedef enum __rlimit_resource __rlimit_resource_t; ^ /usr/include/sys/resource.h:50:12: note: ‘getrlimit’ was previously declared here extern int getrlimit (__rlimit_resource_t __resource, ^ /usr/include/sys/resource.h:69:12: warning: type of ‘setrlimit’ does not match original declaration [-Wlto-type-mismatch] extern int setrlimit (__rlimit_resource_t __resource, ^ /usr/include/sys/resource.h:69:12: note: type mismatch in parameter 1 extern int setrlimit (__rlimit_resource_t __resource, ^ /usr/include/sys/resource.h:42:13: note: type ‘__rlimit_resource_t’ should match type ‘__rlimit_resource_t’ typedef int __rlimit_resource_t; ^ /usr/include/sys/resource.h:38:32: note: the incompatible type is defined here typedef enum __rlimit_resource __rlimit_resource_t; ^ /usr/include/sys/resource.h:69:12: note: ‘setrlimit’ was previously declared here extern int setrlimit (__rlimit_resource_t __resource, ^ trippels@gcc2-power8 gcc % /home/trippels/gcc_build_dir_/./gcc/xgcc --version xgcc (GCC) 6.0.0 20150712 (experimental)