File gcc46-arm-volatile.patch of Package gcc46
diff -ruNa gcc-4.6.0-20110419.orig/gcc/expr.c gcc-4.6.0-20110419/gcc/expr.c
--- gcc-4.6.0-20110419.orig/gcc/expr.c 2011-06-08 18:07:06.295571233 +0800
+++ gcc-4.6.0-20110419/gcc/expr.c 2011-06-08 18:40:11.430635015 +0800
@@ -9179,7 +9179,8 @@
&& modifier != EXPAND_INITIALIZER)
/* If the field is volatile, we always want an aligned
access. */
- || (volatilep && flag_strict_volatile_bitfields > 0)
+ || (volatilep && flag_strict_volatile_bitfields > 0
+ && (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
/* If the field isn't aligned enough to fetch as a memref,
fetch it as a bit field. */
|| (mode1 != BLKmode