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

            Bug ID: 107885
           Summary: H8/300: libsupc++/hash_bytes.cc fix
                    shift-count-overflow warning
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: uaa at mx5 dot nisiq.net
  Target Milestone: ---

Created attachment 53974
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53974&action=edit
add cast to static_cast<unsigned char>(buf[x])

On building gcc-12.2.0 with newlib-4.1.0 (newlib and libgloss) and
binutils-2.36.1 on Debian-11.5/amd64.

gcc/config/h8300/t-h8300 is modified with:

    MULTILIB_OPTIONS = ms/msx mint32
    MULTILIB_DIRNAMES = h8300s h8sx int32

to disable building H8 normal mode library.

gcc configuration is:

    ../configure --target=h8300-unknown-elf --enable-languages=c,c++ \
    --prefix=/home/uaa/h8300 --with-newlib --disable-nls --disable-libssp \
    --disable-libgomp --disable-libstdcxx-pch \
    --disable-libstdcxx-filesystem-ts --with-newlib --disable-wchar_t

libstdc++-v3/libsupc++/hash_bytes.cc has warning,
due to the size of int is 16bit (H8/300 default).

/bin/bash ../libtool --tag CXX --tag disable-shared   --mode=compile
/home/uaa/gcc-12.2.0/h8300-unknown-elf/./gcc/xgcc -shared-libgcc
-B/home/uaa/gcc-12.2.0/h8300-unknown-elf/./gcc -nostdinc++
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/src
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/src/.libs
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/libsupc++/.libs
-nostdinc
-B/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/newlib/
-isystem
/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/newlib/targ-include
-isystem /home/uaa/gcc-12.2.0/newlib/libc/include
-B/home/uaa/h8300/h8300-unknown-elf/bin/
-B/home/uaa/h8300/h8300-unknown-elf/lib/ -isystem
/home/uaa/h8300/h8300-unknown-elf/include -isystem
/home/uaa/h8300/h8300-unknown-elf/sys-include  -ms
-I/home/uaa/gcc-12.2.0/libstdc++-v3/../libgcc
-I/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/include/h8300-unknown-elf
-I/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/include
-I/home/uaa/gcc-12.2.0/libstdc++-v3/libsupc++     -fno-implicit-templates 
-Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi=2 
-fdiagnostics-show-location=once    -ffunction-sections -fdata-sections 
-frandom-seed=hash_bytes.lo  -g -O2  -ms  -c -o hash_bytes.lo
../../../../../libstdc++-v3/libsupc++/hash_bytes.cc
libtool: compile:  /home/uaa/gcc-12.2.0/h8300-unknown-elf/./gcc/xgcc
-shared-libgcc -B/home/uaa/gcc-12.2.0/h8300-unknown-elf/./gcc -nostdinc++
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/src
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/src/.libs
-L/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/libsupc++/.libs
-nostdinc
-B/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/newlib/
-isystem
/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/newlib/targ-include
-isystem /home/uaa/gcc-12.2.0/newlib/libc/include
-B/home/uaa/h8300/h8300-unknown-elf/bin/
-B/home/uaa/h8300/h8300-unknown-elf/lib/ -isystem
/home/uaa/h8300/h8300-unknown-elf/include -isystem
/home/uaa/h8300/h8300-unknown-elf/sys-include -ms
-I/home/uaa/gcc-12.2.0/libstdc++-v3/../libgcc
-I/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/include/h8300-unknown-elf
-I/home/uaa/gcc-12.2.0/h8300-unknown-elf/h8300-unknown-elf/h8300s/libstdc++-v3/include
-I/home/uaa/gcc-12.2.0/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall
-Wextra -Wwrite-strings -Wcast-qual -Wabi=2 -fdiagnostics-show-location=once
-ffunction-sections -fdata-sections -frandom-seed=hash_bytes.lo -g -O2 -ms -c
../../../../../libstdc++-v3/libsupc++/hash_bytes.cc -o hash_bytes.o
../../../../../libstdc++-v3/libsupc++/hash_bytes.cc: In function 'std::size_t
std::_Hash_bytes(const void*, size_t, size_t)':
../../../../../libstdc++-v3/libsupc++/hash_bytes.cc:97:52: warning: left shift
count >= width of type [-Wshift-count-overflow]
   97 |         hash ^= static_cast<unsigned char>(buf[2]) << 16;
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~

suggested remedy is attached.

Reply via email to