Bug 22336 - [4.1 Regression] ICE Segfault in record_block_change at function.c:5498
Summary: [4.1 Regression] ICE Segfault in record_block_change at function.c:5498
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: tree-optimization (show other bugs)
Version: 4.1.0
: P2 normal
Target Milestone: 4.1.0
Assignee: Not yet assigned to anyone
URL: http://gcc.gnu.org/ml/gcc-patches/200...
Keywords: build, ice-on-valid-code, patch
Depends on:
Blocks:
 
Reported: 2005-07-07 00:45 UTC by Serge Belyshev
Modified: 2005-07-22 19:26 UTC (History)
4 users (show)

See Also:
Host:
Target: x86_64-*-linux-gnu
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-07-07 08:41:04


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Serge Belyshev 2005-07-07 00:45:52 UTC
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
Comment 1 Serge Belyshev 2005-07-07 08:41:04 UTC
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
Comment 2 Laurent GUERBY 2005-07-10 19:07:37 UTC
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 ();
Comment 3 Richard Kenner 2005-07-10 19:09:11 UTC
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.
Comment 4 GCC Commits 2005-07-22 07:14:11 UTC
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

Comment 5 Andrew Pinski 2005-07-22 19:26:52 UTC
Fixed.