------- Comment #3 from rguenth at gcc dot gnu dot org 2007-04-26 23:22 ------- That's probably exposed by Honzas struct/array_ref folding changes.
we have after inlining p_4(D) = &arr; D.1631_5 = p_4(D) + -4B; n.0_6 = 4; D.1633_7 = n.0_6 * 4; D.1634_8 = (DWORD *) D.1633_7; D.1635_9 = D.1631_5 + D.1634_8; D.1636_10 = *D.1635_9; and fold the reference to arr[1073741823] from within maybe_fold_offset_to_array_ref. In the index calculation if (TREE_CODE (elt_size) != INTEGER_CST || div_and_round_double (TRUNC_DIV_EXPR, 1, TREE_INT_CST_LOW (offset), TREE_INT_CST_HIGH (offset), TREE_INT_CST_LOW (elt_size), TREE_INT_CST_HIGH (elt_size), &lquo, &hquo, &lrem, &hrem) || lrem || hrem) return NULL_TREE; idx = build_int_cst_wide (TREE_TYPE (offset), lquo, hquo); we need to treat offset as signed for the division. For this we first need to sign extend offset and then do the division. Like with the following Index: tree-ssa-ccp.c =================================================================== *** tree-ssa-ccp.c (revision 124201) --- tree-ssa-ccp.c (working copy) *************** maybe_fold_offset_to_array_ref (tree bas *** 1593,1605 **** } else { ! unsigned HOST_WIDE_INT lquo, lrem; ! HOST_WIDE_INT hquo, hrem; if (TREE_CODE (elt_size) != INTEGER_CST ! || div_and_round_double (TRUNC_DIV_EXPR, 1, ! TREE_INT_CST_LOW (offset), ! TREE_INT_CST_HIGH (offset), TREE_INT_CST_LOW (elt_size), TREE_INT_CST_HIGH (elt_size), &lquo, &hquo, &lrem, &hrem) --- 1593,1606 ---- } else { ! unsigned HOST_WIDE_INT lquo, lrem, lsoff; ! HOST_WIDE_INT hquo, hrem, hsoff; + fit_double_type (TREE_INT_CST_LOW (offset), + TREE_INT_CST_HIGH (offset), &lsoff, &hsoff, + signed_type_for (TREE_TYPE (offset))); if (TREE_CODE (elt_size) != INTEGER_CST ! || div_and_round_double (TRUNC_DIV_EXPR, 0, lsoff, hsoff, TREE_INT_CST_LOW (elt_size), TREE_INT_CST_HIGH (elt_size), &lquo, &hquo, &lrem, &hrem) -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu dot | |org, hubicka at gcc dot gnu | |dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31715