Bug 1273048 - Add __attribute__((noinline)) to work around compiler bug on Android/x86. r=xidorn

I tested locally that the MOZ_GCC_VERSION_AT_LEAST() and
MOZ_GCC_VERSION_AT_MOST() expressions do sensible things when I fiddle
with the numbers to make them more or less than my local gcc version.
(I tested this for all 4 expressions.)

I don't know for sure that this will fix the crashes we're seeing, but
it seems like it should undo the change that triggered it, so I think
it's worth trying.

MozReview-Commit-ID: IXYYn3mLQBf

--HG--
extra : transplant_source : %20%94%06%05L%8A%CA%DD%83%D9%23jh%E53%EF%F9%A3%0C%B4
This commit is contained in:
L. David Baron 2016-06-04 17:51:30 -07:00
parent 97c2e11d8c
commit fa514af6ea

View File

@ -10,6 +10,7 @@
#include "nsIAtom.h"
#include "mozilla/CSSEnabledState.h"
#include "mozilla/Compiler.h"
// Is this pseudo-element a CSS2 pseudo-element that can be specified
// with the single colon syntax (in addition to the double-colon syntax,
@ -105,6 +106,16 @@ public:
private:
// Does the given pseudo-element have all of the flags given?
// Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64037 ,
// which is a general gcc bug that we seem to have hit only on Android/x86.
#if defined(ANDROID) && defined(__i386__) && defined(__GNUC__) && \
!defined(__clang__)
#if (MOZ_GCC_VERSION_AT_LEAST(4,8,0) && MOZ_GCC_VERSION_AT_MOST(4,8,4)) || \
(MOZ_GCC_VERSION_AT_LEAST(4,9,0) && MOZ_GCC_VERSION_AT_MOST(4,9,2))
__attribute__((noinline))
#endif
#endif
static bool PseudoElementHasFlags(const Type aType, uint32_t aFlags)
{
MOZ_ASSERT(aType < Type::Count);