Author: pluto                        Date: Mon May  1 11:55:12 2006 GMT
Module: SOURCES                       Tag: GCC_4_1
---- Log message:
- fix unaligned accesses with __attribute__(packed) and memcpy.

---- Files affected:
SOURCES:
   gcc-pr26565.patch (NONE -> 1.1.2.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/gcc-pr26565.patch
diff -u /dev/null SOURCES/gcc-pr26565.patch:1.1.2.1
--- /dev/null   Mon May  1 13:55:12 2006
+++ SOURCES/gcc-pr26565.patch   Mon May  1 13:55:07 2006
@@ -0,0 +1,33 @@
+--- gcc/gcc/builtins.c (revision 113409)
++++ gcc/gcc/builtins.c (revision 113410)
+@@ -275,14 +275,28 @@
+       case ADDR_EXPR:
+         /* See what we are pointing at and look at its alignment.  */
+         exp = TREE_OPERAND (exp, 0);
++        inner = max_align;
++        while (handled_component_p (exp))
++          {
++            /* Fields in a structure can be packed, honour DECL_ALIGN
++               of the FIELD_DECL.  For all other references the conservative 
++               alignment is the element type alignment.  */
++            if (TREE_CODE (exp) == COMPONENT_REF)
++              inner = MIN (inner, DECL_ALIGN (TREE_OPERAND (exp, 1)));
++            else
++              inner = MIN (inner, TYPE_ALIGN (TREE_TYPE (exp)));
++            exp = TREE_OPERAND (exp, 0);
++          }
+         if (TREE_CODE (exp) == FUNCTION_DECL)
+           align = FUNCTION_BOUNDARY;
+         else if (DECL_P (exp))
+-          align = DECL_ALIGN (exp);
++          align = MIN (inner, DECL_ALIGN (exp));
+ #ifdef CONSTANT_ALIGNMENT
+         else if (CONSTANT_CLASS_P (exp))
+-          align = CONSTANT_ALIGNMENT (exp, align);
++          align = MIN (inner, (unsigned)CONSTANT_ALIGNMENT (exp, align));
+ #endif
++        else
++          align = MIN (align, inner);
+         return MIN (align, max_align);
+ 
+       default:
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to