diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-02-17 18:32:45 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-02-17 18:32:45 +0000 |
commit | 57782ad852862c891585dbafea03ef854790e89b (patch) | |
tree | 85a8a16852397c2880c3b5467fc1063168a77fb7 /gcc/testsuite | |
parent | 3977a4a1eec95645a03f78d85ed1f118cc7cfcbd (diff) | |
download | gcc-57782ad852862c891585dbafea03ef854790e89b.zip gcc-57782ad852862c891585dbafea03ef854790e89b.tar.gz gcc-57782ad852862c891585dbafea03ef854790e89b.tar.bz2 |
re PR c++/11326 (C++ IA64 ABI: 3.1.4: sometimes pointer to temporary return value is implicit first parameter preceding "this")
PR c++/11326
* c-common.c (flag_abi_version): Remove.
* c-common.h (flag_abi_version): Likewise.
* c-opts.c (c_common_handle_option): Remove OPT_fabi_version case.
* c.opt (fabi-version): Remove.
* calls.c (expand_call): Always pass a function type to
struct_value_rtx. Use convert_memory_address.
* common.opt (fabi-version): Add it.
* flags.h (flag_abi_version): Likewise.
(abi_version_at_least): New macro.
* opts.c (common_handle_option): Add OPT_fabi_version.
* toplev.c (flag_abi_version): Define it.
* config/ia64/ia64.c (ia64_struct_retval_addr_is_first_parm_p):
New function.
(ia64_output_mi_thunk): Use it.
(ia64_struct_value_rtx): Likewise.
PR c++/11326
* cp-tree.h (abi_version_at_least): Remove.
* mangle.c: Include flags.h.
PR c++/11326
* g++.dg/abi/structret1.C: New test.
From-SVN: r77968
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/abi/structret1.C | 31 |
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7529302..a49e599 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-02-17 Mark Mitchell <mark@codesourcery.com> + + PR c++/11326 + * g++.dg/abi/structret1.C: New test. + 2004-02-17 Jakub Jelinek <jakub@redhat.com> * gcc.dg/i386-cpuid.h (bit_CMOV): Define. diff --git a/gcc/testsuite/g++.dg/abi/structret1.C b/gcc/testsuite/g++.dg/abi/structret1.C new file mode 100644 index 0000000..e9d4fd0 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/structret1.C @@ -0,0 +1,31 @@ +// { dg-do run { target ia64-*-* } } +// { dg-options "-fabi-version=0" } + +extern "C" void abort (); + +struct ConstructedObject { + ConstructedObject() {}; + ~ConstructedObject() {}; + ConstructedObject(const ConstructedObject &from) {}; +}; + +struct FrameworkObject { + ConstructedObject action(); +}; + +ConstructedObject FrameworkObject::action() { + void *r32, *r33; + + asm("mov %0 = r32\nmov %1 = r33" : "=r"(r32), "=r"(r33) : ); + if (this != r33) { + abort (); + } +} + +int main() +{ + FrameworkObject slawa; + slawa.action(); + return 0; +} + |