------- Comment #7 from ubizjak at gmail dot com 2009-11-11 10:37 ------- We recurse with:
simplify_replace_fn_rtx called, x = (expr_list:REG_DEP_TRUE (symbol_ref:DI ("_OtsGeqX") [flags 0x41]) (expr_list:REG_DEP_TRUE (mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16 A128]) (expr_list:REG_DEP_TRUE (reg:TF 76) (nil)))) simplify_replace_fn_rtx called, x = (symbol_ref:DI ("_OtsGeqX") [flags 0x41]) simplify_replace_fn_rtx called, x = (expr_list:REG_DEP_TRUE (mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16 A128]) (expr_list:REG_DEP_TRUE (reg:TF 76) (nil))) simplify_replace_fn_rtx called, x = (mem:TF (reg/f:DI 75 [ array_3(D)->data ]) [3 S16 A128]) simplify_replace_fn_rtx called, x = (reg/f:DI 75 [ array_3(D)->data ]) simplify_replace_fn_rtx called, x = (expr_list:REG_DEP_TRUE (reg:TF 76) (nil)) simplify_replace_fn_rtx called, x = (reg:TF 76) gcc dies in "case 'e':", recursing with (nil) from: (expr_list:REG_DEP_TRUE (reg:TF 76) (nil)) The fix is then trivial, like [no whitespace diff]: --cut here-- Index: simplify-rtx.c =================================================================== --- simplify-rtx.c (revision 154088) +++ simplify-rtx.c (working copy) @@ -489,6 +489,8 @@ simplify_replace_fn_rtx (rtx x, const_rt break; case 'e': + if (XEXP (x, i)) + { op = simplify_replace_fn_rtx (XEXP (x, i), old_rtx, fn, data); if (op != XEXP (x, i)) { @@ -496,6 +498,7 @@ simplify_replace_fn_rtx (rtx x, const_rt newx = shallow_copy_rtx (x); XEXP (newx, i) = op; } + } break; } return newx; --cut here-- -- ubizjak at gmail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |ubizjak at gmail dot com |dot org | Status|NEW |ASSIGNED Last reconfirmed|2009-11-11 10:01:06 |2009-11-11 10:37:52 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41930