https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96450
Bug ID: 96450 Summary: [11 Regression] Go bootstrap failure on i686-linux Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: go Assignee: ian at airs dot com Reporter: jakub at gcc dot gnu.org CC: cmang at google dot com Target Milestone: --- libgo doesn't build for me anymore on i686-linux on the trunk, last good build was July 30, and last night's build failed with: /home/jakub/src/gcc/obj39/./gcc/go1 ../../../libgo/go/time/tzdata/tzdata.go ../../../libgo/go/time/tzdata/zipdata.go -quiet -dumpdir time/.libs/ -dumpbase tzdata.go -dumpbase-ext .go -minline-all-stringops -mtune=generic -march=pentiumpro -g -O2 -version -fchecking=1 -fgo-pkgpath=time/tzdata -fPIC -I . -L/home/jakub/src/gcc/obj39/./gcc -o /tmp/ccUUlQRT.s GNU Go (GCC) version 11.0.0 20200803 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 11.0.0 20200803 (experimental), GMP version 6.1.2, MPFR version 3.1.6-p2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 GNU Go (GCC) version 11.0.0 20200803 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 11.0.0 20200803 (experimental), GMP version 6.1.2, MPFR version 3.1.6-p2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc go1: internal compiler error: Aborted mmap: Cannot allocate memory Please submit a full bug report, with preprocessed source if appropriate. See <https://gcc.gnu.org/bugs/> for instructions. Reproduceably the compiler runs out of (virtual) memory, 4GB is not enough. When the exception is thrown, the backtrace is: #0 0xf7fd2949 in __kernel_vsyscall () #1 0xf7b76b46 in raise () from /lib/libc.so.6 #2 0xf7b60374 in abort () from /lib/libc.so.6 #3 0x085e24e6 in __gnu_cxx::__verbose_terminate_handler () at ../../../../libstdc++-v3/libsupc++/vterminate.cc:95 #4 0x0983ee84 in __cxxabiv1::__terminate (handler=0x983fb30 <__gnu_cxx::__verbose_terminate_handler()>) at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48 #5 0x0983eefd in std::terminate () at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:58 #6 0x0983f09c in __cxxabiv1::__cxa_throw (obj=0xf95fdb10, tinfo=0xa7547f0 <typeinfo for std::bad_alloc>, dest=0x983d720 <std::bad_alloc::~bad_alloc()>) at ../../../../libstdc++-v3/libsupc++/eh_throw.cc:95 #7 0x085e05b2 in operator new (sz=1068601) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/bits/exception.h:63 #8 0x09822960 in __gnu_cxx::new_allocator<char>::allocate (__n=<optimized out>, this=<optimized out>) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/ext/new_allocator.h:103 #9 std::allocator_traits<std::allocator<char> >::allocate (__n=<optimized out>, __a=...) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/bits/alloc_traits.h:460 #10 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create (this=0xfff8adb8, __capacity=@0xfff8accc: 1068600, __old_capacity=534300) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:153 #11 0x09822f5b in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate (this=0xfff8adb8, __pos=534300, __len1=0, __s=0xa8be370 "\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006", __len2=60) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:964 #12 0x09824b5b in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append (this=0xfff8adb8, __s=0xa8be370 "\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006\005\006", __n=60) at /home/jakub/src/gcc/obj39/i686-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:329 #13 0x0862cb46 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append (__str=..., this=0xfff8adb8) at /home/jakub/src/gcc/obj39/prev-i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:1192 #14 std::operator+<char, std::char_traits<char>, std::allocator<char> > (__rhs=..., __lhs=...) at /home/jakub/src/gcc/obj39/prev-i686-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:6026 #15 Binary_expression::do_lower (this=0xac18e20, gogo=0xa89c400, inserter=0xffffc00c) at ../../gcc/go/gofrontend/expressions.cc:6083 #16 0x0864c66c in Expression::lower (iota_value=<optimized out>, inserter=0xffffc00c, function=<optimized out>, gogo=<optimized out>, this=<optimized out>) at ../../gcc/go/gofrontend/expressions.h:939 #17 Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac18f40) at ../../gcc/go/gofrontend/gogo.cc:3140 #18 0x086101ef in Expression::traverse (pexpr=0xac18f40, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #19 0x086102f7 in Binary_expression::do_traverse (this=0xac18f30, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #20 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac19050) at ../../gcc/go/gofrontend/gogo.cc:3134 #21 0x086101ef in Expression::traverse (pexpr=0xac19050, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #22 0x086102f7 in Binary_expression::do_traverse (this=0xac19040, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #23 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac19160) at ../../gcc/go/gofrontend/gogo.cc:3134 #24 0x086101ef in Expression::traverse (pexpr=0xac19160, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #25 0x086102f7 in Binary_expression::do_traverse (this=0xac19150, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #26 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac19270) at ../../gcc/go/gofrontend/gogo.cc:3134 #27 0x086101ef in Expression::traverse (pexpr=0xac19270, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #28 0x086102f7 in Binary_expression::do_traverse (this=0xac19260, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #29 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac19380) at ../../gcc/go/gofrontend/gogo.cc:3134 #30 0x086101ef in Expression::traverse (pexpr=0xac19380, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #31 0x086102f7 in Binary_expression::do_traverse (this=0xac19370, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #32 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac19490) at ../../gcc/go/gofrontend/gogo.cc:3134 #33 0x086101ef in Expression::traverse (pexpr=0xac19490, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #34 0x086102f7 in Binary_expression::do_traverse (this=0xac19480, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #35 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac195a0) at ../../gcc/go/gofrontend/gogo.cc:3134 #36 0x086101ef in Expression::traverse (pexpr=0xac195a0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #37 0x086102f7 in Binary_expression::do_traverse (this=0xac19590, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #38 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac196b0) at ../../gcc/go/gofrontend/gogo.cc:3134 #39 0x086101ef in Expression::traverse (pexpr=0xac196b0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #40 0x086102f7 in Binary_expression::do_traverse (this=0xac196a0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #41 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac197c0) at ../../gcc/go/gofrontend/gogo.cc:3134 #42 0x086101ef in Expression::traverse (pexpr=0xac197c0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #43 0x086102f7 in Binary_expression::do_traverse (this=0xac197b0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #44 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac198d0) at ../../gcc/go/gofrontend/gogo.cc:3134 #45 0x086101ef in Expression::traverse (pexpr=0xac198d0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #46 0x086102f7 in Binary_expression::do_traverse (this=0xac198c0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #47 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xac199e0) at ../../gcc/go/gofrontend/gogo.cc:3134 #48 0x086101ef in Expression::traverse (pexpr=0xac199e0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #49 0x086102f7 in Binary_expression::do_traverse (this=0xac199d0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 ... #12407 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b360) at ../../gcc/go/gofrontend/gogo.cc:3134 #12408 0x086101ef in Expression::traverse (pexpr=0xad2b360, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12409 0x086102f7 in Binary_expression::do_traverse (this=0xad2b350, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12410 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b470) at ../../gcc/go/gofrontend/gogo.cc:3134 #12411 0x086101ef in Expression::traverse (pexpr=0xad2b470, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12412 0x086102f7 in Binary_expression::do_traverse (this=0xad2b460, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12413 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b580) at ../../gcc/go/gofrontend/gogo.cc:3134 #12414 0x086101ef in Expression::traverse (pexpr=0xad2b580, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12415 0x086102f7 in Binary_expression::do_traverse (this=0xad2b570, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12416 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b690) at ../../gcc/go/gofrontend/gogo.cc:3134 #12417 0x086101ef in Expression::traverse (pexpr=0xad2b690, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12418 0x086102f7 in Binary_expression::do_traverse (this=0xad2b680, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12419 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b7a0) at ../../gcc/go/gofrontend/gogo.cc:3134 #12420 0x086101ef in Expression::traverse (pexpr=0xad2b7a0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12421 0x086102f7 in Binary_expression::do_traverse (this=0xad2b790, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12422 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b8d0) at ../../gcc/go/gofrontend/gogo.cc:3134 #12423 0x086101ef in Expression::traverse (pexpr=0xad2b8d0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 #12424 0x086102f7 in Binary_expression::do_traverse (this=0xad2b8c0, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:5411 #12425 0x0864c627 in Lower_parse_tree::expression (this=0xffffbff0, pexpr=0xad2b944) at ../../gcc/go/gofrontend/gogo.cc:3134 #12426 0x086101ef in Expression::traverse (pexpr=0xad2b944, traverse=0xffffbff0) at ../../gcc/go/gofrontend/expressions.cc:45 --Type <RET> for more, q to quit, c to continue without paging-- #12427 0x0864f615 in Named_constant::traverse_expression (traverse=<optimized out>, this=<optimized out>) at ../../gcc/go/gofrontend/gogo.cc:8118 #12428 Lower_parse_tree::constant (no=<optimized out>, this=<optimized out>) at ../../gcc/go/gofrontend/gogo.cc:3050 #12429 Gogo::lower_constant (this=0x0, no=0x0) at ../../gcc/go/gofrontend/gogo.cc:3220 #12430 0x0860dd1d in Const_expression::do_lower (this=0xa9ca2f0, gogo=0xa89c400, iota_value=-1) at ../../gcc/go/gofrontend/expressions.cc:3357 #12431 0x0864c66c in Expression::lower (iota_value=<optimized out>, inserter=0xffffc0cc, function=<optimized out>, gogo=<optimized out>, this=<optimized out>) at ../../gcc/go/gofrontend/expressions.h:939 #12432 Lower_parse_tree::expression (this=0xffffc0b0, pexpr=0xa9c5c24) at ../../gcc/go/gofrontend/gogo.cc:3140 #12433 0x0864f556 in Gogo::lower_expression (this=0xa89c400, function=0xa9c5330, inserter=0xffffc31c, pexpr=0xa9c5c24) at ../../gcc/go/gofrontend/gogo.cc:3208 #12434 0x08650f5b in Variable::lower_init_expression (this=<optimized out>, gogo=<optimized out>, function=<optimized out>, inserter=0xffffc31c) at ../../gcc/go/gofrontend/gogo.cc:7491 #12435 0x0869b4c9 in Variable_declaration_statement::do_lower (this=0xa9c5c70, gogo=0xa89c400, function=0xa9c5330, inserter=0xffffc31c) at ../../gcc/go/gofrontend/gogo.h:2736 #12436 0x0864d173 in Statement::lower (inserter=0xffffc31c, block=0xa9c5060, function=<optimized out>, gogo=<optimized out>, this=0xa9c5c70) at ../../gcc/go/gofrontend/statements.h:310 #12437 Lower_parse_tree::statement (sorig=0xa9c5c70, pindex=0xffffc21c, block=0xa9c5060, this=0xffffc300) at ../../gcc/go/gofrontend/gogo.cc:3106 #12438 Lower_parse_tree::statement (this=0xffffc300, block=0xa9c5060, pindex=0xffffc21c, sorig=0xa9c5c70) at ../../gcc/go/gofrontend/gogo.cc:3083 #12439 0x0869ffdb in Statement::traverse (this=0xa9c5c70, block=0xa9c5060, pindex=0xffffc21c, traverse=0xffffc300) at ../../gcc/go/gofrontend/statements.cc:46 #12440 0x08651941 in Block::traverse (this=0xa9c5060, traverse=0xffffc300) at /home/jakub/src/gcc/obj39/prev-i686-pc-linux-gnu/libstdc++-v3/include/bits/stl_vector.h:1043 #12441 0x08651b5c in Function::traverse (this=0xa9c5200, traverse=0xffffc300) at ../../gcc/go/gofrontend/gogo.cc:5822 #12442 0x0865a509 in Lower_parse_tree::function (this=0xffffc300, no=0xa9c5330) at ../../gcc/go/gofrontend/gogo.h:2764 #12443 0x0865657a in Bindings::traverse (this=0xa8bf2a0, traverse=<optimized out>, is_global=true) at ../../gcc/go/gofrontend/gogo.cc:9192 #12444 0x0865671d in Gogo::traverse (this=0xa89c400, traverse=0xffffc300) at ../../gcc/go/gofrontend/gogo.h:3383 #12445 0x08663a11 in Gogo::lower_parse_tree (this=0xa89c400) at ../../gcc/go/gofrontend/gogo.cc:3166 #12446 0x0864bd44 in go_parse_input_files (filenames=<optimized out>, filename_count=<optimized out>, only_check_syntax=false) at ../../gcc/go/gofrontend/go.cc:123 #12447 0x08646d00 in go_langhook_parse_file () at ../../gcc/go/go-lang.c:335 #12448 0x08bd28de in compile_file () at ../../gcc/toplev.c:457 #12449 0x085e613c in do_compile () at ../../gcc/toplev.c:2324 #12450 toplev::main (this=0xffffc51e, argc=<optimized out>, argv=<optimized out>) at ../../gcc/toplev.c:2463 #12451 0x085ea301 in main (argc=24, argv=0xffffc5e4) at ../../gcc/main.c:39 so my guess is the allocations come from the huge recursion where at each level it allocates something. ../../../libgo/go/time/tzdata/zipdata.go is indeed a huge source with 2.5MB in size containing a single string literal concatenated from ~ 13k parts, so if the FE for every + allocates a new string, that would explain it.