diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2009-04-09 22:58:51 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-04-09 15:58:51 -0700 |
commit | 805586285dbb8f34cccd4d34295719f59979b649 (patch) | |
tree | 46d24cd733f827340cc68bd83323e40748cfbe0a /gcc/config | |
parent | 8c70d28b4da7f0d7ed14425ec9ba6c3f99d25742 (diff) | |
download | gcc-805586285dbb8f34cccd4d34295719f59979b649.zip gcc-805586285dbb8f34cccd4d34295719f59979b649.tar.gz gcc-805586285dbb8f34cccd4d34295719f59979b649.tar.bz2 |
re PR target/39678 (complex type isn't passed correctly)
gcc/
2009-04-09 H.J. Lu <hongjiu.lu@intel.com>
PR target/39678
* config/i386/i386.c (classify_argument): Handle SCmode with
(bit_offset % 64) != 0.
gcc/testsuite/
2009-04-09 H.J. Lu <hongjiu.lu@intel.com>
PR target/39678
* g++.dg/torture/pr39678.C: New.
* gcc.dg/compat/struct-complex-2.h: Likewise.
* gcc.dg/compat/struct-complex-2_main.c: Likewise.
* gcc.dg/compat/struct-complex-2_x.c: Likewise.
* gcc.dg/compat/struct-complex-2_y.c: Likewise.
* gcc.dg/torture/pr39678.c: Likewise.
* gcc.target/i386/pr39678.c: Likewise.
* gcc.dg/compat/struct-complex-1_x.c: Add -Wno-psabi.
* gcc.dg/compat/struct-complex-1_y.c: Likewise.
* gcc.target/x86_64/abi/test_passing_structs.c: Include
<complex.h>. Add tests for structure with complex float.
From-SVN: r145865
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/i386/i386.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index d87e853..503cc08 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5273,7 +5273,22 @@ classify_argument (enum machine_mode mode, const_tree type, return 2; case SCmode: classes[0] = X86_64_SSE_CLASS; - return 1; + if (!(bit_offset % 64)) + return 1; + else + { + static bool warned; + + if (!warned && warn_psabi) + { + warned = true; + inform (input_location, + "The ABI of passing structure with complex float" + " member has changed in GCC 4.4"); + } + classes[1] = X86_64_SSESF_CLASS; + return 2; + } case DCmode: classes[0] = X86_64_SSEDF_CLASS; classes[1] = X86_64_SSEDF_CLASS; |