diff options
author | Eike Rathke <erack@redhat.com> | 2015-01-05 22:28:34 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2015-01-06 11:40:23 +0100 |
commit | 549b7fad48bb9ddcba7dfa92daea6ce917853a03 (patch) | |
tree | 6a707369b9db7c24e2737b789cffa2278dd003e1 /framework | |
parent | 5c0e20240a8e55972e5f46b7f9f5c0d8f9733924 (diff) |
workaround a weird gcc optimization werror bug
gcc (GCC) 4.9.2 20141101 (Red Hat 4.9.2-1)
framework/source/fwe/classes/addonsoptions.cxx: In member function ‘void framework::AddonsOptions_Impl::ReadAndAssociateImages(const rtl::OUString&, const rtl::OUString&)’:
framework/source/fwe/classes/addonsoptions.cxx:267:16: error: array subscript is above array bounds [-Werror=array-bounds]
struct ImageEntry
^
The combination of aScaled[2]; aImage[2]; aURL[2] in sequence apparently lead
to some overoptimization and/or alignment problem, already declaring aImage[3]
helped (but not aScaled[3]), but that's not what we want.
Change-Id: I82e28d4887ab8072a17d0a9341d322c1cf61aedc
Diffstat (limited to 'framework')
-rw-r--r-- | framework/source/fwe/classes/addonsoptions.cxx | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/framework/source/fwe/classes/addonsoptions.cxx b/framework/source/fwe/classes/addonsoptions.cxx index 95b096d460f9..7ba81c37ea9e 100644 --- a/framework/source/fwe/classes/addonsoptions.cxx +++ b/framework/source/fwe/classes/addonsoptions.cxx @@ -217,19 +217,24 @@ class AddonsOptions_Impl : public ConfigItem private: enum ImageSize { - IMGSIZE_SMALL, + IMGSIZE_SMALL = 0, IMGSIZE_BIG }; + struct OneImageEntry + { + Image aScaled; ///< cached scaled image + Image aImage; ///< original un-scaled image + OUString aURL; ///< URL in case it is not loaded yet + }; + struct ImageEntry { // if the image is set, it was embedded in some way, // otherwise we use the associated URL to load on demand // accessed in this order - Image aScaled[2]; // cached scaled images - Image aImage[2]; // original un-scaled images - OUString aURL[2]; // URLs in case they are not loaded yet + OneImageEntry aSizeEntry[2]; ImageEntry() {} void addImage(ImageSize eSize, const Image &rImage, const OUString &rURL); }; @@ -309,8 +314,8 @@ void AddonsOptions_Impl::ImageEntry::addImage(ImageSize eSize, const Image &rImage, const OUString &rURL) { - aImage[(int)eSize] = rImage; - aURL[(int)eSize] = rURL; + aSizeEntry[(int)eSize].aImage = rImage; + aSizeEntry[(int)eSize].aURL = rURL; } // constructor @@ -505,35 +510,36 @@ Image AddonsOptions_Impl::GetImageFromURL( const OUString& aURL, bool bBig, bool ImageManager::iterator pIter = m_aImageManager.find(aURL); if ( pIter != m_aImageManager.end() ) { - ImageEntry &rEntry = pIter->second; + OneImageEntry& rSizeEntry = pIter->second.aSizeEntry[nIdx]; + OneImageEntry& rOtherEntry = pIter->second.aSizeEntry[nOtherIdx]; // actually read the image ... - if (!rEntry.aImage[nIdx]) - rEntry.aImage[nIdx] = ReadImageFromURL(rEntry.aURL[nIdx]); + if (!rSizeEntry.aImage) + rSizeEntry.aImage = ReadImageFromURL(rSizeEntry.aURL); - if (!rEntry.aImage[nIdx]) + if (!rSizeEntry.aImage) { // try the other size and scale it - aImage = ScaleImage(ReadImageFromURL(rEntry.aURL[nOtherIdx]), bBig); - rEntry.aImage[nIdx] = aImage; - if (!rEntry.aImage[nIdx]) + aImage = ScaleImage(ReadImageFromURL(rOtherEntry.aURL), bBig); + rSizeEntry.aImage = aImage; + if (!rSizeEntry.aImage) SAL_WARN("fwk", "failed to load addons image " << aURL); } // FIXME: bNoScale is not terribly meaningful or useful if (!aImage && bNoScale) - aImage = rEntry.aImage[nIdx]; + aImage = rSizeEntry.aImage; - if (!aImage && !!rEntry.aScaled[nIdx]) - aImage = rEntry.aScaled[nIdx]; + if (!aImage && !!rSizeEntry.aScaled) + aImage = rSizeEntry.aScaled; else // scale to the correct size for the theme / toolbox { - aImage = rEntry.aImage[nIdx]; + aImage = rSizeEntry.aImage; if (!aImage) // use and scale the other if one size is missing - aImage = rEntry.aImage[nOtherIdx]; + aImage = rOtherEntry.aImage; aImage = ScaleImage(aImage, bBig); - rEntry.aScaled[nIdx] = aImage; // cache for next time + rSizeEntry.aScaled = aImage; // cache for next time } } |