Created attachment 49435 [details] reduced testcase Attached is very reduced case from autogenerated verifier of observations, that is now failing to compile after including newest meteorological data. gcc version 11.0.0 20201023 (experimental) linux x86_64 $ gcc -Wall -Wextra -O2 -c nwp_test.c during RTL pass: cprop nwp_test.c: In function 'obs_verif_body_entry': nwp_test.c:14043:13: internal compiler error: Segmentation fault 14043 | return RC;} | ^ 0xdef4ef crash_signal /z/gg/gcc/toplev.c:330 0x7fffed80b81f ??? /z/glibc-2.32/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0 0x1909e50 sbitmap_vector_alloc(unsigned int, unsigned int) /z/gg/gcc/sbitmap.c:171 0x1719767 alloc_cprop_mem /z/gg/gcc/cprop.c:557 0x1719767 one_cprop_pass /z/gg/gcc/cprop.c:1817 0x1719767 execute_rtl_cprop /z/gg/gcc/cprop.c:1931 0x1719767 execute /z/gg/gcc/cprop.c:1969 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Works with: 4.8.5 5.3 6.2 7.3 8.2 Fails with: 9.3 10.2 11-master $ gcc-9 -O2 -c nwp_test.c gcc-9: fatal error: Killed signal terminated program cc1 Able to compile with (time and memory usage is an issue): gcc-9 -O2 -fno-ree gcc-10 -O2 -fno-gcse -fno-ree gcc-11 -O2 -fno-gcse
Confirmed. We're doing #1 0x0000000002343be5 in alloc_cprop_mem (n_blocks=249747, n_sets=137435) at /home/rguenther/src/gcc2/gcc/cprop.c:557 557 cprop_avloc = sbitmap_vector_alloc (n_blocks, n_sets); where sbitmap_vector_alloc continues to use 'int' for things like size: 139 sbitmap * 140 sbitmap_vector_alloc (unsigned int n_vecs, unsigned int n_elms) 141 { 142 unsigned int i, bytes, offset, elm_bytes, size, amt, vector_bytes; 143 sbitmap *bitmap_vector; 144 and eventually 'amt' overflows: amt = vector_bytes + (n_vecs * elm_bytes); (gdb) p vector_bytes $8 = 1997976 (gdb) p n_vecs $9 = 249747 (gdb) p elm_bytes $10 = 17192 (gdb) p amt $11 = 681104 I'll fix that part.
commit 50f9e1f4d458e36d306b2449c689e45492847f68 (HEAD -> trunk, origin/master, origin/HEAD) Author: Richard Biener <rguenther@suse.de> Date: Mon Oct 26 10:10:46 2020 +0100 middle-end/97554 - avoid overflow in alloc size compute This avoids overflow in the allocation size computations in sbitmap_vector_alloc when the result exceeds 2GB. 2020-10-26 Richard Biener <rguenther@suse.de> * sbitmap.c (sbitmap_vector_alloc): Use size_t for byte quantities to avoid overflow.
The g:50f9e1f4d458e36d306b2449c689e45492847f68 applied on top of gcc-10.2 release tarball also allows to compile without segfault in reasonable amount of time. Could this fix be added to gcc-10 branch for gcc 10.3 release?
*** Bug 82576 has been marked as a duplicate of this bug. ***
Sure, will backport.
The releases/gcc-10 branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:9d769cdde26d87043da0e1ffdee51010a71f49c2 commit r10-9098-g9d769cdde26d87043da0e1ffdee51010a71f49c2 Author: Richard Biener <rguenther@suse.de> Date: Mon Oct 26 10:10:46 2020 +0100 middle-end/97554 - avoid overflow in alloc size compute This avoids overflow in the allocation size computations in sbitmap_vector_alloc when the result exceeds 2GB. 2020-10-26 Richard Biener <rguenther@suse.de> PR middle-end/97554 * sbitmap.c (sbitmap_vector_alloc): Use size_t for byte quantities to avoid overflow. (cherry picked from commit 50f9e1f4d458e36d306b2449c689e45492847f68)
The releases/gcc-9 branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:5005e6c2a8a8cacfd501fed16dc4ce3ee24e8b26 commit r9-9083-g5005e6c2a8a8cacfd501fed16dc4ce3ee24e8b26 Author: Richard Biener <rguenther@suse.de> Date: Mon Oct 26 10:10:46 2020 +0100 middle-end/97554 - avoid overflow in alloc size compute This avoids overflow in the allocation size computations in sbitmap_vector_alloc when the result exceeds 2GB. 2020-10-26 Richard Biener <rguenther@suse.de> PR middle-end/97554 * sbitmap.c (sbitmap_vector_alloc): Use size_t for byte quantities to avoid overflow. (cherry picked from commit 50f9e1f4d458e36d306b2449c689e45492847f68)
The releases/gcc-8 branch has been updated by Richard Biener <rguenth@gcc.gnu.org>: https://gcc.gnu.org/g:46384dc73076d945c9222b3f0850a9aa3e694eda commit r8-10657-g46384dc73076d945c9222b3f0850a9aa3e694eda Author: Richard Biener <rguenther@suse.de> Date: Mon Oct 26 10:10:46 2020 +0100 middle-end/97554 - avoid overflow in alloc size compute This avoids overflow in the allocation size computations in sbitmap_vector_alloc when the result exceeds 2GB. 2020-10-26 Richard Biener <rguenther@suse.de> PR middle-end/97554 * sbitmap.c (sbitmap_vector_alloc): Use size_t for byte quantities to avoid overflow. (cherry picked from commit 50f9e1f4d458e36d306b2449c689e45492847f68)
Fixed everywhere.