diff options
author | Thomas Preud'homme <thomas.preudhomme@arm.com> | 2014-08-12 02:36:37 +0000 |
---|---|---|
committer | Thomas Preud'homme <thopre01@gcc.gnu.org> | 2014-08-12 02:36:37 +0000 |
commit | 3d8208ce68167eb84192ee9f81c5028db5beea43 (patch) | |
tree | 849f9085301f02b227c783b7016e0d07ac06691c /gcc/gimple-fold.c | |
parent | 5ea8ce44e97a2300acf2327951c973ae73bec6c4 (diff) | |
download | gcc-3d8208ce68167eb84192ee9f81c5028db5beea43.zip gcc-3d8208ce68167eb84192ee9f81c5028db5beea43.tar.gz gcc-3d8208ce68167eb84192ee9f81c5028db5beea43.tar.bz2 |
re PR middle-end/62103 (Incorrect folding of bitfield in a union on big endian targets)
2014-08-12 Thomas Preud'homme <thomas.preudhomme@arm.com>
gcc/
PR middle-end/62103
* gimple-fold.c (fold_ctor_reference): Don't fold in presence of
bitfields, that is when size doesn't match the size of type or the
size of the constructor.
gcc/testsuite/
PR middle-end/62103
* gcc.c-torture/execute/bitfld-6.c: New test.
From-SVN: r213846
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 76a243a..20c7cb0 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -4355,8 +4355,8 @@ fold_ctor_reference (tree type, tree ctor, unsigned HOST_WIDE_INT offset, result. */ if (!AGGREGATE_TYPE_P (TREE_TYPE (ctor)) && !offset /* VIEW_CONVERT_EXPR is defined only for matching sizes. */ - && operand_equal_p (TYPE_SIZE (type), - TYPE_SIZE (TREE_TYPE (ctor)), 0)) + && !compare_tree_int (TYPE_SIZE (type), size) + && !compare_tree_int (TYPE_SIZE (TREE_TYPE (ctor)), size)) { ret = canonicalize_constructor_val (unshare_expr (ctor), from_decl); ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); |