From: Richard Biener Date: Thu, 23 Oct 2014 08:25:55 +0000 (+0000) Subject: fold-const.c (fold_binary_loc): Preserve side-effects of X - X when simplifying to 0. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4d885a639e4a72665b95fa895032d2600418d390;p=gcc.git fold-const.c (fold_binary_loc): Preserve side-effects of X - X when simplifying to 0. 2014-10-22 Richard Biener * fold-const.c (fold_binary_loc): Preserve side-effects of X - X when simplifying to 0. * stor-layout.c (finish_bitfield_representative): Strip side-effects of evaluating the difference of two DECL_FIELD_OFFSET. From-SVN: r216575 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5bc8b642a67..fa3a9cce7bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-10-23 Richard Biener + + * fold-const.c (fold_binary_loc): Preserve side-effects of + X - X when simplifying to 0. + * stor-layout.c (finish_bitfield_representative): Strip + side-effects of evaluating the difference of two DECL_FIELD_OFFSET. + 2014-10-22 Richard Biener Tobias Burnus diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1e7e9322d17..d70658c32d5 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -10749,7 +10749,7 @@ fold_binary_loc (location_t loc, if ((!FLOAT_TYPE_P (type) || !HONOR_NANS (TYPE_MODE (type))) && operand_equal_p (arg0, arg1, 0)) - return build_zero_cst (type); + return omit_one_operand_loc (loc, type, build_zero_cst (type), arg0); /* A - B -> A + (-B) if B is easily negatable. */ if (negate_expr_p (arg1) diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 237cf6926e2..9f0064bb861 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1860,6 +1860,8 @@ finish_bitfield_representative (tree repr, tree field) size = size_diffop (DECL_FIELD_OFFSET (field), DECL_FIELD_OFFSET (repr)); + while (TREE_CODE (size) == COMPOUND_EXPR) + size = TREE_OPERAND (size, 1); gcc_assert (tree_fits_uhwi_p (size)); bitsize = (tree_to_uhwi (size) * BITS_PER_UNIT + tree_to_uhwi (DECL_FIELD_BIT_OFFSET (field))