[Libreoffice-commits] core.git: compilerplugins/clang i18npool/inc i18npool/source sfx2/source

Stephan Bergmann sbergman at redhat.com
Fri Aug 26 10:41:19 UTC 2016


 compilerplugins/clang/refcounting.cxx                                 |   42 ++++++++++
 i18npool/inc/localedata.hxx                                           |    3 
 i18npool/source/breakiterator/breakiterator_cjk.cxx                   |    8 -
 i18npool/source/breakiterator/breakiterator_unicode.cxx               |    2 
 i18npool/source/calendar/calendarImpl.cxx                             |    6 -
 i18npool/source/calendar/calendar_gregorian.cxx                       |   12 +-
 i18npool/source/collator/collator_unicode.cxx                         |    2 
 i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx |    4 
 i18npool/source/indexentry/indexentrysupplier.cxx                     |    8 -
 i18npool/source/indexentry/indexentrysupplier_common.cxx              |    2 
 i18npool/source/indexentry/indexentrysupplier_default.cxx             |   10 +-
 i18npool/source/nativenumber/nativenumbersupplier.cxx                 |    2 
 i18npool/source/transliteration/transliteration_Numeric.cxx           |    5 -
 sfx2/source/doc/objxtor.cxx                                           |    2 
 sfx2/source/notify/eventsupplier.cxx                                  |    2 
 15 files changed, 78 insertions(+), 32 deletions(-)

New commits:
commit 28cb2c1764f2365d69ce09cb69f0f5a676458a33
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Fri Aug 26 12:40:43 2016 +0200

    loplugin:refcounting: also cover temporaries being directly stack managed
    
    Change-Id: Ib0f7c60df1d2fba0d4d9d3fa6faf3bb97867ebc0

diff --git a/compilerplugins/clang/refcounting.cxx b/compilerplugins/clang/refcounting.cxx
index 523f048..97eea57 100644
--- a/compilerplugins/clang/refcounting.cxx
+++ b/compilerplugins/clang/refcounting.cxx
@@ -53,6 +53,14 @@ public:
     bool VisitVarDecl(const VarDecl *);
     bool VisitFunctionDecl(const FunctionDecl *);
 
+    // Creation of temporaries with one argument are represented by
+    // CXXFunctionalCastExpr, while any other number of arguments are
+    // represented by CXXTemporaryObjectExpr:
+    bool VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr const * expr)
+    { return visitTemporaryObjectExpr(expr); }
+    bool VisitCXXFunctionalCastExpr(CXXFunctionalCastExpr const * expr)
+    { return visitTemporaryObjectExpr(expr); }
+
     bool WalkUpFromObjCIvarDecl(ObjCIvarDecl * decl) {
         // Don't recurse into WalkUpFromFieldDecl, as VisitFieldDecl calls
         // FieldDecl::getParent, which triggers an assertion at least with
@@ -63,6 +71,8 @@ public:
 private:
     void checkUnoReference(QualType qt, const Decl* decl,
                            const std::string& rParentName, const std::string& rDeclName);
+
+    bool visitTemporaryObjectExpr(Expr const * expr);
 };
 
 bool BaseCheckNotSubclass(const CXXRecordDecl *BaseDefinition, void *p) {
@@ -343,6 +353,38 @@ void RefCounting::checkUnoReference(QualType qt, const Decl* decl, const std::st
     }
 }
 
+bool RefCounting::visitTemporaryObjectExpr(Expr const * expr) {
+    if (ignoreLocation(expr)) {
+        return true;
+    }
+    auto t = expr->getType();
+    if (containsSvRefBaseSubclass(t.getTypePtr())) {
+        report(
+            DiagnosticsEngine::Warning,
+            ("Temporary object of SvRefBase subclass %0 being directly stack"
+             " managed, should be managed via tools::SvRef"),
+            expr->getLocStart())
+            << t.getUnqualifiedType() << expr->getSourceRange();
+    } else if (containsSalhelperReferenceObjectSubclass(t.getTypePtr())) {
+        report(
+            DiagnosticsEngine::Warning,
+            ("Temporary object of salhelper::SimpleReferenceObject subclass %0"
+             " being directly stack managed, should be managed via"
+             " rtl::Reference"),
+            expr->getLocStart())
+            << t.getUnqualifiedType() << expr->getSourceRange();
+    } else if (containsXInterfaceSubclass(t)) {
+        report(
+            DiagnosticsEngine::Warning,
+            ("Temporary object of css::uno::XInterface subclass %0 being"
+             " directly stack managed, should be managed via"
+             " css::uno::Reference"),
+            expr->getLocStart())
+            << t.getUnqualifiedType() << expr->getSourceRange();
+    }
+    return true;
+}
+
 bool RefCounting::VisitFieldDecl(const FieldDecl * fieldDecl) {
     if (ignoreLocation(fieldDecl)) {
         return true;
diff --git a/i18npool/inc/localedata.hxx b/i18npool/inc/localedata.hxx
index 0a28ee0..c36e711 100644
--- a/i18npool/inc/localedata.hxx
+++ b/i18npool/inc/localedata.hxx
@@ -39,6 +39,7 @@
 #include <com/sun/star/i18n/UnicodeScript.hpp>
 #include <com/sun/star/uno/RuntimeException.hpp>
 #include <com/sun/star/uno/XInterface.hpp>
+#include <rtl/ref.hxx>
 #include <rtl/ustring.hxx>
 #include <vector>
 #include <memory>
@@ -68,6 +69,8 @@ public:
     LocaleDataImpl();
     virtual ~LocaleDataImpl();
 
+    static rtl::Reference<LocaleDataImpl> get() { return new LocaleDataImpl; }
+
     static css::uno::Sequence< css::i18n::CalendarItem > downcastCalendarItems( const css::uno::Sequence< css::i18n::CalendarItem2 > & rCi );
     static css::i18n::Calendar downcastCalendar( const css::i18n::Calendar2 & rC );
 
diff --git a/i18npool/source/breakiterator/breakiterator_cjk.cxx b/i18npool/source/breakiterator/breakiterator_cjk.cxx
index 88ea6ef..c9268b3 100644
--- a/i18npool/source/breakiterator/breakiterator_cjk.cxx
+++ b/i18npool/source/breakiterator/breakiterator_cjk.cxx
@@ -117,7 +117,7 @@ LineBreakResults SAL_CALL BreakIterator_CJK::getLineBreak(
 BreakIterator_zh::BreakIterator_zh()
 {
     dict = new xdictionary("zh");
-    hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "CN"));
+    hangingCharacters = LocaleDataImpl::get()->getHangingCharacters(LOCALE("zh", "CN"));
     cBreakIterator = "com.sun.star.i18n.BreakIterator_zh";
 }
 
@@ -132,7 +132,7 @@ BreakIterator_zh::~BreakIterator_zh()
 BreakIterator_zh_TW::BreakIterator_zh_TW()
 {
     dict = new xdictionary("zh");
-    hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("zh", "TW"));
+    hangingCharacters = LocaleDataImpl::get()->getHangingCharacters(LOCALE("zh", "TW"));
     cBreakIterator = "com.sun.star.i18n.BreakIterator_zh_TW";
 }
 
@@ -148,7 +148,7 @@ BreakIterator_ja::BreakIterator_ja()
 {
     dict = new xdictionary("ja");
     dict->setJapaneseWordBreak();
-    hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ja", "JP"));
+    hangingCharacters = LocaleDataImpl::get()->getHangingCharacters(LOCALE("ja", "JP"));
     cBreakIterator = "com.sun.star.i18n.BreakIterator_ja";
 }
 
@@ -162,7 +162,7 @@ BreakIterator_ja::~BreakIterator_ja()
 //      ----------------------------------------------------;
 BreakIterator_ko::BreakIterator_ko()
 {
-    hangingCharacters = LocaleDataImpl().getHangingCharacters(LOCALE("ko", "KR"));
+    hangingCharacters = LocaleDataImpl::get()->getHangingCharacters(LOCALE("ko", "KR"));
     cBreakIterator = "com.sun.star.i18n.BreakIterator_ko";
 }
 
diff --git a/i18npool/source/breakiterator/breakiterator_unicode.cxx b/i18npool/source/breakiterator/breakiterator_unicode.cxx
index 117b0ba..3b0b227 100644
--- a/i18npool/source/breakiterator/breakiterator_unicode.cxx
+++ b/i18npool/source/breakiterator/breakiterator_unicode.cxx
@@ -109,7 +109,7 @@ void SAL_CALL BreakIterator_Unicode::loadICUBreakIterator(const css::lang::Local
             icuBI->aBreakIterator=nullptr;
         }
         if (rule) {
-            uno::Sequence< OUString > breakRules = LocaleDataImpl().getBreakIteratorRules(rLocale);
+            uno::Sequence< OUString > breakRules = LocaleDataImpl::get()->getBreakIteratorRules(rLocale);
 
             status = U_ZERO_ERROR;
             udata_setAppData("OpenOffice", OpenOffice_dat, &status);
diff --git a/i18npool/source/calendar/calendarImpl.cxx b/i18npool/source/calendar/calendarImpl.cxx
index 48c4ad2..89432a4 100644
--- a/i18npool/source/calendar/calendarImpl.cxx
+++ b/i18npool/source/calendar/calendarImpl.cxx
@@ -44,7 +44,7 @@ CalendarImpl::~CalendarImpl()
 void SAL_CALL
 CalendarImpl::loadDefaultCalendar( const Locale& rLocale ) throw(RuntimeException, std::exception)
 {
-    Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
+    Sequence< Calendar2 > xC = LocaleDataImpl::get()->getAllCalendars2(rLocale);
     for (sal_Int32 i = 0; i < xC.getLength(); i++) {
         if (xC[i].Default) {
             loadCalendar(xC[i].Name, rLocale);
@@ -74,7 +74,7 @@ CalendarImpl::loadCalendar(const OUString& uniqueID, const Locale& rLocale ) thr
 
         if ( ! xI.is() ) {
             // check if the calendar is defined in localedata, load gregorian calendar service.
-            Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
+            Sequence< Calendar2 > xC = LocaleDataImpl::get()->getAllCalendars2(rLocale);
             for (i = 0; i < xC.getLength(); i++) {
                 if (uniqueID == xC[i].Name) {
                     xI = m_xContext->getServiceManager()->createInstanceWithContext("com.sun.star.i18n.Calendar_gregorian", m_xContext);
@@ -129,7 +129,7 @@ CalendarImpl::getLoadedCalendar() throw(RuntimeException, std::exception)
 Sequence< OUString > SAL_CALL
 CalendarImpl::getAllCalendars( const Locale& rLocale ) throw(RuntimeException, std::exception)
 {
-    Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
+    Sequence< Calendar2 > xC = LocaleDataImpl::get()->getAllCalendars2(rLocale);
     sal_Int32 nLen = xC.getLength();
     Sequence< OUString > xSeq( nLen );
     for (sal_Int32 i = 0; i < nLen; i++)
diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx
index f3fa8ea..c7ff413 100644
--- a/i18npool/source/calendar/calendar_gregorian.cxx
+++ b/i18npool/source/calendar/calendar_gregorian.cxx
@@ -189,8 +189,8 @@ Calendar_hanja::getDisplayName( sal_Int16 displayIndex, sal_Int16 idx, sal_Int16
     if ( displayIndex == CalendarDisplayIndex::AM_PM ) {
         // Am/Pm string for Korean Hanja calendar will refer to Japanese locale
         css::lang::Locale jaLocale(OUString("ja"), OUString(), OUString());
-        if (idx == 0) return LocaleDataImpl().getLocaleItem(jaLocale).timeAM;
-        else if (idx == 1) return LocaleDataImpl().getLocaleItem(jaLocale).timePM;
+        if (idx == 0) return LocaleDataImpl::get()->getLocaleItem(jaLocale).timeAM;
+        else if (idx == 1) return LocaleDataImpl::get()->getLocaleItem(jaLocale).timePM;
         else throw ERROR;
     }
     else
@@ -242,7 +242,7 @@ Calendar_gregorian::loadCalendar( const OUString& uniqueID, const css::lang::Loc
     getValue();
 
     aLocale = rLocale;
-    Sequence< Calendar2 > xC = LocaleDataImpl().getAllCalendars2(rLocale);
+    Sequence< Calendar2 > xC = LocaleDataImpl::get()->getAllCalendars2(rLocale);
     for (sal_Int32 i = 0; i < xC.getLength(); i++)
     {
         if (uniqueID == xC[i].Name)
@@ -776,8 +776,8 @@ Calendar_gregorian::getDisplayName( sal_Int16 displayIndex, sal_Int16 idx, sal_I
 
     switch( displayIndex ) {
         case CalendarDisplayIndex::AM_PM:/* ==0 */
-            if (idx == 0) aStr = LocaleDataImpl().getLocaleItem(aLocale).timeAM;
-            else if (idx == 1) aStr = LocaleDataImpl().getLocaleItem(aLocale).timePM;
+            if (idx == 0) aStr = LocaleDataImpl::get()->getLocaleItem(aLocale).timeAM;
+            else if (idx == 1) aStr = LocaleDataImpl::get()->getLocaleItem(aLocale).timePM;
             else throw ERROR;
             break;
         case CalendarDisplayIndex::DAY:
@@ -839,7 +839,7 @@ Calendar_gregorian::getDisplayStringImpl( sal_Int32 nCalendarDisplayCode, sal_In
 
     if (nCalendarDisplayCode == CalendarDisplayCode::SHORT_QUARTER ||
             nCalendarDisplayCode == CalendarDisplayCode::LONG_QUARTER) {
-        Sequence< OUString> xR = LocaleDataImpl().getReservedWord(aLocale);
+        Sequence< OUString> xR = LocaleDataImpl::get()->getReservedWord(aLocale);
         sal_Int16 quarter = value / 3;
         // Since this base class method may be called by derived calendar
         // classes where a year consists of more than 12 months we need a check
diff --git a/i18npool/source/collator/collator_unicode.cxx b/i18npool/source/collator/collator_unicode.cxx
index f5fefa0..a1022e4 100644
--- a/i18npool/source/collator/collator_unicode.cxx
+++ b/i18npool/source/collator/collator_unicode.cxx
@@ -136,7 +136,7 @@ Collator_Unicode::loadCollatorAlgorithm(const OUString& rAlgorithm, const lang::
 {
     if (!collator) {
         UErrorCode status = U_ZERO_ERROR;
-        OUString rule = LocaleDataImpl().getCollatorRuleByAlgorithm(rLocale, rAlgorithm);
+        OUString rule = LocaleDataImpl::get()->getCollatorRuleByAlgorithm(rLocale, rAlgorithm);
         if (!rule.isEmpty()) {
             collator = new RuleBasedCollator(reinterpret_cast<const UChar *>(rule.getStr()), status);   // UChar != sal_Unicode in MinGW
             if (! U_SUCCESS(status)) throw RuntimeException();
diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
index 82f3fa4..6109745 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -280,13 +280,13 @@ void DefaultNumberingProvider::impl_loadTranslit()
 Sequence< Reference<container::XIndexAccess> >
 DefaultNumberingProvider::getDefaultOutlineNumberings(const Locale& rLocale ) throw(RuntimeException, std::exception)
 {
-     return LocaleDataImpl().getOutlineNumberingLevels( rLocale );
+     return LocaleDataImpl::get()->getOutlineNumberingLevels( rLocale );
 }
 
 Sequence< Sequence<beans::PropertyValue> >
 DefaultNumberingProvider::getDefaultContinuousNumberingLevels( const Locale& rLocale ) throw(RuntimeException, std::exception)
 {
-     return LocaleDataImpl().getContinuousNumberingLevels( rLocale );
+     return LocaleDataImpl::get()->getContinuousNumberingLevels( rLocale );
 }
 
 OUString toRoman( sal_Int32 n )
diff --git a/i18npool/source/indexentry/indexentrysupplier.cxx b/i18npool/source/indexentry/indexentrysupplier.cxx
index 2ade78f..cb06d79 100644
--- a/i18npool/source/indexentry/indexentrysupplier.cxx
+++ b/i18npool/source/indexentry/indexentrysupplier.cxx
@@ -34,12 +34,12 @@ IndexEntrySupplier::IndexEntrySupplier( const Reference < XComponentContext >& r
 
 Sequence < Locale > SAL_CALL IndexEntrySupplier::getLocaleList() throw (RuntimeException, std::exception)
 {
-    return LocaleDataImpl().getAllInstalledLocaleNames();
+    return LocaleDataImpl::get()->getAllInstalledLocaleNames();
 }
 
 Sequence < OUString > SAL_CALL IndexEntrySupplier::getAlgorithmList( const Locale& rLocale ) throw (RuntimeException, std::exception)
 {
-    return LocaleDataImpl().getIndexAlgorithm(rLocale);
+    return LocaleDataImpl::get()->getIndexAlgorithm(rLocale);
 }
 
 sal_Bool SAL_CALL IndexEntrySupplier::loadAlgorithm( const Locale& rLocale, const OUString& SortAlgorithm,
@@ -57,7 +57,7 @@ sal_Bool SAL_CALL IndexEntrySupplier::loadAlgorithm( const Locale& rLocale, cons
 
 sal_Bool SAL_CALL IndexEntrySupplier::usePhoneticEntry( const Locale& rLocale ) throw (RuntimeException, std::exception)
 {
-    return LocaleDataImpl().hasPhonetic(rLocale);
+    return LocaleDataImpl::get()->hasPhonetic(rLocale);
 }
 
 OUString SAL_CALL IndexEntrySupplier::getPhoneticCandidate( const OUString& rIndexEntry,
@@ -167,7 +167,7 @@ IndexEntrySupplier::getLocaleSpecificIndexEntrySupplier(const Locale& rLocale, c
 OUString SAL_CALL IndexEntrySupplier::getIndexFollowPageWord( sal_Bool bMorePages,
         const Locale& rLocale ) throw (RuntimeException, std::exception)
 {
-    Sequence< OUString > aFollowPageWords = LocaleDataImpl().getFollowPageWords(rLocale);
+    Sequence< OUString > aFollowPageWords = LocaleDataImpl::get()->getFollowPageWords(rLocale);
 
     return (bMorePages && aFollowPageWords.getLength() > 1) ?
         aFollowPageWords[1] : (aFollowPageWords.getLength() > 0 ?
diff --git a/i18npool/source/indexentry/indexentrysupplier_common.cxx b/i18npool/source/indexentry/indexentrysupplier_common.cxx
index 74009b9..fafb304 100644
--- a/i18npool/source/indexentry/indexentrysupplier_common.cxx
+++ b/i18npool/source/indexentry/indexentrysupplier_common.cxx
@@ -63,7 +63,7 @@ sal_Bool SAL_CALL IndexEntrySupplier_Common::usePhoneticEntry( const lang::Local
 sal_Bool SAL_CALL IndexEntrySupplier_Common::loadAlgorithm( const lang::Locale& rLocale,
     const OUString& rAlgorithm, sal_Int32 collatorOptions ) throw (RuntimeException, std::exception)
 {
-    usePhonetic = LocaleDataImpl().isPhonetic(rLocale, rAlgorithm);
+    usePhonetic = LocaleDataImpl::get()->isPhonetic(rLocale, rAlgorithm);
     collator->loadCollatorAlgorithm(rAlgorithm, rLocale, collatorOptions);
     aLocale = rLocale;
     aAlgorithm = rAlgorithm;
diff --git a/i18npool/source/indexentry/indexentrysupplier_default.cxx b/i18npool/source/indexentry/indexentrysupplier_default.cxx
index 6db7a11..ee0c3f5 100644
--- a/i18npool/source/indexentry/indexentrysupplier_default.cxx
+++ b/i18npool/source/indexentry/indexentrysupplier_default.cxx
@@ -167,11 +167,11 @@ OUString Index::getIndexDescription(const OUString& rIndexEntry)
 
 void Index::makeIndexKeys(const lang::Locale &rLocale, const OUString &algorithm) throw (RuntimeException)
 {
-    OUString keyStr = LocaleDataImpl().getIndexKeysByAlgorithm(rLocale, algorithm);
+    OUString keyStr = LocaleDataImpl::get()->getIndexKeysByAlgorithm(rLocale, algorithm);
 
     if (keyStr.isEmpty()) {
-        keyStr = LocaleDataImpl().getIndexKeysByAlgorithm(LOCALE_EN,
-                    LocaleDataImpl().getDefaultIndexAlgorithm(LOCALE_EN));
+        keyStr = LocaleDataImpl::get()->getIndexKeysByAlgorithm(LOCALE_EN,
+                    LocaleDataImpl::get()->getDefaultIndexAlgorithm(LOCALE_EN));
         if (keyStr.isEmpty())
             throw RuntimeException();
     }
@@ -255,10 +255,10 @@ void Index::init(const lang::Locale &rLocale, const OUString& algorithm) throw (
 {
     makeIndexKeys(rLocale, algorithm);
 
-    Sequence< UnicodeScript > scriptList = LocaleDataImpl().getUnicodeScripts( rLocale );
+    Sequence< UnicodeScript > scriptList = LocaleDataImpl::get()->getUnicodeScripts( rLocale );
 
     if (scriptList.getLength() == 0) {
-        scriptList = LocaleDataImpl().getUnicodeScripts(LOCALE_EN);
+        scriptList = LocaleDataImpl::get()->getUnicodeScripts(LOCALE_EN);
         if (scriptList.getLength() == 0)
             throw RuntimeException();
     }
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 628a27f..3fd27e5 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -578,7 +578,7 @@ OUString SAL_CALL NativeNumberSupplierService::getNativeNumberString(const OUStr
         if (!aLocale.Language.equals(rLocale.Language) ||
                 !aLocale.Country.equals(rLocale.Country) ||
                 !aLocale.Variant.equals(rLocale.Variant)) {
-            LocaleDataItem item = LocaleDataImpl().getLocaleItem( rLocale );
+            LocaleDataItem item = LocaleDataImpl::get()->getLocaleItem( rLocale );
             aLocale = rLocale;
             DecimalChar[NumberChar_HalfWidth]=item.decimalSeparator.toChar();
             if (DecimalChar[NumberChar_HalfWidth] > 0x7E || DecimalChar[NumberChar_HalfWidth] < 0x21)
diff --git a/i18npool/source/transliteration/transliteration_Numeric.cxx b/i18npool/source/transliteration/transliteration_Numeric.cxx
index 86de70f..3ec34f9 100644
--- a/i18npool/source/transliteration/transliteration_Numeric.cxx
+++ b/i18npool/source/transliteration/transliteration_Numeric.cxx
@@ -22,6 +22,7 @@
 #include <nativenumbersupplier.hxx>
 #include <defaultnumberingprovider.hxx>
 #include <comphelper/string.hxx>
+#include <rtl/ref.hxx>
 
 using namespace com::sun::star::uno;
 
@@ -119,7 +120,7 @@ transliteration_Numeric::transliterate( const OUString& inStr, sal_Int32 startPo
     if (tableSize)
         return transliterateBullet( inStr, startPos, nCount, offset);
     else
-        return NativeNumberSupplierService(useOffset).getNativeNumberString( inStr.copy(startPos, nCount), aLocale, nNativeNumberMode, offset );
+        return rtl::Reference<NativeNumberSupplierService>(new NativeNumberSupplierService(useOffset))->getNativeNumberString( inStr.copy(startPos, nCount), aLocale, nNativeNumberMode, offset );
 }
 
 sal_Unicode SAL_CALL
@@ -134,7 +135,7 @@ transliteration_Numeric::transliterateChar2Char( sal_Unicode inChar ) throw(Runt
         return inChar;
     }
     else
-        return NativeNumberSupplierService().getNativeNumberChar( inChar, aLocale, nNativeNumberMode );
+        return rtl::Reference<NativeNumberSupplierService>(new NativeNumberSupplierService)->getNativeNumberChar( inChar, aLocale, nNativeNumberMode );
 }
 
 } } } }
diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx
index f3cc4f2..5ce0789 100644
--- a/sfx2/source/doc/objxtor.cxx
+++ b/sfx2/source/doc/objxtor.cxx
@@ -866,7 +866,7 @@ uno::Sequence< OUString > SfxObjectShell::GetEventNames()
         SolarMutexGuard aGuard;
         if ( !pEventNameContainer )
         {
-            static uno::Sequence< OUString > aEventNameContainer = GlobalEventConfig().getElementNames();
+            static uno::Sequence< OUString > aEventNameContainer = rtl::Reference<GlobalEventConfig>(new GlobalEventConfig)->getElementNames();
             pEventNameContainer = &aEventNameContainer;
         }
     }
diff --git a/sfx2/source/notify/eventsupplier.cxx b/sfx2/source/notify/eventsupplier.cxx
index 0e8d2c4..6c54b46 100644
--- a/sfx2/source/notify/eventsupplier.cxx
+++ b/sfx2/source/notify/eventsupplier.cxx
@@ -317,7 +317,7 @@ SfxEvents_Impl::SfxEvents_Impl( SfxObjectShell* pShell,
     if ( pShell )
         maEventNames = pShell->GetEventNames();
     else
-        maEventNames = GlobalEventConfig().getElementNames();
+        maEventNames = rtl::Reference<GlobalEventConfig>(new GlobalEventConfig)->getElementNames();
 
     maEventData = uno::Sequence < uno::Any > ( maEventNames.getLength() );
 


More information about the Libreoffice-commits mailing list