On Fri, Jun 1, 2012 at 3:29 AM, Eric Botcazou <ebotca...@adacore.com> wrote: >> Well, it would rather be >> >> TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg0)) >> && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg1)) >> >> but only in the !FLOAT_TYPE_P path. > > That works in all cases I think, see existing cases in the folder. > >> We could even compare >> TYPE_OVERFLOW_UNDEFINED I think. Or even just make sure >> that when TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0)) also >> TYPE_OVERFLOW_UNDEFINED (type), thus >> >> !TYPE_OVERFLOW_UNDEFINED (type) >> >> || ((TREE_CODE (arg0) != MULT_EXPR >> || >> || TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0))) >> >> && (TREE_CODE (arg1) != MULT_EXPR >> >> || TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg1)))) >> >> That is, the newly created multiplication in type TYPE should >> either not have undefined overflow or the inner multiplications >> all should already have. Best done with a comment in >> fold_plusminus_mult_expr. > > I'm a little lost here. :-) I don't really care about the mainline at this > point, but the fix on the branches should be the minimal working one. >
Your change caused: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55142 -- H.J.