From 44bdf23e3fa29f1b37faa6460bdf61e4b4627fe8 Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Thu, 23 Aug 2012 14:06:45 +0200 Subject: fix math export/import in docx/rtf For some reason older gcc versions don't manage to dynamic_cast to the necessary cast. I'm not quite sure why, forcing sal/osl/unx/module.cxx to always use RTLD_GLOBAL does not seem to help. Most probably compiler bug. Changing the cast to two simpler ones helps. Signed-off-by: Miklos Vajna --- sw/source/filter/ww8/docxattributeoutput.cxx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'sw') diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 34e383cc2ae6..7ad5a1ee90fc 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -96,6 +96,7 @@ #include #include #include +#include #include #include @@ -2333,10 +2334,12 @@ void DocxAttributeOutput::WritePostponedMath() return; uno::Reference < embed::XEmbeddedObject > xObj(const_cast(m_postponedMath)->GetOLEObj().GetOleRef()); uno::Reference< uno::XInterface > xInterface( xObj->getComponent(), uno::UNO_QUERY ); - if( oox::FormulaExportBase* formulaexport = dynamic_cast< oox::FormulaExportBase* >( xInterface.get())) - formulaexport->writeFormulaOoxml( m_pSerializer, GetExport().GetFilter().getVersion()); - else - OSL_FAIL( "Math OLE object cannot write out OOXML" ); +// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class, +// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated +// to RTLD_GLOBAL, so most probably a gcc bug. + oox::FormulaExportBase* formulaexport = dynamic_cast(dynamic_cast(xInterface.get())); + assert( formulaexport != NULL ); + formulaexport->writeFormulaOoxml( m_pSerializer, GetExport().GetFilter().getVersion()); m_postponedMath = NULL; } -- cgit v1.2.3