Ada build fails on x86_64 in gnattools: ../../xgcc -c -I./ -I../rts -I. -I/home/ssb/src/gcc41/gcc/ada -B../../ -O2 -g -gnatpg -gnata -I- /home/ssb/src/gcc41/gcc/ada/vms_conv.adb raised STORAGE_ERROR : stack overflow (or erroneous memory access) gnatmake: "/home/ssb/src/gcc41/gcc/ada/vms_conv.adb" compilation error make[3]: *** [../../gnat] Error 4 make[3]: Leaving directory `/home/ssb/src/build/gcc/ada/tools' Here is reduced testcase: ------------------------------------------------------------------------------ cat <<EOF > bug.ads package Bug is type String_Ptr is access constant String; SS : String_Ptr; procedure A; end Bug; EOF cat <<EOF > bug.adb package body Bug is procedure B is P : Natural; Q : Natural; begin P := SS'First; while P <= SS'Last loop begin Q := P; while SS (Q) /= ' ' loop Q := Q + 1; end loop; P := Q + 1; end; end loop; end B; procedure A is begin B; end A; end Bug; EOF gcc bug.adb -O1 -S ------------------------------------------------------------------------------ And backtrace: Program received signal SIGSEGV, Segmentation fault. 0x0000000000951585 in record_block_change (block=0x2aaaab12f0e0) at ../../gcc41/gcc/function.c:5498 5498 last_block = VARRAY_TOP_TREE (cfun->ib_boundaries_block); (gdb) bt #0 0x0000000000951585 in record_block_change (block=0x2aaaab12f0e0) at ../../gcc41/gcc/function.c:5498 #1 0x00000000008bcca3 in expand_expr_real (exp=0x2aaaab14ccc0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6435 #2 0x00000000008a960a in expand_expr (exp=0x2aaaab14ccc0, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #3 0x00000000008bc127 in expand_operands (exp0=0x2aaaab14ccc0, exp1=0x2aaaab0a52a0, target=0x0, op0=0x7fffff937230, op1=0x7fffff937228, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6170 #4 0x00000000008c7b30 in expand_expr_real_1 (exp=0x2aaaab14fe10, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7653 #5 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14fe10, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #6 0x00000000008a960a in expand_expr (exp=0x2aaaab14fe10, target=0x0, mode=DImode, modifier=EXPAND_NORMAL) at expr.h:492 #7 0x00000000008c450a in expand_expr_real_1 (exp=0x2aaaab14cc80, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7443 #8 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14cc80, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #9 0x00000000008a960a in expand_expr (exp=0x2aaaab14cc80, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #10 0x00000000008bc127 in expand_operands (exp0=0x2aaaab14cc80, exp1=0x2aaaab137700, target=0x0, op0=0x7fffff93b9c0, op1=0x7fffff93b9b8, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6170 #11 0x00000000008cfe82 in expand_expr_real_1 (exp=0x2aaaab14ff50, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:8396 #12 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14ff50, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #13 0x00000000008a960a in expand_expr (exp=0x2aaaab14ff50, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #14 0x00000000008c4207 in expand_expr_real_1 (exp=0x2aaaab14cec0, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7430 #15 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14cec0, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #16 0x00000000008a960a in expand_expr (exp=0x2aaaab14cec0, target=0x0, mode=DImode, modifier=EXPAND_NORMAL) at expr.h:492 #17 0x00000000008bc7cb in expand_expr_addr_expr_1 (exp=0x2aaaab140e00, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6281 #18 0x00000000008bcab7 in expand_expr_addr_expr (exp=0x2aaaab14cc00, target=0x0, tmode=DImode, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6330 #19 0x00000000008cefa0 in expand_expr_real_1 (exp=0x2aaaab14cc00, target=0x0, tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:8271 #20 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14cc00, target=0x0, tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #21 0x00000000008a960a in expand_expr (exp=0x2aaaab14cc00, target=0x0, mode=SImode, modifier=EXPAND_NORMAL) at expr.h:492 #22 0x00000000008c450a in expand_expr_real_1 (exp=0x2aaaab14cbc0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7443 #23 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14cbc0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #24 0x00000000008a960a in expand_expr (exp=0x2aaaab14cbc0, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #25 0x00000000008bc147 in expand_operands (exp0=0x2aaaab14cd40, exp1=0x2aaaab14cbc0, target=0x0, op0=0x7fffff944a20, op1=0x7fffff944a18, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6171 #26 0x00000000008cfe82 in expand_expr_real_1 (exp=0x2aaaab14fe60, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:8396 #27 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14fe60, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #28 0x00000000008a960a in expand_expr (exp=0x2aaaab14fe60, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #29 0x00000000008bc127 in expand_operands (exp0=0x2aaaab14fe60, exp1=0x2aaaab14cd00, target=0x0, op0=0x7fffff946e10, op1=0x7fffff946e08, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6170 #30 0x00000000008c7b30 in expand_expr_real_1 (exp=0x2aaaab14feb0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7653 #31 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14feb0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #32 0x00000000008a960a in expand_expr (exp=0x2aaaab14feb0, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #33 0x00000000008bc127 in expand_operands (exp0=0x2aaaab14feb0, exp1=0x2aaaab13df00, target=0x0, op0=0x7fffff949200, op1=0x7fffff9491f8, modifier=EXPAND_NORMAL) at ../../gcc41/gcc/expr.c:6170 #34 0x00000000008c7b30 in expand_expr_real_1 (exp=0x2aaaab14ff00, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7653 #35 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14ff00, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #36 0x00000000008a960a in expand_expr (exp=0x2aaaab14ff00, target=0x0, mode=VOIDmode, modifier=EXPAND_NORMAL) at expr.h:492 #37 0x00000000008c4207 in expand_expr_real_1 (exp=0x2aaaab14cdc0, target=0x0, tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:7430 #38 0x00000000008bccf3 in expand_expr_real (exp=0x2aaaab14cdc0, target=0x0, tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc41/gcc/expr.c:6443 #39 0x00000000007b2312 in expand_expr (exp=0x2aaaab14cdc0, target=0x0, mode=SImode, modifier=EXPAND_NORMAL) at expr.h:492 #40 0x00000000007b2252 in computation_cost (expr=0x2aaaab14cdc0) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:2544 #41 0x00000000007b8782 in get_computation_cost_at (data=0x7fffff94d800, use=0x15ec3b0, cand=0x16bd360, address_p=0 '\0', depends_on=0x7fffff94d6a8, at=0x2aaaab133050) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:3853 #42 0x00000000007b87e3 in get_computation_cost (data=0x7fffff94d800, use=0x15ec3b0, cand=0x16bd360, address_p=0 '\0', depends_on=0x7fffff94d6a8) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:3868 #43 0x00000000007b901c in determine_use_iv_cost_condition ( data=0x7fffff94d800, use=0x15ec3b0, cand=0x16bd360) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:4072 #44 0x00000000007b95c5 in determine_use_iv_cost (data=0x7fffff94d800, use=0x15ec3b0, cand=0x16bd360) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:4200 #45 0x00000000007b965b in determine_use_iv_costs (data=0x7fffff94d800) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:4228 #46 0x00000000007be974 in tree_ssa_iv_optimize_loop (data=0x7fffff94d800, loop=0x15f90a0) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:5926 #47 0x00000000007bea64 in tree_ssa_iv_optimize (loops=0x160ae20) at ../../gcc41/gcc/tree-ssa-loop-ivopts.c:5978 #48 0x0000000000ccf527 in tree_ssa_loop_ivopts () at ../../gcc41/gcc/tree-ssa-loop.c:388 #49 0x0000000000bbe642 in execute_one_pass (pass=0x11106c0) at ../../gcc41/gcc/passes.c:776 #50 0x0000000000bbe701 in execute_pass_list (pass=0x11106c0) at ../../gcc41/gcc/passes.c:808 #51 0x0000000000bbe71f in execute_pass_list (pass=0x1110300) at ../../gcc41/gcc/passes.c:809 #52 0x0000000000bbe71f in execute_pass_list (pass=0x10f6820) at ../../gcc41/gcc/passes.c:809 #53 0x0000000000742c50 in tree_rest_of_compilation (fndecl=0x2aaaab11f270) at ../../gcc41/gcc/tree-optimize.c:419 #54 0x0000000000434fa8 in gnat_expand_body (gnu_decl=0x2aaaab11f270) at ../../gcc41/gcc/ada/misc.c:636 #55 0x0000000000c30b9a in cgraph_expand_function (node=0x2aaaab1248f0) at ../../gcc41/gcc/cgraphunit.c:1033 #56 0x0000000000c30e25 in cgraph_expand_all_functions () at ../../gcc41/gcc/cgraphunit.c:1099 #57 0x0000000000c314f3 in cgraph_optimize () at ../../gcc41/gcc/cgraphunit.c:1254 #58 0x0000000000432de2 in gnat_parse_file (set_yydebug=0) at ../../gcc41/gcc/ada/misc.c:245 #59 0x0000000000b63c76 in compile_file () at ../../gcc41/gcc/toplev.c:974 #60 0x0000000000b65775 in do_compile () at ../../gcc41/gcc/toplev.c:1934 #61 0x0000000000b657d9 in toplev_main (argc=6, argv=0x7fffff94dc98) at ../../gcc41/gcc/toplev.c:1966 #62 0x0000000000731ebf in main (argc=6, argv=0x7fffff94dc98) at ../../gcc41/gcc/main.c:35
Note this bug was mentioned here http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22212#c1 and here http://gcc.gnu.org/ml/gcc/2005-06/msg01337.html
The following patch suggested by Richard Kenner messages "fixes" the bootstrap problem. Index: function.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/function.c,v retrieving revision 1.635 diff -u -r1.635 function.c --- function.c 7 Jul 2005 21:04:31 -0000 1.635 +++ function.c 10 Jul 2005 19:06:10 -0000 @@ -5502,6 +5502,9 @@ if (!block) return; + if(!cfun->ib_boundaries_block) + return; + last_block = VARRAY_TOP_TREE (cfun->ib_boundaries_block); VARRAY_POP (cfun->ib_boundaries_block); n = get_max_uid ();
Subject: Re: [4.1 Regression] ICE Segfault in record_block_change at function.c:5498 The following patch suggested by Richard Kenner messages "fixes" the bootstrap problem. To be precise, I said that it worked around the problem, but I don't consider that the proper fix. I don't, however, know what the proper fix is.
Subject: Bug 22336 CVSROOT: /cvs/gcc Module name: gcc Changes by: guerby@gcc.gnu.org 2005-07-22 07:13:45 Modified files: gcc : ChangeLog function.c Log message: 2005-07-22 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Laurent GUERBY <laurent@guerby.net> PR tree-optimization/22336 * function.c (record_block_change): Check for cfun->ib_boundaries_block. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.9512&r2=2.9513 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/function.c.diff?cvsroot=gcc&r1=1.637&r2=1.638
Fixed.