Bug 1277448 patch 5 - Add file to crash annotations for MOZ_CRASH and MOZ_RELEASE_ASSERT. r?Waldo draft
authorL. David Baron <dbaron@dbaron.org>
Tue, 21 Jun 2016 18:10:53 -0700
changeset 380462 bf62498839e6228e47cd329da05f23763965d963
parent 380461 71ff681d258edaf6feba2f8947f474195b21144c
child 380463 5084f0961bf82057676bef59d5f944cd317f1870
push id21228
push userdbaron@mozilla.com
push dateWed, 22 Jun 2016 01:11:03 +0000
reviewersWaldo
bugs1277448
milestone50.0a1
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
mfbt/Assertions.h
--- 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__), \