The following testcase causes an unaligned access when compiled with mips64-elf-gcc. struct s { char c1, c2; }; void foo (struct s s) { static struct s s1; s1 = s; } int main () { static struct s s2; foo (s2); exit (0); } The problem is that s1 and s2 are supposed to get word alignment, but their asm declarations don't guarantee this. The bug dates back to at least 3.2.3, but not 3.0.4, which didn't take advantage of the extra alignment.
Testing a fix.
Subject: Bug 16407 CVSROOT: /cvs/gcc Module name: gcc Changes by: rsandifo@gcc.gnu.org 2004-07-07 19:17:06 Modified files: gcc : ChangeLog gcc/testsuite : ChangeLog gcc/config/mips: iris6.h mips-protos.h mips.c mips.h Added files: gcc/testsuite/gcc.c-torture/execute: 20040707-1.c Log message: PR target/16407 * config/mips/mips-protos.h (mips_declare_common_object): Declare. * config/mips/mips.c (mips_declare_common_object): New function, mostly split out from... (mips_output_aligned_decl_common): ...here. * config/mips/mips.h (ASM_OUTPUT_LOCAL): Remove in favor of... (ASM_OUTPUT_ALIGNED_LOCAL): ...this new definition. * config/mips/iris6.h (ASM_OUTPUT_ALIGNED_LOCAL): Undefine this rather than ASM_OUTPUT_LOCAL. Call mips_declare_common_object. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.4341&r2=2.4342 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3944&r2=1.3945 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/20040707-1.c.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/iris6.h.diff?cvsroot=gcc&r1=1.77&r2=1.78 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips-protos.h.diff?cvsroot=gcc&r1=1.70&r2=1.71 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips.c.diff?cvsroot=gcc&r1=1.424&r2=1.425 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips.h.diff?cvsroot=gcc&r1=1.346&r2=1.347
Subject: Bug 16407 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: rsandifo@gcc.gnu.org 2004-07-07 19:21:16 Modified files: gcc : ChangeLog gcc/testsuite : ChangeLog gcc/config/mips: iris6.h mips-protos.h mips.c mips.h Added files: gcc/testsuite/gcc.c-torture/execute: 20040707-1.c Log message: PR target/16407 * config/mips/mips-protos.h (mips_declare_common_object): Declare. * config/mips/mips.c (mips_declare_common_object): New function, mostly split out from... (mips_output_aligned_decl_common): ...here. * config/mips/mips.h (ASM_OUTPUT_LOCAL): Remove in favor of... (ASM_OUTPUT_ALIGNED_LOCAL): ...this new definition. * config/mips/iris6.h (ASM_OUTPUT_ALIGNED_LOCAL): Undefine this rather than ASM_OUTPUT_LOCAL. Call mips_declare_common_object. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.539&r2=2.2326.2.540 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.221&r2=1.3389.2.222 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.c-torture/execute/20040707-1.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/iris6.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.74.4.3&r2=1.74.4.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips-protos.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.59.4.3&r2=1.59.4.4 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.362.4.15&r2=1.362.4.16 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/mips/mips.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.310.4.6&r2=1.310.4.7
Fixed in mainline and 3.4. Patch was posted here: http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00647.html