Bug 1353941: Convert a MOZ_RELEASE_ASSERT() expression to "if" + MOZ_CRASH(), to work around clang 3.8 segfault. r=froydnj draft
authorDaniel Holbert <dholbert@cs.stanford.edu>
Wed, 05 Apr 2017 18:24:56 -0700
changeset 556555 2d546cbabd71f17ac0d9d8b3a98271d57ffc428c
parent 556554 6ccd3fd0f5e644e018d73f37c1bffc68a0cb7d2f
child 622917 32a3722ca438a5fe015b00c70c8f1b2566db1702
push id52578
push userdholbert@mozilla.com
push dateThu, 06 Apr 2017 01:25:10 +0000
reviewersfroydnj
bugs1353941
milestone55.0a1
Bug 1353941: Convert a MOZ_RELEASE_ASSERT() expression to "if" + MOZ_CRASH(), to work around clang 3.8 segfault. r=froydnj MozReview-Commit-ID: Bq2DM61YvQ3
xpcom/ds/nsExpirationTracker.h
--- a/xpcom/ds/nsExpirationTracker.h
+++ b/xpcom/ds/nsExpirationTracker.h
@@ -112,19 +112,24 @@ public:
     , mName(aName)
     , mEventTarget(aEventTarget)
   {
     static_assert(K >= 2 && K <= nsExpirationState::NOT_TRACKED,
                   "Unsupported number of generations (must be 2 <= K <= 15)");
     MOZ_ASSERT(NS_IsMainThread());
     if (mEventTarget) {
       bool current = false;
-      MOZ_RELEASE_ASSERT(
-        NS_SUCCEEDED(mEventTarget->IsOnCurrentThread(&current)) && current,
-        "Provided event target must be on the main thread");
+      // NOTE: The following check+crash could be condensed into a
+      // MOZ_RELEASE_ASSERT, but that triggers a segfault during compilation in
+      // clang 3.8. Once we don't have to care about clang 3.8 anymore, though,
+      // we can convert to MOZ_RELEASE_ASSERT here.
+      if (MOZ_UNLIKELY(NS_FAILED(mEventTarget->IsOnCurrentThread(&current)) ||
+                       !current)) {
+        MOZ_CRASH("Provided event target must be on the main thread");
+      }
     }
     mObserver = new ExpirationTrackerObserver();
     mObserver->Init(this);
   }
 
   virtual ~ExpirationTrackerImpl()
   {
     MOZ_ASSERT(NS_IsMainThread());