Bug 104028 - M68k: Error: value -16034 out of range for switch tables in some cases with optimization
Summary: M68k: Error: value -16034 out of range for switch tables in some cases with o...
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 10.3.0
: P4 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: assemble-failure
Depends on:
Blocks:
 
Reported: 2022-01-14 10:22 UTC by Giulio Benetti
Modified: 2024-01-02 12:53 UTC (History)
4 users (show)

See Also:
Host:
Target: m68k
Build:
Known to work:
Known to fail:
Last reconfirmed: 2022-01-14 00:00:00


Attachments
Pre-processed sg_dd.c(sg_dd.i) (45.63 KB, text/plain)
2022-01-14 10:25 UTC, Giulio Benetti
Details
Pre-processed sg_dd.c(sg_dd.s) (83.42 KB, text/plain)
2022-01-14 10:25 UTC, Giulio Benetti
Details
Pre-processed sg_vpd.c(sg_vpd.i) (41.26 KB, text/plain)
2022-01-14 22:28 UTC, Giulio Benetti
Details
Pre-processed sg_vpd.c(sg_vpd.s) (126.89 KB, text/plain)
2022-01-14 22:29 UTC, Giulio Benetti
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Giulio Benetti 2022-01-14 10:22:39 UTC
When building package sg3_utils on buildroot we get this error:
```
/home/peko/autobuild/instance-0/output-1/host/bin/m68k-linux-gcc -DHAVE_CONFIG_H -I. -I..  -iquote ../include -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -W  -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64  -Os -g2  -fno-dwarf2-cfi-asm  -Wl,-elf2flt=-r -static -c -o sg_dd.o sg_dd.c
/tmp/cccfKmZB.s: Assembler messages:
/tmp/cccfKmZB.s:17093: Error: value -16034 out of range
/tmp/cccfKmZB.s:17093: Error: value of -16034 too large for field of 1 byte at 23149
make[3]: *** [Makefile:1176: sg_vpd.o] Error 1
```

To reproduce it:
```
# git clone git://git.busybox.net/buildroot
# cd buildroot
# git checkout feb9185fc185c1f76e3789b0dc521e3cf98c1ebb
# wget -O .config http://autobuild.buildroot.net/results/c49300d12a209b18f41d389f092324592b881277/config
# make olddefconfig && make
```

I'm going to add the preprocessed files.
Comment 1 Giulio Benetti 2022-01-14 10:25:08 UTC
Created attachment 52188 [details]
Pre-processed sg_dd.c(sg_dd.i)
Comment 2 Giulio Benetti 2022-01-14 10:25:40 UTC
Created attachment 52189 [details]
Pre-processed sg_dd.c(sg_dd.s)
Comment 3 Martin Liška 2022-01-14 13:27:21 UTC
Reducing that right now..
Comment 4 Martin Liška 2022-01-14 13:33:02 UTC
Please provide output of m68k-linux-gcc with -v option.
Comment 5 Giulio Benetti 2022-01-14 22:28:05 UTC
This is the output log with -v. Now it's built not in parallel and the file where gcc fails is not sg_dd.c so I'm going to update .i and .s files.

```
Target: m68k-buildroot-uclinux-uclibc
Configured with: ./configure --prefix=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1 --sysconfdir=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1/etc --enable-static --target=m68k-buildroot-uclinux-uclibc --with-sysroot=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1/m68k-buildroot-uclinux-uclibc/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1 --with-mpc=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1 --with-mpfr=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1 --with-pkgversion='Buildroot toolchains.bootlin.com-2021.11-1' --with-bugurl=http://bugs.buildroot.net/ --without-zstd --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --disable-tls --enable-threads --without-isl --without-cloog --with-cpu=5208 --enable-languages=c,c++,fortran --with-build-time-tools=/builds/bootlin/toolchains-builder/build/m68k-coldfire--uclibc--stable-2021.11-1/m68k-buildroot-uclinux-uclibc/bin --disable-shared --disable-libgomp
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.3.0 (Buildroot toolchains.bootlin.com-2021.11-1) 
COLLECT_GCC_OPTIONS='-msoft-float' '-mcpu=5208' '-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-iquote' '../include' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Wall' '-Wextra' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Os' '-g2' '-fno-dwarf2-cfi-asm' '-static' '-v' '-save-temps' '-c' '-o' 'sg_vpd.o'
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../libexec/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/cc1 -E -quiet -v -I . -I .. -iprefix /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/ -isysroot /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/m68k-buildroot-uclinux-uclibc/sysroot -D HAVE_CONFIG_H -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS=64 -D _LARGEFILE_SOURCE -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS=64 -D _LARGEFILE_SOURCE -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS=64 -iquote ../include sg_vpd.c -msoft-float -mcpu=5208 -Wall -Wextra -fno-dwarf2-cfi-asm -g2 -fworking-directory -Os -fpch-preprocess -o sg_vpd.i
ignoring duplicate directory "/home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/../../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/include"
ignoring nonexistent directory "/home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/m68k-buildroot-uclinux-uclibc/sysroot/usr/local/include"
ignoring duplicate directory "/home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/../../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/include-fixed"
ignoring duplicate directory "/home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/../../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/../../../../m68k-buildroot-uclinux-uclibc/include"
#include "..." search starts here:
 ../include
#include <...> search starts here:
 .
 ..
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/include
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/include-fixed
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/../../../../m68k-buildroot-uclinux-uclibc/include
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/m68k-buildroot-uclinux-uclibc/sysroot/usr/include
End of search list.
COLLECT_GCC_OPTIONS='-msoft-float' '-mcpu=5208' '-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-iquote' '../include' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Wall' '-Wextra' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Os' '-g2' '-fno-dwarf2-cfi-asm' '-static' '-v' '-save-temps' '-c' '-o' 'sg_vpd.o'
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../libexec/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/cc1 -fpreprocessed sg_vpd.i -quiet -dumpbase sg_vpd.c -msoft-float -mcpu=5208 -auxbase-strip sg_vpd.o -g2 -Os -Wall -Wextra -version -fno-dwarf2-cfi-asm -o sg_vpd.s
GNU C17 (Buildroot toolchains.bootlin.com-2021.11-1) version 10.3.0 (m68k-buildroot-uclinux-uclibc)
	compiled by GNU C version 4.9.2, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C17 (Buildroot toolchains.bootlin.com-2021.11-1) version 10.3.0 (m68k-buildroot-uclinux-uclibc)
	compiled by GNU C version 4.9.2, GMP version 6.2.1, MPFR version 4.1.0, MPC version 1.2.1, isl version none
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 398ace21b84f90bbc3bb6d683e915903
COLLECT_GCC_OPTIONS='-msoft-float' '-mcpu=5208' '-D' 'HAVE_CONFIG_H' '-I' '.' '-I' '..' '-iquote' '../include' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Wall' '-Wextra' '-D' '_LARGEFILE_SOURCE' '-D' '_LARGEFILE64_SOURCE' '-D' '_FILE_OFFSET_BITS=64' '-Os' '-g2' '-fno-dwarf2-cfi-asm' '-static' '-v' '-save-temps' '-c' '-o' 'sg_vpd.o'
 /home/giuliobenetti/br_reproduce/c49300d12a209b18f41d389f092324592b881277/output/host/opt/ext-toolchain/bin/../lib/gcc/m68k-buildroot-uclinux-uclibc/10.3.0/../../../../m68k-buildroot-uclinux-uclibc/bin/as -mno-float -mcpu=5208 -o sg_vpd.o sg_vpd.s
sg_vpd.s: Assembler messages:
sg_vpd.s:17093: Error: value -16034 out of range
sg_vpd.s:17093: Error: value of -16034 too large for field of 1 byte at 23149
```
Comment 6 Giulio Benetti 2022-01-14 22:28:46 UTC
Created attachment 52199 [details]
Pre-processed sg_vpd.c(sg_vpd.i)
Comment 7 Giulio Benetti 2022-01-14 22:29:12 UTC
Created attachment 52200 [details]
Pre-processed sg_vpd.c(sg_vpd.s)
Comment 8 Giulio Benetti 2022-01-14 22:30:13 UTC
Note that bug is still present in gcc 11.2.0 so it's probable it's still in master branch.

Thank you for taking care.
Best regards
Comment 9 Andreas Schwab 2022-01-14 23:26:57 UTC
It's a duplicated case vector load, where the second one is placed far off from its table.
Comment 10 Giulio Benetti 2022-01-15 01:25:47 UTC
Ah, forgot to mention that it builds fine with -O0.
Comment 11 Martin Liška 2022-01-17 09:40:34 UTC
Reduced test-case:

$ cat pr104028.c
# 1 "" 3
struct {
  _Bool do_force;
  int examine;
  int vpd_pn
} svpd_decode_t10_op;
svpd_decode_t10_sg_fd, svpd_decode_t10_op_1, svpd_decode_t10_op_2;
svpd_decode_t10_rp() {
  _Bool inhex_active = svpd_decode_t10_sg_fd;
  int pn = svpd_decode_t10_op_2;
  if (inhex_active)
    pn = svpd_decode_t10_rp;
  if (!inhex_active && svpd_decode_t10_op_1)
    vpd_fetch_page();
  switch (pn) {
  case 2:
    if (inhex_active)
      sg_ll_inquiry_v2();
  case 181:
    vpd_fetch_page();
  case 182:
    vpd_fetch_page();
  case 183:
    vpd_fetch_page();
  case 184:
    vpd_fetch_page(svpd_decode_t10_op);
  case 185:
    vpd_fetch_page();
  }
}

$ m68k-suse-linux-gcc pr104028.c -c -mcpu=5208 -Os
/tmp/cciKSGSl.s: Assembler messages:
/tmp/cciKSGSl.s:77: Error: value -134 out of range
/tmp/cciKSGSl.s:77: Error: value of ffffff7a too large for field of 1 byte at 000000cf

$ m68k-suse-linux-gcc pr104028.c --version
m68k-suse-linux-gcc (SUSE Linux) 11.2.1 20220103 [revision d4a1d3c4b377f1d4acb34fe1b55b5088a3f293f6]

we speak about the following instruction:

    77		move.w .L18(%pc,%d2.l),%d0
Comment 12 Mikael Pettersson 2024-01-02 12:53:50 UTC
The reduced test case stopped failing in gcc >= 12 with

# first new commit: [2e96b5f14e4025691b57d2301d71aa6092ed44bc] Backwards jump threader rewrite with ranger.

but the original test case (sg_vpd.i) still fails with current master.