From 3cbadbb794d5abfeeb5491f7bf431132effdd1bb Mon Sep 17 00:00:00 2001 From: thopre01 Date: Wed, 4 Feb 2015 08:22:45 +0000 Subject: [PATCH] 2015-02-04 Thomas Preud'homme gcc/ PR middle-end/62103 * tree-ssa-sccvn.c (fully_constant_vn_reference_p): Use TYPE_PRECISION to compute size of referenced value in the constant case. gcc/testsuite/ PR middle-end/62103 * gcc.c-torture/execute/bitfld-7.c: New test adapted from bitfld-6.c to use 24 bits for bitfield b. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@220390 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.c-torture/execute/bitfld-7.c | 23 +++++++++++++++++++++++ gcc/tree-ssa-sccvn.c | 2 +- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/bitfld-7.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdea07e8a77..44aa27f6cfd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-02-04 Thomas Preud'homme + + PR middle-end/62103 + * tree-ssa-sccvn.c (fully_constant_vn_reference_p): Use TYPE_PRECISION + to compute size of referenced value in the constant case. + 2015-02-03 Jakub Jelinek PR rtl-optimization/64756 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ad2633b46fa..03585db3754 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2015-02-04 Thomas Preud'homme + PR middle-end/62103 + * gcc.c-torture/execute/bitfld-7.c: New test adapted from bitfld-6.c + to use 24 bits for bitfield b. + +2015-02-04 Thomas Preud'homme + PR testsuite/64796 * lib/target-supports.exp (check_effective_target_bswap64): Do not cache result in a global variable. Include all 32-bit targets for diff --git a/gcc/testsuite/gcc.c-torture/execute/bitfld-7.c b/gcc/testsuite/gcc.c-torture/execute/bitfld-7.c new file mode 100644 index 00000000000..e9a61df52f3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bitfld-7.c @@ -0,0 +1,23 @@ +union U +{ + const int a; + unsigned b : 24; +}; + +static union U u = { 0x12345678 }; + +/* Constant folding used to fail to account for endianness when folding a + union. */ + +int +main (void) +{ +#ifdef __BYTE_ORDER__ +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + return u.b - 0x345678; +#else + return u.b - 0x123456; +#endif +#endif + return 0; +} diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 25c67d01a7a..0f1299affb8 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1352,7 +1352,7 @@ fully_constant_vn_reference_p (vn_reference_t ref) || TYPE_PRECISION (ref->type) % BITS_PER_UNIT == 0)) { HOST_WIDE_INT off = 0; - HOST_WIDE_INT size = tree_to_shwi (TYPE_SIZE (ref->type)); + HOST_WIDE_INT size = TYPE_PRECISION (ref->type); if (size % BITS_PER_UNIT != 0 || size > MAX_BITSIZE_MODE_ANY_MODE) return NULL_TREE; -- 2.11.4.GIT