http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52571
--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> 2012-03-14 09:35:12 UTC --- On Tue, 13 Mar 2012, ian at airs dot com wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52571 > > --- Comment #3 from Ian Lance Taylor <ian at airs dot com> 2012-03-13 > 15:48:36 UTC --- > I agree: if the symbol is always common, the linker should use the largest > alignment. But the symbol need not always be common. Consider one file with > "unsigned long int *p;" and another file with "unsigned long int *p = &i;". > That is a valid use of common symbols. But now gcc might mark the common > symbol as having an alignment of 16, while leaving the definition with an > alignment of 8. The rules of common symbol linking mean that the definition > will override the common symbol. But the definition might have an alignment > of > 8, and it might not be possible for the linker to fix that--and in any case, > the linker won't even try. > > In other words, common symbols are special. You can't assume that anything > you > change about them will stick, because they might become, in effect, an > undefined symbol. I suspect that vect_can_force_dr_alignment_p should be > checking DECL_COMMON for exactly the reasons that it checks DECL_EXTERNAL. Ok, thanks for the clarification, I'll produce a patch. Richard.