Pull up gcc svn revision 111934:

PR middle-end/26565
  * builtins.c (get_pointer_alignment): Handle component
  references for field alignment.

Fixes aligned store problems on MIPS described in:
    http://mail-index.NetBSD.org/tech-toolchain/2006/05/16/0002.html
    http://mail-index.NetBSD.org/tech-toolchain/2006/05/17/0001.html
This commit is contained in:
simonb 2006-05-31 05:10:14 +00:00
parent d8075254e2
commit e8c51d90a5
1 changed files with 10 additions and 4 deletions

View File

@ -275,15 +275,21 @@ get_pointer_alignment (tree exp, unsigned int max_align)
case ADDR_EXPR:
/* See what we are pointing at and look at its alignment. */
exp = TREE_OPERAND (exp, 0);
while (handled_component_p (exp))
{
if (TREE_CODE (exp) == COMPONENT_REF)
align = MIN (align, DECL_ALIGN (TREE_OPERAND (exp, 1)));
exp = TREE_OPERAND (exp, 0);
}
if (TREE_CODE (exp) == FUNCTION_DECL)
align = FUNCTION_BOUNDARY;
align = MIN (align, FUNCTION_BOUNDARY);
else if (DECL_P (exp))
align = DECL_ALIGN (exp);
align = MIN (align, DECL_ALIGN (exp));
#ifdef CONSTANT_ALIGNMENT
else if (CONSTANT_CLASS_P (exp))
align = CONSTANT_ALIGNMENT (exp, align);
align = MIN (align, (unsigned)CONSTANT_ALIGNMENT (exp, align));
#endif
return MIN (align, max_align);
return align;
default:
return align;