summaryrefslogtreecommitdiff
path: root/bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx
diff options
context:
space:
mode:
authorPascal Junck <pjunck@openoffice.org>2004-11-03 08:03:28 +0000
committerPascal Junck <pjunck@openoffice.org>2004-11-03 08:03:28 +0000
commit38fdd79f131d91af49192e5f2b48277d1a76b36f (patch)
treefa4d30bbf8b0e3691c388b7bc2379e0bc5efe4a5 /bridges/source/cpp_uno/gcc3_linux_sparc/uno2cpp.cxx
parent299c741dda86f1515d12d65a7b74ccd976462656 (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.cxx29
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