Bug 1277448 patch 5 - Add file to crash annotations for MOZ_CRASH and MOZ_RELEASE_ASSERT. r?Waldo
This doesn't add function name (like I did for NS_RUNTIMEABORT) because
__func__ is (per C++ 2011, [dcl.fct.def.general], clause 8) a variable
rather than a macro, and thus can't be portably used as part of the
concatenation of adjacent string literals.
MozReview-Commit-ID: HoOq3aDSZlo
--- a/mfbt/Assertions.h
+++ b/mfbt/Assertions.h
@@ -274,24 +274,24 @@ MOZ_ReportCrash(const char* aStr, const
* 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
# define MOZ_CRASH(...) \
do { \
- MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ ")"); \
+ MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ "), file " __FILE__); \
MOZ_REALLY_CRASH(); \
} while (0)
#else
# define MOZ_CRASH(...) \
do { \
MOZ_ReportCrash("" __VA_ARGS__, __FILE__, __LINE__); \
- MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ ")"); \
+ MOZ_CRASH_ANNOTATE("MOZ_CRASH(" __VA_ARGS__ "), file " __FILE__); \
MOZ_REALLY_CRASH(); \
} while (0)
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
@@ -376,27 +376,28 @@ 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_CRASH_ANNOTATE("MOZ_RELEASE_ASSERT(" #expr "), file " __FILE__); \
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_CRASH_ANNOTATE("MOZ_RELEASE_ASSERT(" #expr ") (" explain \
+ "), file " __FILE__); \
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__), \