diff options
author | Pascal Junck <pjunck@openoffice.org> | 2004-11-03 08:03:28 +0000 |
---|---|---|
committer | Pascal Junck <pjunck@openoffice.org> | 2004-11-03 08:03:28 +0000 |
commit | 38fdd79f131d91af49192e5f2b48277d1a76b36f (patch) | |
tree | fa4d30bbf8b0e3691c388b7bc2379e0bc5efe4a5 /bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx | |
parent | 299c741dda86f1515d12d65a7b74ccd976462656 (diff) |
INTEGRATION: CWS sb22 (1.4.36); FILE MERGED
2004/09/27 14:29:35 sb 1.4.36.1: #i34673# Fixed problem with more aggresive inlining of GCC 3.4.
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx')
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx index 7d1a799d4849..d80cd0ead4b9 100644 --- a/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx @@ -2,9 +2,9 @@ * * $RCSfile: uno2cpp.cxx,v $ * - * $Revision: 1.4 $ + * $Revision: 1.5 $ * - * last change: $Author: svesik $ $Date: 2004-04-21 13:41:51 $ + * last change: $Author: pjunck $ $Date: 2004-11-03 09:03:28 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -77,12 +77,25 @@ using namespace com::sun::star::uno; namespace { //================================================================================================== -static void callVirtualMethod( void * pAdjustedThisPtr, - sal_Int32 nVtableIndex, - void * pRegisterReturn, - typelib_TypeClass eReturnType, - sal_Int32 * pStackLongs, - sal_Int32 nStackLongs ) +// The call instruction within the asm section of callVirtualMethod may throw +// exceptions. So that the compiler handles this correctly, it is important +// that (a) callVirtualMethod might call dummy_can_throw_anything (although this +// never happens at runtime), which in turn can throw exceptions, and (b) +// callVirtualMethod is not inlined at its call site (so that any exceptions are +// caught which are thrown from the instruction calling callVirtualMethod): +void callVirtualMethod( void * pAdjustedThisPtr, + sal_Int32 nVtableIndex, + void * pRegisterReturn, + typelib_TypeClass eReturnType, + sal_Int32 * pStackLongs, + sal_Int32 nStackLongs ) __attribute__((noinline)); + +void callVirtualMethod( void * pAdjustedThisPtr, + sal_Int32 nVtableIndex, + void * pRegisterReturn, + typelib_TypeClass eReturnType, + sal_Int32 * pStackLongs, + sal_Int32 nStackLongs ) { // parameter list is mixed list of * and values // reference parameters are pointers |