author | Nicholas Nethercote <nnethercote@mozilla.com> |
Thu, 15 Mar 2012 19:40:00 -0700 | |
changeset 89799 | 0124795a8cbba6a6b9cc001b28a4e44def14e3f1 |
parent 89798 | 9ce5ce7ac5a6220ec19916cbe858cc198d503aa9 |
child 89800 | 307490794b3dc45bc241574df96892260c9f1a10 |
child 89996 | a821cc27e7d396c04f6ded145379afe3a30b86cc |
push id | 7327 |
push user | nnethercote@mozilla.com |
push date | Tue, 20 Mar 2012 08:24:13 +0000 |
treeherder | mozilla-inbound@0124795a8cbb [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | waldo, derf, khuey, mhommey, jwatt |
bugs | 711895 |
milestone | 14.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/build/autoconf/compiler-opts.m4 +++ b/build/autoconf/compiler-opts.m4 @@ -77,8 +77,54 @@ if test "$GNU_CC" -a "$GCC_USE_GNU_LD" - fi rm -rf conftest*]) if test "$GC_SECTIONS_BREAKS_DEBUG_RANGES" = no; then DSO_LDOPTS="$DSO_LDOPTS -Wl,--gc-sections" fi fi ]) + +dnl GCC and clang will fail if given an unknown warning option like -Wfoobar. +dnl But later versions won't fail if given an unknown negated warning option +dnl like -Wno-foobar. So when we are check for support of negated warning +dnl options, we actually test the positive form, but add the negated form to +dnl the flags variable. + +AC_DEFUN([MOZ_C_SUPPORTS_WARNING], +[ + AC_CACHE_CHECK(whether the C compiler supports $1$2, $3, + [ + AC_LANG_SAVE + AC_LANG_C + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W$2" + AC_TRY_COMPILE([], + [return(0);], + $3="yes", + $3="no") + CFLAGS="$_SAVE_CFLAGS" + AC_LANG_RESTORE + ]) + if test "${$3}" = "yes"; then + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} $1$2" + fi +]) + +AC_DEFUN([MOZ_CXX_SUPPORTS_WARNING], +[ + AC_CACHE_CHECK(whether the C++ compiler supports $1$2, $3, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -W$2" + AC_TRY_COMPILE([], + [return(0);], + $3="yes", + $3="no") + CXXFLAGS="$_SAVE_CXXFLAGS" + AC_LANG_RESTORE + ]) + if test "${$3}" = "yes"; then + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} $1$2" + fi +])
--- a/configure.in +++ b/configure.in @@ -1691,46 +1691,54 @@ if test "$GNU_CC"; then fi WARNINGS_AS_ERRORS='-Werror -Wno-error=uninitialized' DSO_CFLAGS='' DSO_PIC_CFLAGS='-fPIC' ASFLAGS="$ASFLAGS -fPIC" _MOZ_RTTI_FLAGS_ON=-frtti _MOZ_RTTI_FLAGS_OFF=-fno-rtti - # Turn on GNU specific features - # -Wall - turn on all warnings - # -pedantic - make compiler warn about non-ANSI stuff, and - # be a little bit stricter - # -Wdeclaration-after-statement - MSVC doesn't like these - # Warnings slamm took out for now (these were giving more noise than help): - # -Wbad-function-cast - warns when casting a function to a new return type - # -Wshadow - removed because it generates more noise than help --pete - _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -W -Wno-unused -Wpointer-arith -Wdeclaration-after-statement" + # Turn on GNU-specific warnings: + # -Wall - turn on a lot of warnings + # -pedantic - this is turned on below + # -Wpointer-arith - enabled with -pedantic, but good to have even if not + # -Werror=declaration-after-statement - MSVC doesn't like these + # -Werror=return-type - catches missing returns, zero false positives + # -Wtype-limits - catches overflow bugs, few false positives + # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives + # + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -Wpointer-arith -Werror=declaration-after-statement" + MOZ_C_SUPPORTS_WARNING(-W, error=return-type, ac_c_has_werror_return_type) + MOZ_C_SUPPORTS_WARNING(-W, type-limits, ac_c_has_wtype_limits) + MOZ_C_SUPPORTS_WARNING(-W, empty-body, ac_c_has_wempty_body) + + # Turn off the following warnings that -Wall/-pedantic turn on: + # -Wno-overlength-strings - we exceed the minimum maximum length frequently + # -Wno-unused - lots of violations in third-party code + # + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-overlength-strings -Wno-unused" + if test -z "$INTEL_CC" -a -z "$CLANG_CC"; then # Don't use -Wcast-align with ICC or clang case "$CPU_ARCH" in # And don't use it on hppa, ia64, sparc, arm, since it's noisy there hppa | ia64 | sparc | arm) ;; *) _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wcast-align" ;; esac fi dnl Turn pedantic on but disable the warnings for long long _PEDANTIC=1 - if test -z "$INTEL_CC"; then - _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -W" - fi - _DEFINES_CFLAGS='-include $(DEPTH)/mozilla-config.h -DMOZILLA_CLIENT' _USE_CPP_INCLUDE_FLAG=1 + elif test "$SOLARIS_SUNPRO_CC"; then DSO_CFLAGS='' if test "$CPU_ARCH" = "sparc"; then # for Sun Studio on Solaris/SPARC DSO_PIC_CFLAGS='-xcode=pic32' else DSO_PIC_CFLAGS='-KPIC' fi @@ -1748,18 +1756,41 @@ else DSO_CFLAGS='' DSO_PIC_CFLAGS='-KPIC' _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT' fi if test "$GNU_CXX"; then # FIXME: Let us build with strict aliasing. bug 414641. CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-strict-aliasing" - # Turn on GNU specific features - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor" + + # Turn on GNU-specific warnings: + # -Wall - turn on a lot of warnings + # -pedantic - this is turned on below + # -Wpointer-arith - enabled with -pedantic, but good to have even if not + # -Woverloaded-virtual - ??? + # -Werror=return-type - catches missing returns, zero false positives + # -Wtype-limits - catches overflow bugs, few false positives + # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives + # + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual" + MOZ_CXX_SUPPORTS_WARNING(-W, error=return-type, ac_cxx_has_werror_return_type) + MOZ_CXX_SUPPORTS_WARNING(-W, type-limits, ac_cxx_has_wtype_limits) + MOZ_CXX_SUPPORTS_WARNING(-W, empty-body, ac_cxx_has_wempty_body) + + # Turn off the following warnings that -Wall/-pedantic turn on: + # -Wno-overlength-strings - we exceed the minimum maximum length frequently + # -Wno-ctor-dtor-privacy - ??? + # -Wno-invalid-offsetof - we use offsetof on non-POD types frequently + # -Wno-variadic-macros - ??? + # + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-overlength-strings -Wno-ctor-dtor-privacy" + MOZ_CXX_SUPPORTS_WARNING(-Wno-, invalid-offsetof, ac_cxx_has_wno_invalid_offsetof) + MOZ_CXX_SUPPORTS_WARNING(-Wno-, variadic-macros, ac_cxx_has_wno_variadic_macros) + if test -z "$INTEL_CXX" -a -z "$CLANG_CXX"; then # Don't use -Wcast-align with ICC or clang case "$CPU_ARCH" in # And don't use it on hppa, ia64, sparc, arm, since it's noisy there hppa | ia64 | sparc | arm) ;; *) _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wcast-align" @@ -1773,91 +1804,17 @@ if test "$GNU_CXX"; then # Recent clang and gcc support C++11 deleted functions without warnings if # compiling with -std=c++0x or -std=gnu++0x (or c++11 or gnu++11 in very new # versions). We can't use -std=c++0x yet, so gcc's support must remain # unused. But clang's warning can be disabled, so when compiling with clang # we use it to opt out of the warning, enabling (macro-encapsulated) use of # deleted function syntax. if test "$CLANG_CXX"; then _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-c++0x-extensions" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-extended-offsetof, - ac_has_wno_extended_offsetof, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-extended-offsetof" - AC_TRY_COMPILE([$configure_static_assert_macros - #ifndef __has_warning - #define __has_warning(x) 0 - #endif], - [CONFIGURE_STATIC_ASSERT(__has_warning("-Wextended-offsetof"))], - ac_has_wno_extended_offsetof="yes", - ac_has_wno_extended_offsetof="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_extended_offsetof" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-extended-offsetof" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-invalid-offsetof, - ac_has_wno_invalid_offsetof, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-invalid-offsetof" - AC_TRY_COMPILE([], - [return(0);], - ac_has_wno_invalid_offsetof="yes", - ac_has_wno_invalid_offsetof="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_invalid_offsetof" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-invalid-offsetof" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-variadic-macros, - ac_has_wno_variadic_macros, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-variadic-macros" - AC_TRY_COMPILE([], - [return(0);], - ac_has_wno_variadic_macros="yes", - ac_has_wno_variadic_macros="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_variadic_macros" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-variadic-macros" - fi - - AC_CACHE_CHECK(whether the compiler supports -Werror=return-type, - ac_has_werror_return_type, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Werror=return-type" - AC_TRY_COMPILE([], - [return(0);], - ac_has_werror_return_type="yes", - ac_has_werror_return_type="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_werror_return_type" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=return-type" + MOZ_CXX_SUPPORTS_WARNING(-Wno-, extended-offsetof, ac_cxx_has_wno_extended_offsetof) fi else _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_MOZILLA_CONFIG_H_ $(ACDEFINES)' fi dnl gcc can come with its own linker so it is better to use the pass-thru calls dnl MKSHLIB_FORCE_ALL is used to force the linker to include all object
--- a/content/smil/nsSMILAnimationFunction.cpp +++ b/content/smil/nsSMILAnimationFunction.cpp @@ -666,17 +666,17 @@ nsSMILAnimationFunction::ScaleSimpleProg return aProgress; PRUint32 numTimes = mKeyTimes.Length(); if (numTimes < 2) return aProgress; PRUint32 i = 0; - for (; i < numTimes - 2 && aProgress >= mKeyTimes[i+1]; ++i); + for (; i < numTimes - 2 && aProgress >= mKeyTimes[i+1]; ++i) { } if (aCalcMode == CALC_DISCRETE) { // discrete calcMode behaviour differs in that each keyTime defines the time // from when the corresponding value is set, and therefore the last value // needn't be 1. So check if we're in the last 'interval', that is, the // space between the final value and 1.0. if (aProgress >= mKeyTimes[i+1]) { NS_ABORT_IF_FALSE(i == numTimes - 2,
--- a/content/smil/nsSMILTimedElement.cpp +++ b/content/smil/nsSMILTimedElement.cpp @@ -1762,17 +1762,17 @@ nsSMILTimedElement::GetNextInterval(cons nsSMILInstanceTime* nsSMILTimedElement::GetNextGreater(const InstanceTimeList& aList, const nsSMILTimeValue& aBase, PRInt32& aPosition) const { nsSMILInstanceTime* result = nsnull; while ((result = GetNextGreaterOrEqual(aList, aBase, aPosition)) && - result->Time() == aBase); + result->Time() == aBase) { } return result; } nsSMILInstanceTime* nsSMILTimedElement::GetNextGreaterOrEqual(const InstanceTimeList& aList, const nsSMILTimeValue& aBase, PRInt32& aPosition) const {
--- a/content/xslt/src/base/txExpandedNameMap.h +++ b/content/xslt/src/base/txExpandedNameMap.h @@ -97,28 +97,26 @@ protected: bool next() { return ++mCurrentPos < mMap.mItems.Length(); } const txExpandedName key() { - NS_ASSERTION(mCurrentPos >= 0 && - mCurrentPos < mMap.mItems.Length(), + NS_ASSERTION(mCurrentPos < mMap.mItems.Length(), "invalid position in txExpandedNameMap::iterator"); return txExpandedName(mMap.mItems[mCurrentPos].mNamespaceID, mMap.mItems[mCurrentPos].mLocalName); } protected: void* itemValue() { - NS_ASSERTION(mCurrentPos >= 0 && - mCurrentPos < mMap.mItems.Length(), + NS_ASSERTION(mCurrentPos < mMap.mItems.Length(), "invalid position in txExpandedNameMap::iterator"); return mMap.mItems[mCurrentPos].mValue; } private: txExpandedNameMap_base& mMap; PRUint32 mCurrentPos; };
--- a/gfx/thebes/gfxFont.h +++ b/gfx/thebes/gfxFont.h @@ -2274,29 +2274,29 @@ public: } bool CanHyphenateBefore(PRUint32 aPos) { NS_ASSERTION(aPos < mCharacterCount, "aPos out of range"); return mCharacterGlyphs[aPos].CanBreakBefore() == CompressedGlyph::FLAG_BREAK_TYPE_HYPHEN; } bool CharIsSpace(PRUint32 aPos) { - NS_ASSERTION(0 <= aPos && aPos < mCharacterCount, "aPos out of range"); + NS_ASSERTION(aPos < mCharacterCount, "aPos out of range"); return mCharacterGlyphs[aPos].CharIsSpace(); } bool CharIsTab(PRUint32 aPos) { - NS_ASSERTION(0 <= aPos && aPos < mCharacterCount, "aPos out of range"); + NS_ASSERTION(aPos < mCharacterCount, "aPos out of range"); return mCharacterGlyphs[aPos].CharIsTab(); } bool CharIsNewline(PRUint32 aPos) { - NS_ASSERTION(0 <= aPos && aPos < mCharacterCount, "aPos out of range"); + NS_ASSERTION(aPos < mCharacterCount, "aPos out of range"); return mCharacterGlyphs[aPos].CharIsNewline(); } bool CharIsLowSurrogate(PRUint32 aPos) { - NS_ASSERTION(0 <= aPos && aPos < mCharacterCount, "aPos out of range"); + NS_ASSERTION(aPos < mCharacterCount, "aPos out of range"); return mCharacterGlyphs[aPos].CharIsLowSurrogate(); } PRUint32 GetLength() { return mCharacterCount; } // All PRUint32 aStart, PRUint32 aLength ranges below are restricted to // grapheme cluster boundaries! All offsets are in terms of the string // passed into MakeTextRun.
new file mode 100644 --- /dev/null +++ b/gfx/ycbcr/QuellGccWarnings.patch @@ -0,0 +1,40 @@ +diff --git a/gfx/ycbcr/yuv_convert.cpp b/gfx/ycbcr/yuv_convert.cpp +--- a/gfx/ycbcr/yuv_convert.cpp ++++ b/gfx/ycbcr/yuv_convert.cpp +@@ -337,16 +337,17 @@ NS_GFX_(void) ScaleYCbCrToRGB32(const ui + source_dx_uv >> kFractionBits); + } + } + else { + ScaleYUVToRGB32Row_C(y_ptr, u_ptr, v_ptr, + dest_pixel, width, source_dx); + } + #else ++ (void)source_dx_uv; + ScaleYUVToRGB32Row(y_ptr, u_ptr, v_ptr, + dest_pixel, width, source_dx); + #endif + } + } + // MMX used for FastConvertYUVToRGB32Row and FilterRows requires emms. + if (has_mmx) + EMMS(); +diff --git a/gfx/ycbcr/yuv_row.h b/gfx/ycbcr/yuv_row.h +--- a/gfx/ycbcr/yuv_row.h ++++ b/gfx/ycbcr/yuv_row.h +@@ -129,14 +129,14 @@ extern SIMD_ALIGNED(int16 kCoefficientsR + #if defined(ARCH_CPU_X86) && !defined(ARCH_CPU_X86_64) + #if defined(_MSC_VER) + #define EMMS() __asm emms + #pragma warning(disable: 4799) + #else + #define EMMS() asm("emms") + #endif + #else +-#define EMMS() ++#define EMMS() ((void)0) + #endif + + } // extern "C" + + #endif // MEDIA_BASE_YUV_ROW_H_
--- a/gfx/ycbcr/README +++ b/gfx/ycbcr/README @@ -20,8 +20,10 @@ convert.patch contains the following cha * Add YCbCr 4:4:4 support * Bug 619178 - Update CPU detection in yuv_convert to new SSE.h interface. * Bug 616778 - Split yuv_convert FilterRows vectorized code into separate files so it can be properly guarded with cpuid() calls. win64.patch: SSE2 optimization for Microsoft Visual C++ x64 version TypeFromSize.patch: Bug 656185 - Add a method to detect YUVType from plane sizes. + +QuellGccWarnings.patch: Bug 711895 - Avoid some GCC compilation warnings.
--- a/gfx/ycbcr/update.sh +++ b/gfx/ycbcr/update.sh @@ -4,8 +4,9 @@ cp $1/media/base/yuv_convert.cc yuv_conv cp $1/media/base/yuv_row.h . cp $1/media/base/yuv_row_table.cc yuv_row_table.cpp cp $1/media/base/yuv_row_posix.cc yuv_row_posix.cpp cp $1/media/base/yuv_row_win.cc yuv_row_win.cpp cp $1/media/base/yuv_row_posix.cc yuv_row_c.cpp patch -p3 <convert.patch patch -p3 <win64.patch patch -p3 <TypeFromSize.patch +patch -p3 <QuellGccWarnings.patch
--- a/gfx/ycbcr/yuv_convert.cpp +++ b/gfx/ycbcr/yuv_convert.cpp @@ -337,16 +337,17 @@ NS_GFX_(void) ScaleYCbCrToRGB32(const ui source_dx_uv >> kFractionBits); } } else { ScaleYUVToRGB32Row_C(y_ptr, u_ptr, v_ptr, dest_pixel, width, source_dx); } #else + (void)source_dx_uv; ScaleYUVToRGB32Row(y_ptr, u_ptr, v_ptr, dest_pixel, width, source_dx); #endif } } // MMX used for FastConvertYUVToRGB32Row and FilterRows requires emms. if (has_mmx) EMMS();
--- a/gfx/ycbcr/yuv_row.h +++ b/gfx/ycbcr/yuv_row.h @@ -129,14 +129,14 @@ extern SIMD_ALIGNED(int16 kCoefficientsR #if defined(ARCH_CPU_X86) && !defined(ARCH_CPU_X86_64) #if defined(_MSC_VER) #define EMMS() __asm emms #pragma warning(disable: 4799) #else #define EMMS() asm("emms") #endif #else -#define EMMS() +#define EMMS() ((void)0) #endif } // extern "C" #endif // MEDIA_BASE_YUV_ROW_H_
--- a/js/jsd/jsd.h +++ b/js/jsd/jsd.h @@ -374,20 +374,16 @@ jsd_SetErrorReporter(JSDContext* j JSD_ErrorReporter reporter, void* callerdata); extern JSBool jsd_GetErrorReporter(JSDContext* jsdc, JSD_ErrorReporter* reporter, void** callerdata); -static JSBool -jsd_DebugErrorHook(JSContext *cx, const char *message, - JSErrorReport *report, void *closure); - /***************************************************************************/ /* Script functions */ extern JSBool jsd_InitScriptManager(JSDContext *jsdc); extern void jsd_DestroyScriptManager(JSDContext* jsdc);
--- a/js/jsd/jsd_high.c +++ b/js/jsd/jsd_high.c @@ -271,16 +271,20 @@ jsd_DebuggerPause(JSDContext* jsdc, JSBo if (forceAllHooksOff || !(jsdc->flags & JSD_COLLECT_PROFILE_DATA)) { JS_SetExecuteHook(jsdc->jsrt, NULL, NULL); JS_SetCallHook(jsdc->jsrt, NULL, NULL); } JS_SetThrowHook(jsdc->jsrt, NULL, NULL); JS_SetDebugErrorHook(jsdc->jsrt, NULL, NULL); } +static JSBool +jsd_DebugErrorHook(JSContext *cx, const char *message, + JSErrorReport *report, void *closure); + void jsd_DebuggerUnpause(JSDContext* jsdc) { JS_SetDebuggerHandler(jsdc->jsrt, jsd_DebuggerHandler, jsdc); JS_SetExecuteHook(jsdc->jsrt, jsd_TopLevelCallHook, jsdc); JS_SetCallHook(jsdc->jsrt, jsd_FunctionCallHook, jsdc); JS_SetThrowHook(jsdc->jsrt, jsd_ThrowHandler, jsdc); JS_SetDebugErrorHook(jsdc->jsrt, jsd_DebugErrorHook, jsdc);
--- a/js/src/build/autoconf/compiler-opts.m4 +++ b/js/src/build/autoconf/compiler-opts.m4 @@ -77,8 +77,54 @@ if test "$GNU_CC" -a "$GCC_USE_GNU_LD" - fi rm -rf conftest*]) if test "$GC_SECTIONS_BREAKS_DEBUG_RANGES" = no; then DSO_LDOPTS="$DSO_LDOPTS -Wl,--gc-sections" fi fi ]) + +dnl GCC and clang will fail if given an unknown warning option like -Wfoobar. +dnl But later versions won't fail if given an unknown negated warning option +dnl like -Wno-foobar. So when we are check for support of negated warning +dnl options, we actually test the positive form, but add the negated form to +dnl the flags variable. + +AC_DEFUN([MOZ_C_SUPPORTS_WARNING], +[ + AC_CACHE_CHECK(whether the C compiler supports $1$2, $3, + [ + AC_LANG_SAVE + AC_LANG_C + _SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -W$2" + AC_TRY_COMPILE([], + [return(0);], + $3="yes", + $3="no") + CFLAGS="$_SAVE_CFLAGS" + AC_LANG_RESTORE + ]) + if test "${$3}" = "yes"; then + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} $1$2" + fi +]) + +AC_DEFUN([MOZ_CXX_SUPPORTS_WARNING], +[ + AC_CACHE_CHECK(whether the C++ compiler supports $1$2, $3, + [ + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + _SAVE_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -W$2" + AC_TRY_COMPILE([], + [return(0);], + $3="yes", + $3="no") + CXXFLAGS="$_SAVE_CXXFLAGS" + AC_LANG_RESTORE + ]) + if test "${$3}" = "yes"; then + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} $1$2" + fi +])
--- a/js/src/configure.in +++ b/js/src/configure.in @@ -1616,45 +1616,54 @@ if test "$GNU_CC"; then fi WARNINGS_AS_ERRORS='-Werror -Wno-error=uninitialized' DSO_CFLAGS='' DSO_PIC_CFLAGS='-fPIC' ASFLAGS="$ASFLAGS -fPIC" _MOZ_RTTI_FLAGS_ON=-frtti _MOZ_RTTI_FLAGS_OFF=-fno-rtti - # Turn on GNU specific features - # -Wall - turn on all warnings - # -pedantic - make compiler warn about non-ANSI stuff, and - # be a little bit stricter - # Warnings slamm took out for now (these were giving more noise than help): - # -Wbad-function-cast - warns when casting a function to a new return type - # -Wshadow - removed because it generates more noise than help --pete - _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -W -Wno-unused -Wpointer-arith" + # Turn on GNU-specific warnings: + # -Wall - turn on a lot of warnings + # -pedantic - this is turned on below + # -Wpointer-arith - enabled with -pedantic, but good to have even if not + # -Werror=declaration-after-statement - MSVC doesn't like these + # -Werror=return-type - catches missing returns, zero false positives + # -Wtype-limits - catches overflow bugs, few false positives + # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives + # + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wall -Wpointer-arith -Werror=declaration-after-statement" + MOZ_C_SUPPORTS_WARNING(-W, error=return-type, ac_c_has_werror_return_type) + MOZ_C_SUPPORTS_WARNING(-W, type-limits, ac_c_has_wtype_limits) + MOZ_C_SUPPORTS_WARNING(-W, empty-body, ac_c_has_wempty_body) + + # Turn off the following warnings that -Wall/-pedantic turn on: + # -Wno-overlength-strings - we exceed the minimum maximum length frequently + # -Wno-unused - lots of violations in third-party code + # + _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wno-overlength-strings -Wno-unused" + if test -z "$INTEL_CC" -a -z "$CLANG_CC"; then # Don't use -Wcast-align with ICC or clang case "$CPU_ARCH" in # And don't use it on hppa, ia64, sparc, arm, since it's noisy there hppa | ia64 | sparc | arm) ;; *) _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -Wcast-align" ;; esac fi dnl Turn pedantic on but disable the warnings for long long _PEDANTIC=1 - if test -z "$INTEL_CC"; then - _WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -W" - fi - _DEFINES_CFLAGS='-include $(DEPTH)/js-confdefs.h -DMOZILLA_CLIENT' _USE_CPP_INCLUDE_FLAG=1 + elif test "$SOLARIS_SUNPRO_CC"; then DSO_CFLAGS='' if test "$CPU_ARCH" = "sparc"; then # for Sun Studio on Solaris/SPARC DSO_PIC_CFLAGS='-xcode=pic32' else DSO_PIC_CFLAGS='-KPIC' fi @@ -1670,18 +1679,40 @@ else fi DSO_CFLAGS='' DSO_PIC_CFLAGS='-KPIC' _DEFINES_CFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT' fi if test "$GNU_CXX"; then - # Turn on GNU specific features - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-non-virtual-dtor" + # Turn on GNU-specific warnings: + # -Wall - turn on a lot of warnings + # -pedantic - this is turned on below + # -Wpointer-arith - enabled with -pedantic, but good to have even if not + # -Woverloaded-virtual - ??? + # -Werror=return-type - catches missing returns, zero false positives + # -Wtype-limits - catches overflow bugs, few false positives + # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives + # + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wall -Wpointer-arith -Woverloaded-virtual" + MOZ_CXX_SUPPORTS_WARNING(-W, error=return-type, ac_cxx_has_werror_return_type) + MOZ_CXX_SUPPORTS_WARNING(-W, type-limits, ac_cxx_has_wtype_limits) + MOZ_CXX_SUPPORTS_WARNING(-W, empty-body, ac_cxx_has_wempty_body) + + # Turn off the following warnings that -Wall/-pedantic turn on: + # -Wno-overlength-strings - we exceed the minimum maximum length frequently + # -Wno-ctor-dtor-privacy - ??? + # -Wno-invalid-offsetof - we use offsetof on non-POD types frequently + # -Wno-variadic-macros - ??? + # + _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-overlength-strings -Wno-ctor-dtor-privacy" + MOZ_CXX_SUPPORTS_WARNING(-Wno-, invalid-offsetof, ac_cxx_has_wno_invalid_offsetof) + MOZ_CXX_SUPPORTS_WARNING(-Wno-, variadic-macros, ac_cxx_has_wno_variadic_macros) + if test -z "$INTEL_CXX" -a -z "$CLANG_CXX"; then # Don't use -Wcast-align with ICC or clang case "$CPU_ARCH" in # And don't use it on hppa, ia64, sparc, arm, since it's noisy there hppa | ia64 | sparc | arm) ;; *) _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wcast-align" @@ -1695,91 +1726,17 @@ if test "$GNU_CXX"; then # Recent clang and gcc support C++11 deleted functions without warnings if # compiling with -std=c++0x or -std=gnu++0x (or c++11 or gnu++11 in very new # versions). We can't use -std=c++0x yet, so gcc's support must remain # unused. But clang's warning can be disabled, so when compiling with clang # we use it to opt out of the warning, enabling (macro-encapsulated) use of # deleted function syntax. if test "$CLANG_CXX"; then _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-c++0x-extensions" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-extended-offsetof, - ac_has_wno_extended_offsetof, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-extended-offsetof" - AC_TRY_COMPILE([$configure_static_assert_macros - #ifndef __has_warning - #define __has_warning(x) 0 - #endif], - [CONFIGURE_STATIC_ASSERT(__has_warning("-Wextended-offsetof"))], - ac_has_wno_extended_offsetof="yes", - ac_has_wno_extended_offsetof="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_extended_offsetof" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-extended-offsetof" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-invalid-offsetof, - ac_has_wno_invalid_offsetof, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-invalid-offsetof" - AC_TRY_COMPILE([], - [return(0);], - ac_has_wno_invalid_offsetof="yes", - ac_has_wno_invalid_offsetof="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_invalid_offsetof" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-invalid-offsetof" - fi - - AC_CACHE_CHECK(whether the compiler supports -Wno-variadic-macros, - ac_has_wno_variadic_macros, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Wno-variadic-macros" - AC_TRY_COMPILE([], - [return(0);], - ac_has_wno_variadic_macros="yes", - ac_has_wno_variadic_macros="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_wno_variadic_macros" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Wno-variadic-macros" - fi - - AC_CACHE_CHECK(whether the compiler supports -Werror=return-type, - ac_has_werror_return_type, - [ - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - _SAVE_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -Werror=return-type" - AC_TRY_COMPILE([], - [return(0);], - ac_has_werror_return_type="yes", - ac_has_werror_return_type="no") - CXXFLAGS="$_SAVE_CXXFLAGS" - AC_LANG_RESTORE - ]) - if test "$ac_has_werror_return_type" = "yes"; then - _WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -Werror=return-type" + MOZ_CXX_SUPPORTS_WARNING(-Wno-, extended-offsetof, ac_cxx_has_wno_extended_offsetof) fi else _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_JS_CONFDEFS_H_ $(ACDEFINES)' fi dnl gcc can come with its own linker so it is better to use the pass-thru calls dnl MKSHLIB_FORCE_ALL is used to force the linker to include all object
--- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -399,20 +399,33 @@ DoGetElement(JSContext *cx, JSObject *ob *hole = !present; if (*hole) vp->setUndefined(); return true; } template<typename IndexType> +static void +AssertGreaterThanZero(IndexType index) +{ + JS_ASSERT(index >= 0); +} + +template<> +void +AssertGreaterThanZero(uint32_t index) +{ +} + +template<typename IndexType> static JSBool GetElement(JSContext *cx, JSObject *obj, IndexType index, JSBool *hole, Value *vp) { - JS_ASSERT(index >= 0); + AssertGreaterThanZero(index); if (obj->isDenseArray() && index < obj->getDenseArrayInitializedLength() && !(*vp = obj->getDenseArrayElement(uint32_t(index))).isMagic(JS_ARRAY_HOLE)) { *hole = JS_FALSE; return JS_TRUE; } if (obj->isArguments()) { if (obj->asArguments().getElement(uint32_t(index), vp)) { *hole = JS_FALSE;
--- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -1413,17 +1413,17 @@ JSCompartment::setGCLastBytes(size_t las gcTriggerBytes = ComputeTriggerBytes(lastBytes, rt->gcMaxBytes, gckind); gcTriggerMallocAndFreeBytes = ComputeTriggerBytes(lastMallocBytes, SIZE_MAX, gckind); } void JSCompartment::reduceGCTriggerBytes(size_t amount) { JS_ASSERT(amount > 0); - JS_ASSERT(gcTriggerBytes - amount >= 0); + JS_ASSERT(gcTriggerBytes >= amount); if (gcTriggerBytes - amount < GC_ALLOCATION_THRESHOLD * GC_HEAP_GROWTH_FACTOR) return; gcTriggerBytes -= amount; } namespace js { namespace gc {
--- a/js/src/jstypedarray.cpp +++ b/js/src/jstypedarray.cpp @@ -1770,19 +1770,17 @@ class TypedArrayTemplate static void copyIndexToValue(JSContext *cx, JSObject *tarray, uint32_t index, Value *vp); static JSObject * createSubarray(JSContext *cx, JSObject *tarray, uint32_t begin, uint32_t end) { JS_ASSERT(tarray); - JS_ASSERT(0 <= begin); JS_ASSERT(begin <= getLength(tarray)); - JS_ASSERT(0 <= end); JS_ASSERT(end <= getLength(tarray)); JSObject *bufobj = getBuffer(tarray); JS_ASSERT(bufobj); JS_ASSERT(begin <= end); uint32_t length = end - begin;
--- a/layout/generic/nsHTMLReflowMetrics.h +++ b/layout/generic/nsHTMLReflowMetrics.h @@ -66,21 +66,21 @@ enum nsOverflowType { eVisualOverflow, e for (nsOverflowType var_ = nsOverflowType(0); var_ < 2; \ var_ = nsOverflowType(var_ + 1)) struct nsOverflowAreas { private: nsRect mRects[2]; public: nsRect& Overflow(size_t aIndex) { - NS_ASSERTION(0 <= aIndex && aIndex < 2, "index out of range"); + NS_ASSERTION(aIndex < 2, "index out of range"); return mRects[aIndex]; } const nsRect& Overflow(size_t aIndex) const { - NS_ASSERTION(0 <= aIndex && aIndex < 2, "index out of range"); + NS_ASSERTION(aIndex < 2, "index out of range"); return mRects[aIndex]; } nsRect& VisualOverflow() { return mRects[eVisualOverflow]; } const nsRect& VisualOverflow() const { return mRects[eVisualOverflow]; } nsRect& ScrollableOverflow() { return mRects[eScrollableOverflow]; } const nsRect& ScrollableOverflow() const { return mRects[eScrollableOverflow]; }
--- a/layout/svg/base/src/nsSVGOuterSVGFrame.h +++ b/layout/svg/base/src/nsSVGOuterSVGFrame.h @@ -171,17 +171,17 @@ protected: // A hash-set containing our nsSVGForeignObjectFrame descendants. Note we use // a hash-set to avoid the O(N^2) behavior we'd get tearing down an SVG frame // subtree if we were to use a list (see bug 381285 comment 20). nsTHashtable<nsVoidPtrHashKey> mForeignObjectHash; nsAutoPtr<gfxMatrix> mCanvasTM; - PRUint32 mRedrawSuspendCount; + PRInt32 mRedrawSuspendCount; float mFullZoom; bool mViewportInitialized; #ifdef XP_MACOSX bool mEnableBitmapFallback; #endif bool mIsRootContent; };
--- a/other-licenses/android/linker.c +++ b/other-licenses/android/linker.c @@ -1920,16 +1920,17 @@ static unsigned int plt_reloc(soinfo *si return *(unsigned int *)(si->base + si->plt_rel[num].r_offset); } #ifdef ANDROID_SH_LINKER if (si->plt_rela) { reloc_library_a(si, &si->plt_rela[num], 1); return *(unsigned int *)(si->base + si->plt_rela[num].r_offset); } #endif + return 0; // NOT REACHED } /* As this function is only referenced from assembly, we need to tell the * compiler not to throw it away */ static unsigned int plt_reloc(soinfo *si, unsigned int num) __attribute__((used)); #ifdef ANDROID_ARM_LINKER /* On ARM, the runtime symbol resolution function is called with