https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91707
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2021-01-21 00:00:00 |2021-12-15 Known to fail|11.0 |11.2.0, 12.0 --- Comment #11 from Martin Sebor <msebor at gcc dot gnu.org> --- GCC 11 still issues the same -Wstringop-overflow as GCC 10 plus another one for the call to md_copy_dims(): In function ‘real_from_complex_dims’, inlined from ‘md_test’ at pr91707.c:14:4: pr91707.c:7:13: warning: writing 8 bytes into a region of size 0 [-Wstringop-overflow=] 7 | odims[0] = 2; | ~~~~~~~~~^~~ pr91707.c: In function ‘md_test’: pr91707.c:13:9: note: destination object ‘dimsR.8’ of size 0 13 | long dimsR[D + 1]; | ^~~~~ In function ‘real_from_complex_dims’, inlined from ‘md_test’ at pr91707.c:14:4: pr91707.c:8:4: warning: ‘md_copy_dims’ accessing 34359738360 bytes in a region of size 0 [-Wstringop-overflow=] 8 | md_copy_dims(D, odims + 1, idims); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pr91707.c: In function ‘md_test’: pr91707.c:8:4: note: referencing argument 2 of type ‘long int *’ pr91707.c:2:13: note: in a call to function ‘md_copy_dims’ 2 | extern void md_copy_dims(unsigned int D, long odims[D], const long idims[D]); | ^~~~~~~~~~~~ The second warning is for the md_copy_dims() call in the following IL: <bb 5> [count: 0]: md_copy_dims (4294967295, &MEM <unsigned char[0:18446744073709551615]> [(void *)&dimsR.8 + 8B], idims_13(D)); __builtin___ubsan_handle_vla_bound_not_positive (&*.Lubsan_data1, 0); <bb 6> [local count: 1073741824]: dimsR.8 ={v} {CLOBBER}; return; The first warning is gone in GCC 12 and only the second one remains. It's triggered by the same md_copy_dims() call with the first argument in excess of the size of the arrays passed to the function: <bb 7> [count: 0]: _29 = dimsR.1_23 + 8; md_copy_dims (4294967295, _29, idims_13(D)); __builtin___ubsan_handle_vla_bound_not_positive (&*.Lubsan_data1, 0);