We have static unsigned int get_decl_align_unit (tree decl) { unsigned int align = LOCAL_DECL_ALIGNMENT (decl); return align / BITS_PER_UNIT; }
LOCAL_DECL_ALIGNMENT may increase alignment for local variable. But it is never saved. DECL_ALIGN (decl) returns the old alignment. This patch updates DECL_ALIGN if needed. OK for trunk if there are no regressions? Thanks. H.J. --- 2011-04-14 H.J. Lu <hongjiu...@intel.com> PR middle-end/48608 * cfgexpand.c (get_decl_align_unit): Update DECL_ALIGN if needed. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index cc1382f..e79d50c 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -212,6 +212,8 @@ static unsigned int get_decl_align_unit (tree decl) { unsigned int align = LOCAL_DECL_ALIGNMENT (decl); + if (align > DECL_ALIGN (decl)) + DECL_ALIGN (decl) = align; return align / BITS_PER_UNIT; }