aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-01-15 12:48:13 +0000
committerRichard Biener <rguenther@suse.de>2013-01-15 12:48:13 +0000
commitf503800c40bb2a00cfdd129baa663cda6e9b3741 (patch)
tree1285f6af29343afca7779573367cc057aec760b6 /gcc/emit-rtl.c
parent04de338dcceaf0abbb8aa443da60ca3925d21046 (diff)
2013-01-15 Richard Biener <rguenther@suse.de>
PR middle-end/55882 * emit-rtl.c (set_mem_attributes_minus_bitpos): Correctly account for bitpos when computing alignment. * gcc.dg/torture/pr55882.c: New testcase. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@195194 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r--gcc/emit-rtl.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index e7e904a040b..2987bc9bb88 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -1839,7 +1839,12 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
if (!align_computed)
{
- unsigned int obj_align = get_object_alignment (t);
+ unsigned int obj_align;
+ unsigned HOST_WIDE_INT obj_bitpos;
+ get_object_alignment_1 (t, &obj_align, &obj_bitpos);
+ obj_bitpos = (obj_bitpos - bitpos) & (obj_align - 1);
+ if (obj_bitpos != 0)
+ obj_align = (obj_bitpos & -obj_bitpos);
attrs.align = MAX (attrs.align, obj_align);
}
}