[Bug go/96450] New: [11 Regression] Go bootstrap failure on i686-linux

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Aug 4 08:21:20 GMT 2020


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.


More information about the Gcc-bugs mailing list