aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorThomas Preud'homme <thomas.preudhomme@arm.com>2014-08-12 02:36:37 +0000
committerThomas Preud'homme <thopre01@gcc.gnu.org>2014-08-12 02:36:37 +0000
commit3d8208ce68167eb84192ee9f81c5028db5beea43 (patch)
tree849f9085301f02b227c783b7016e0d07ac06691c /gcc/gimple-fold.c
parent5ea8ce44e97a2300acf2327951c973ae73bec6c4 (diff)
downloadgcc-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.c4
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);