Commit 5951297a by Eric Botcazou

re PR middle-end/44843 (All 32-bit fortran execution tests generate unaligned access)

	PR middle-end/44843
	* emit-rtl.c (set_mem_attributes_minus_bitpos): Do not rely on the
	pointed-to type of the offset in a MEM_REF to compute the alignment.

From-SVN: r161974
parent 5653ef60
2010-07-08 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/44843
* emit-rtl.c (set_mem_attributes_minus_bitpos): Do not rely on the
pointed-to type of the offset in a MEM_REF to compute the alignment.
2010-07-08 Kai Tietz <kai.tietz@onevision.com>
* final.c (final_scan_insn): Replace
......
......@@ -1634,10 +1634,9 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
#endif
}
else
/* This technically isn't correct. We can't really derive
alignment information from types. */
align = MAX (align,
TYPE_ALIGN (TREE_TYPE (TREE_TYPE (TREE_OPERAND (t, 1)))));
/* ??? This isn't fully correct, we can't set the alignment from the
type in all cases. */
align = MAX (align, TYPE_ALIGN (type));
if (!integer_zerop (TREE_OPERAND (t, 1)) && aoff < align)
align = aoff;
......
2010-07-08 Mikael Pettersson <mikpe@it.uu.se>
* gcc.c-torture/execute/20100708-1.c: New test.
2010-07-08 Jakub Jelinek <jakub@redhat.com>
PR fortran/44847
......
/* PR middle-end/44843 */
/* Verify that we don't use the alignment of struct S for inner accesses. */
struct S
{
double for_alignment;
struct { int x, y, z; } a[16];
};
void f(struct S *s) __attribute__((noinline));
void f(struct S *s)
{
unsigned int i;
for (i = 0; i < 16; ++i)
{
s->a[i].x = 0;
s->a[i].y = 0;
s->a[i].z = 0;
}
}
int main (void)
{
struct S s;
f (&s);
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment