------- Comment #2 from jamborm at gcc dot gnu dot org 2008-12-30 13:08 ------- Apparently, the problem is that when some expression arithmetics is folded to D.1241_18 = a[0], the statement volatile flag is not set which triggers the assert.
The following simple patch makes the ICE go away, I'll test it and prepare a proper patch with a test case if I get an ACK from a gimple/middle-end maintainer. 2008-12-30 Martin Jambor <mjam...@suse.cz> * gimple.c (gimple_assign_set_rhs_from_tree): Set volatile statement flag if necessary. Index: gcc/gimple.c =================================================================== --- gcc/gimple.c (revision 142962) +++ gcc/gimple.c (working copy) @@ -1985,6 +1985,10 @@ gimple_assign_set_rhs_from_tree (gimple_ extract_ops_from_tree (expr, &subcode, &op1, &op2); gimple_assign_set_rhs_with_ops (gsi, subcode, op1, op2); + + if (TREE_SIDE_EFFECTS (op1) || TREE_THIS_VOLATILE (op1) + || (op2 && (TREE_SIDE_EFFECTS (op2) || TREE_THIS_VOLATILE (op2)))) + gimple_set_has_volatile_ops (gsi_stmt (*gsi), true); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38645