Hi,
I'm getting a stack overflow caused by *very* deep recursion while trying to
build gnu/javax/swing/text/html/parser/HTML_401F.o in libjava, bootstrapping
HEAD on i686-pc-cygwin.
With the default per-thread stack size of 2MB, it crashes in
tree_ssa_phiprop_1(), which by the time of the crash has recursed to a depth
that I can actually honestly describe as "OVER 9000"! If I boost the stack to
4MB, I find that the recursion does actually bottom out at some point, since
the compile completes, but I tested at 3MB and it crashed at a recursion depth
of 13924.
I know that boostrapping libjava is a tough job and pretty intensive on
memory demands, but is this level of nesting actually to be expected, or has
something gone astray?
cheers,
DaveK
--
Breakpoint 1, tree_ssa_phiprop_1 (bb=0x7efd0580, phivn=0x3d3c9a8, n=150236)
at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:333
333 {
(gdb) bt -13
#9198 0x007e069c in tree_ssa_phiprop_1 (bb=,
phivn=, n=150236)
at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344
#9199 0x007e069c in tree_ssa_phiprop_1 (bb=,
phivn=, n=150236)
at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344
#9200 0x007e069c in tree_ssa_phiprop_1 (bb=,
phivn=, n=150236)
at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:344
#9201 0x007e1063 in tree_ssa_phiprop ()
at /gnu/gcc/gcc/gcc/tree-ssa-phiprop.c:360
#9202 0x0053d646 in execute_one_pass (pass=)
at /gnu/gcc/gcc/gcc/passes.c:1290
#9203 0x0053d8ac in execute_pass_list (pass=0xbb4b80)
at /gnu/gcc/gcc/gcc/passes.c:1339
#9204 0x0053d8bf in execute_pass_list (pass=0xbb3e60)
at /gnu/gcc/gcc/gcc/passes.c:1340
#9205 0x0079f5e0 in tree_rest_of_compilation (fndecl=0x7ff72c80)
at /gnu/gcc/gcc/gcc/tree-optimize.c:437
#9206 0x005b8bc5 in cgraph_expand_function (node=0x7ff74c00)
at /gnu/gcc/gcc/gcc/cgraphunit.c:1048
#9207 0x005ba950 in cgraph_optimize () at /gnu/gcc/gcc/gcc/cgraphunit.c:1107
#9208 0x00443e4a in java_parse_file (set_yydebug=0)
at /gnu/gcc/gcc/gcc/java/jcf-parse.c:1987
#9209 0x00475b64 in toplev_main (argc=32, argv=0x2f19be8)
at /gnu/gcc/gcc/gcc/toplev.c:976
#9210 0x0044e2f0 in main (argc=32, argv=0x2f19be8)
at /gnu/gcc/gcc/gcc/main.c:35
(gdb) print *bb
$1 = {preds = 0x7d1e2920, succs = 0x7d1e2980, aux = 0x0, loop_father = 0x0,
dom = {0x3b3c798, 0x0}, prev_bb = 0x7efd0540, next_bb = 0x7efd05c0, il = {
gimple = 0x7f10ba80, rtl = 0x7f10ba80}, count = 0, index = 18400,
loop_depth = 0, frequency = 252, flags = 3}
(gdb) print *bb->dom[0]
$2 = {data = 0x7efd0580, dfs_num_in = 9200, dfs_num_out = 34433,
father = 0x3b3c738, son = 0x3b3c7f8, left = 0x3b3c768, right = 0x3b3c768,
rightmost_occ = 0x3b3fcd0, parent_occ = 0x3768630}
(gdb) print *bb->dom[0]->son
$3 = {data = 0x7efd0600, dfs_num_in = 9201, dfs_num_out = 34430,
father = 0x3b3c798, son = 0x3b3c858, left = 0x3b3c7c8, right = 0x3b3c7c8,
rightmost_occ = 0x3b3fd20, parent_occ = 0x3768680}
(gdb) print *bb->dom[0]->son->son
$4 = {data = 0x7efd0700, dfs_num_in = 9202, dfs_num_out = 34427,
father = 0x3b3c7f8, son = 0x3b3c8b8, left = 0x3b3c828, right = 0x3b3c828,
rightmost_occ = 0x3b3fd70, parent_occ = 0x37686d0}
(gdb) print *bb->dom[0]->son->son->son
$5 = {data = 0x7efd07c0, dfs_num_in = 9203, dfs_num_out = 34424,
father = 0x3b3c858, son = 0x3b3c918, left = 0x3b3c888, right = 0x3b3c888,
rightmost_occ = 0x3b3fdc0, parent_occ = 0x3768720}
(gdb) print *bb->dom[0]->son->son->son->son
$6 = {data = 0x7efd0840, dfs_num_in = 9204, dfs_num_out = 34421,
father = 0x3b3c8b8, son = 0x3b3c978, left = 0x3b3c8e8, right = 0x3b3c8e8,
rightmost_occ = 0x3b3fe10, parent_occ = 0x3768770}
(gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son
->son
$7 = {data = 0x7efd0e80, dfs_num_in = 9212, dfs_num_out = 34397,
father = 0x3b3cbb8, son = 0x3b3cc78, left = 0x3b3cbe8, right = 0x3b3cbe8,
rightmost_occ = 0x3b40090, parent_occ = 0x37689f0}
(gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son
->son->son->son->son->son->son->son->son->son->son->son->son->son
$8 = {data = 0x7efd1780, dfs_num_in = 9224, dfs_num_out = 34361,
father = 0x3b3d038, son = 0x3b3d0f8, left = 0x3b3d068, right = 0x3b3d068,
rightmost_occ = 0x3b40450, parent_occ = 0x3768db0}
(gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son
->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->s
on->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son-
>son->son->son->son->son->son->son->son->son->son->son->son->son->son
$9 = {data = 0x7efd2f80, dfs_num_in = 9256, dfs_num_out = 34265,
father = 0x3b3dc38, son = 0x3b3dcf8, left = 0x3b3dc68, right = 0x3b3dc68,
rightmost_occ = 0x3b40e50, parent_occ = 0x37697c0}
(gdb) print *bb->dom[0]->son->son->son->son->son->son->son->son->son->son->son
->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son->s
on->son->son->son->son->son->son->son->son->son->son->son->son->son->son->son-
>son->son->son->son->son->son