https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77847

            Bug ID: 77847
           Summary: PowerPC big endian power7/power8 do not bootstrap due
                    to fall through error
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: blocker
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: meissner at gcc dot gnu.org
  Target Milestone: ---

If you build a big endian GCC compiler using the --with-cpu=power7 or
--with-cpu=power8 option, it will fail to bootstrap:

make[3]: Entering directory
`/home/meissner/fsf-build-ppc64/trunk-240752/libcpp'
/home/meissner/fsf-build-ppc64/trunk-240752/./prev-gcc/xg++
-B/home/meissner/fsf-build-ppc64/trunk-240752/./prev-gcc/
-B/home/meissner/fsf-install-ppc64/trunk-240752/powerpc64-unknown-linux-gnu/bin/
-nostdinc++
-B/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/src/.libs
-B/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs

-I/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/include/powerpc64-unknown-linux-gnu

-I/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/include
 -I/home/meissner/fsf-src/trunk-240752/libstdc++-v3/libsupc++
-L/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/src/.libs
-L/home/meissner/fsf-build-ppc64/trunk-240752/prev-powerpc64-unknown-linux-gnu/libstdc++-v3/libsupc++/.libs
 -I/home/meissner/fsf-src/trunk-240752/libcpp -I.
-I/home/meissner/fsf-src/trunk-240752/libcpp/../include
-I/home/meissner/fsf-src/trunk-240752/libcpp/include  -g -O2 -gtoggle -W -Wall
-Wno-narrowing -Wwrite-strings -Wmissing-format-attribute -pedantic
-Wno-long-long -Werror -fno-exceptions -fno-rtti
-I/home/meissner/fsf-src/trunk-240752/libcpp -I.
-I/home/meissner/fsf-src/trunk-240752/libcpp/../include
-I/home/meissner/fsf-src/trunk-240752/libcpp/include   -c -o lex.o -MT lex.o
-MMD -MP -MF .deps/lex.Tpo /home/meissner/fsf-src/trunk-240752/libcpp/lex.c
/home/meissner/fsf-src/trunk-240752/libcpp/lex.c: In function ‘const uchar*
search_line_fast(const uchar*, const uchar*)’:
/home/meissner/fsf-src/trunk-240752/libcpp/lex.c:735:4: error: this statement
may fall through [-Werror=implicit-fallthrough]
  s += sizeof(unsigned long);
  ~~^~~~~~~~~~
/home/meissner/fsf-src/trunk-240752/libcpp/lex.c:736:7: note: here
       case 2:
       ^~~~
cc1plus: all warnings being treated as errors
make[3]: *** [lex.o] Error 1
make[3]: Leaving directory `/home/meissner/fsf-build-ppc64/trunk-240752/libcpp'
make[2]: *** [all-stage2-libcpp] Error 2
make[2]: Leaving directory `/home/meissner/fsf-build-ppc64/trunk-240752'
make[1]: *** [stage2-bubble] Error 2
make[1]: Leaving directory `/home/meissner/fsf-build-ppc64/trunk-240752'
make: *** [all] Error 2

The reason is code in lex.c that is optimized to use the Altivec instructions
does not have the proper fall through markers.  Note, this particular code is
only enabled if it is on a PowerPC, the Altivec instructions are available
(i.e. --with-cpu=power7 or --with-cpu=power8), and the target is big endian.

Reply via email to