This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/48127] Program crashes reading a non-aligned variable
- From: "rguenther at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 16 Mar 2011 09:40:42 +0000
- Subject: [Bug target/48127] Program crashes reading a non-aligned variable
- Auto-submitted: auto-generated
- References: <bug-48127-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48127
--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> 2011-03-16 09:40:35 UTC ---
On Tue, 15 Mar 2011, d.g.gorbachev at gmail dot com wrote:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48127
>
> --- Comment #3 from Dmitry Gorbachev <d.g.gorbachev at gmail dot com> 2011-03-15 18:00:23 UTC ---
> I do not agree that the testcase is invalid. As the standart says:
>
> Common extensions
>
> Multiple external definitions
>
> There may be more than one external definition for the identifier of
> an object, with or without the explicit use of the keyword extern; if
> the definitions disagree, or more than one is initialized, the behavior
> is undefined.
>
> According to the Binutils documentation,
>
> The linker turns a common symbol into a declaration, if there is a
> definition of the same variable.
>
> Also, from Ian Lance Taylor's article [1]:
>
> 5. If A is a strong definition in an object file:
>
> * If B is a common symbol, then we treat B as an undefined reference.
>
> I think it would be better to fix this problem in the linker. Gold does not
> even warn about it!
>
> However, I don't understand why GCC makes baz[8] to have 32 bytes alignment,
> while baz[4] has only 4 bytes alignment. It seems to be a GCC bug.
It's an optimization to ensure accesses larger than 4 do not cross
cacheline boundaries.
Richard.