author | Michael Layzell <michael@thelayzells.com> |
Thu, 08 Oct 2015 15:21:58 -0400 | |
changeset 266997 | 298e7602ddcdd546bea061ccb9afe2f57d641169 |
parent 266996 | bf388a8e620ba36cbb15fd3393d2c67838096531 |
child 266998 | 571d943ef5fffb60d6e6144e63a178adaf644576 |
push id | 29504 |
push user | cbook@mozilla.com |
push date | Fri, 09 Oct 2015 09:43:23 +0000 |
treeherder | mozilla-central@d01dd42e654b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | froydnj |
bugs | 1211979 |
milestone | 44.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
|
mfbt/Assertions.h | file | annotate | diff | comparison | revisions |
--- a/mfbt/Assertions.h +++ b/mfbt/Assertions.h @@ -18,26 +18,29 @@ #include "mozilla/Likely.h" #include "mozilla/MacroArgs.h" #ifdef MOZ_DUMP_ASSERTION_STACK #include "nsTraceRefcnt.h" #endif #if defined(MOZ_CRASHREPORTER) && defined(MOZILLA_INTERNAL_API) && \ !defined(MOZILLA_EXTERNAL_LINKAGE) && defined(__cplusplus) -# define MOZ_CRASH_CRASHREPORT namespace CrashReporter { // This declaration is present here as well as in nsExceptionHandler.h // nsExceptionHandler.h is not directly included in this file as it includes // windows.h, which can cause problems when it is imported into some files due // to the number of macros defined. // XXX If you change this definition - also change the definition in // nsExceptionHandler.h void AnnotateMozCrashReason(const char* aReason); } // namespace CrashReporter + +# define MOZ_CRASH_ANNOTATE(...) CrashReporter::AnnotateMozCrashReason("" __VA_ARGS__) +#else +# define MOZ_CRASH_ANNOTATE(...) do { /* nothing */ } while (0) #endif #include <stddef.h> #include <stdio.h> #include <stdlib.h> #ifdef WIN32 /* * TerminateProcess and GetCurrentProcess are defined in <winbase.h>, which @@ -258,29 +261,26 @@ MOZ_ReportCrash(const char* aStr, const * * If we're a DEBUG build and we crash at a MOZ_CRASH which provides an * explanation-string, we print the string to stderr. Otherwise, we don't * print anything; this is because we want MOZ_CRASH to be 100% safe in release * builds, and it's hard to print to stderr safely when memory might have been * corrupted. */ #ifndef DEBUG -# ifdef MOZ_CRASH_CRASHREPORT -# define MOZ_CRASH(...) \ - do { \ - CrashReporter::AnnotateMozCrashReason("MOZ_CRASH(" __VA_ARGS__ ")"); \ - MOZ_REALLY_CRASH(); \ - } while (0) -# else -# define MOZ_CRASH(...) MOZ_REALLY_CRASH() -# endif +# define MOZ_CRASH(...) \ + do { \ + MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ ")"); \ + MOZ_REALLY_CRASH(); \ + } while (0) #else # define MOZ_CRASH(...) \ do { \ MOZ_ReportCrash("" __VA_ARGS__, __FILE__, __LINE__); \ + MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ ")"); \ MOZ_REALLY_CRASH(); \ } while (0) #endif #ifdef __cplusplus } /* extern "C" */ #endif @@ -377,25 +377,27 @@ struct AssertionConditionType #endif /* First the single-argument form. */ #define MOZ_ASSERT_HELPER1(expr) \ do { \ MOZ_VALIDATE_ASSERT_CONDITION_TYPE(expr); \ if (MOZ_UNLIKELY(!(expr))) { \ MOZ_ReportAssertionFailure(#expr, __FILE__, __LINE__); \ + MOZ_CRASH_ANNOTATE("MOZ_RELEASE_ASSERT(" #expr ")"); \ MOZ_REALLY_CRASH(); \ } \ } while (0) /* Now the two-argument form. */ #define MOZ_ASSERT_HELPER2(expr, explain) \ do { \ MOZ_VALIDATE_ASSERT_CONDITION_TYPE(expr); \ if (MOZ_UNLIKELY(!(expr))) { \ MOZ_ReportAssertionFailure(#expr " (" explain ")", __FILE__, __LINE__); \ + MOZ_CRASH_ANNOTATE("MOZ_RELEASE_ASSERT(" #expr ") (" explain ")"); \ MOZ_REALLY_CRASH(); \ } \ } while (0) #define MOZ_RELEASE_ASSERT_GLUE(a, b) a b #define MOZ_RELEASE_ASSERT(...) \ MOZ_RELEASE_ASSERT_GLUE( \ MOZ_PASTE_PREFIX_AND_ARG_COUNT(MOZ_ASSERT_HELPER, __VA_ARGS__), \