aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-07-25 10:33:43 -0700
committerRichard Henderson <rth@gcc.gnu.org>2002-07-25 10:33:43 -0700
commit40cb04f19b3d49770cd90927700c493adaff58b8 (patch)
tree8933d1c00a302e5243ebedb2a786906439d5decd /gcc/emit-rtl.c
parent1899ba3ed2f8f79ce8ecef2b512425aaec669d61 (diff)
downloadgcc-40cb04f19b3d49770cd90927700c493adaff58b8.zip
gcc-40cb04f19b3d49770cd90927700c493adaff58b8.tar.gz
gcc-40cb04f19b3d49770cd90927700c493adaff58b8.tar.bz2
emit-rtl.c (set_mem_attributes): Fix size and alignment thinkos in ARRAY_REF of DECL_P case.
* emit-rtl.c (set_mem_attributes): Fix size and alignment thinkos in ARRAY_REF of DECL_P case. From-SVN: r55752
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index ab73f00..67c4cfb 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1808,12 +1808,16 @@ set_mem_attributes (ref, t, objectp)
if (DECL_P (t))
{
expr = t;
+ offset = NULL;
if (host_integerp (off_tree, 1))
- offset = GEN_INT (tree_low_cst (off_tree, 1));
- size = (DECL_SIZE_UNIT (t)
- && host_integerp (DECL_SIZE_UNIT (t), 1)
- ? GEN_INT (tree_low_cst (DECL_SIZE_UNIT (t), 1)) : 0);
- align = DECL_ALIGN (t);
+ {
+ HOST_WIDE_INT ioff = tree_low_cst (off_tree, 1);
+ HOST_WIDE_INT aoff = (ioff & -ioff) * BITS_PER_UNIT;
+ align = DECL_ALIGN (t);
+ if (aoff && aoff < align)
+ align = aoff;
+ offset = GEN_INT (ioff);
+ }
}
else if (TREE_CODE (t) == COMPONENT_REF)
{