https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103173
--- Comment #3 from Thomas De Schampheleire <patrickdepinguin at gmail dot com> --- While the original test program failed on gcc 11.2.0 but not on gcc 9.4.0, I now encounter a very similar case that does fail on gcc 9.4.0: ------------------------------ #include <stdio.h> #define MAX_NR_USERS 10 struct user_data { char user[32]; char password[32]; char application[32]; }; struct user_data users[MAX_NR_USERS]; void login_process() { char tmp_user[33]; for (int i = 0; i < MAX_NR_USERS; i++) { snprintf(tmp_user, sizeof(tmp_user), "%s", &(users[i].user[0])); } } ------------------------------ arm-cortex_a53-linux-gnueabi-gcc /tmp/gcc-9-test.c -c -Wall -O2 /tmp/gcc-9-test.c: In function 'login_process': /tmp/gcc-9-test.c:19:47: warning: '%s' directive output may be truncated writing up to 959 bytes into a region of size 33 [-Wformat-truncation=] 19 | snprintf(tmp_user, sizeof(tmp_user), "%s", &(users[i].user[0])); | ^~ /tmp/gcc-9-test.c:19:9: note: 'snprintf' output between 1 and 960 bytes into a destination of size 33 19 | snprintf(tmp_user, sizeof(tmp_user), "%s", &(users[i].user[0])); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Here, the claimed 960 bytes are the total size of 'users' (3 * 32 * 10), while the copied 'user' field is only 33 byte and there should be no problem. The error is now -Wformat-truncation instead of -Wstringop-truncation but otherwise this looks to be the same underlying problem. This compiler is: Using built-in specs. COLLECT_GCC=.../buildroot-toolchains-bis/output/host/opt/ext-toolchain/bin/arm-cortex_a53-linux-gnueabi-gcc COLLECT_LTO_WRAPPER=.../buildroot-toolchains-bis/output/host/opt/ext-toolchain/arm/bin/../libexec/gcc/arm-cortex_a53-linux-gnueabi/9.4.0/lto-wrapper Target: arm-cortex_a53-linux-gnueabi Configured with: .../ctng/crosstool-ng/.build/arm-cortex_a53-linux-gnueabi/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=arm-cortex_a53-linux-gnueabi --prefix=.../ctng/crosstool-ng/targets/arm-cortex_a53-linux-gnueabi --exec_prefix=.../ctng/crosstool-ng/targets/arm-cortex_a53-linux-gnueabi --with-sysroot=.../ctng/crosstool-ng/targets/arm-cortex_a53-linux-gnueabi/arm-cortex_a53-linux-gnueabi/sysroot --enable-languages=c,c++,fortran --with-cpu=cortex-a53 --with-fpu=neon-fp-armv8 --with-float=hard --with-pkgversion='crosstool-NG 1.24.0.487_10ac846' --enable-__cxa_atexit --disable-tm-clone-registry --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --disable-libmpx --with-gmp=.../ctng/crosstool-ng/.build/arm-cortex_a53-linux-gnueabi/buildtools --with-mpfr=.../ctng/crosstool-ng/.build/arm-cortex_a53-linux-gnueabi/buildtools --with-mpc=.../ctng/crosstool-ng/.build/arm-cortex_a53-linux-gnueabi/buildtools --with-isl=.../ctng/crosstool-ng/.build/arm-cortex_a53-linux-gnueabi/buildtools --disable-lto --without-zstd --enable-threads=posix --enable-target-optspace --disable-plugin --disable-nls --disable-multilib --with-local-prefix=.../ctng/crosstool-ng/targets/arm-cortex_a53-linux-gnueabi/arm-cortex_a53-linux-gnueabi/sysroot --enable-long-long Thread model: posix gcc version 9.4.0 (crosstool-NG 1.24.0.487_10ac846)