Bug 820686 - Remove code after MOZ_CRASH or MOZ_ASSUME_NOT_REACHED. r=(see below)
authorJustin Lebar <justin.lebar@gmail.com>
Fri, 28 Jun 2013 18:38:32 -0700
changeset 137219 5ecd26bc5274bb4e2831e6649fa8bb516f3c9bc2
parent 137218 1735d098ea863982696383cd25fbb6857e0d2f6f
child 137228 4df4f2767a69330a1d221abb71e9d0b993b6a973
push id270
push userpvanderbeken@mozilla.com
push dateThu, 06 Mar 2014 09:24:21 +0000
bugs820686
milestone25.0a1
Bug 820686 - Remove code after MOZ_CRASH or MOZ_ASSUME_NOT_REACHED. r=(see below) r=tbsaunde for accessible r=jmuizelaar for gfx r=waldo for js r=roc for layout r=glandium for mozglue r=jduell for netwerk r=khuey for everything else
accessible/src/atk/AccessibleWrap.cpp
caps/src/nsPrincipal.cpp
content/base/src/nsAttrValue.cpp
content/base/src/nsDocument.cpp
content/base/src/nsObjectLoadingContent.cpp
content/canvas/src/CanvasRenderingContext2D.cpp
content/canvas/src/WebGLContextGL.cpp
content/events/src/TextComposition.cpp
content/events/src/nsDOMMouseEvent.cpp
content/events/src/nsEventStateManager.cpp
content/events/src/nsIMEStateManager.cpp
content/html/document/src/nsHTMLContentSink.cpp
content/media/DOMMediaStream.cpp
content/media/MediaStreamGraph.cpp
content/media/encoder/MediaEncoder.cpp
content/media/encoder/OpusTrackEncoder.cpp
content/media/webaudio/MediaBufferDecoder.cpp
content/media/webspeech/recognition/SpeechRecognition.cpp
content/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp
dom/audiochannel/AudioChannelService.cpp
dom/base/nsDOMClassInfo.cpp
dom/base/nsScreen.cpp
dom/bindings/PrimitiveConversions.h
dom/bluetooth/ipc/BluetoothChild.cpp
dom/bluetooth/ipc/BluetoothParent.cpp
dom/bluetooth/ipc/BluetoothServiceChildProcess.cpp
dom/fm/FMRadio.cpp
dom/indexedDB/IDBDatabase.cpp
dom/indexedDB/OpenDatabaseHelper.cpp
dom/indexedDB/ipc/IndexedDBChild.cpp
dom/indexedDB/ipc/IndexedDBParent.cpp
dom/ipc/Blob.cpp
dom/ipc/ContentChild.cpp
dom/ipc/ContentParent.cpp
dom/ipc/StructuredCloneUtils.cpp
dom/mobilemessage/src/MmsMessage.cpp
dom/mobilemessage/src/MobileMessageCallback.cpp
dom/mobilemessage/src/MobileMessageCursorCallback.cpp
dom/mobilemessage/src/MobileMessageThread.cpp
dom/mobilemessage/src/SmsMessage.cpp
dom/mobilemessage/src/ipc/SmsChild.cpp
dom/mobilemessage/src/ipc/SmsParent.cpp
dom/network/src/TCPSocketParent.cpp
dom/power/PowerManagerService.cpp
dom/workers/XMLHttpRequest.cpp
extensions/cookie/nsPermissionManager.cpp
gfx/gl/GLContext.cpp
gfx/gl/GLContextProviderGLX.cpp
gfx/gl/GLScreenBuffer.cpp
gfx/gl/SharedSurface.h
gfx/gl/SharedSurfaceGL.cpp
gfx/gl/SurfaceStream.cpp
gfx/layers/Layers.h
gfx/layers/client/CompositableClient.h
gfx/layers/client/ContentClient.h
gfx/layers/composite/CompositableHost.cpp
gfx/layers/composite/TextureHost.cpp
gfx/layers/d3d10/CanvasLayerD3D10.cpp
gfx/layers/opengl/CanvasLayerOGL.cpp
gfx/layers/opengl/GLManager.cpp
gfx/layers/opengl/TextureHostOGL.cpp
gfx/thebes/gfxRect.h
hal/gonk/GonkDiskSpaceWatcher.cpp
hal/linux/LinuxPower.cpp
ipc/glue/FileDescriptor.cpp
ipc/glue/URIUtils.cpp
ipc/ril/Ril.cpp
js/public/RootingAPI.h
js/src/assembler/jit/ExecutableAllocator.h
js/src/builtin/Intl.cpp
js/src/builtin/TestingFunctions.cpp
js/src/ctypes/CTypes.cpp
js/src/frontend/BytecodeEmitter.cpp
js/src/frontend/ParseNode.cpp
js/src/frontend/Parser.cpp
js/src/gc/Statistics.cpp
js/src/gc/StoreBuffer.cpp
js/src/ion/AsmJS.cpp
js/src/ion/BaselineFrameInfo.cpp
js/src/ion/BaselineIC.cpp
js/src/ion/BaselineIC.h
js/src/ion/BaselineJIT.cpp
js/src/ion/CodeGenerator.cpp
js/src/ion/CompactBuffer.h
js/src/ion/ExecutionModeInlines.h
js/src/ion/FixedArityList.h
js/src/ion/Ion.cpp
js/src/ion/IonAnalysis.cpp
js/src/ion/IonBuilder.cpp
js/src/ion/IonCaches.cpp
js/src/ion/IonCaches.h
js/src/ion/IonFrames-inl.h
js/src/ion/IonFrames.cpp
js/src/ion/IonFrames.h
js/src/ion/IonMacroAssembler.cpp
js/src/ion/IonMacroAssembler.h
js/src/ion/IonTypes.h
js/src/ion/LIR-Common.h
js/src/ion/LIR.cpp
js/src/ion/LIR.h
js/src/ion/LiveRangeAllocator.cpp
js/src/ion/LiveRangeAllocator.h
js/src/ion/Lowering.cpp
js/src/ion/MIR.cpp
js/src/ion/MIR.h
js/src/ion/MOpcodes.h
js/src/ion/Snapshots.cpp
js/src/ion/StupidAllocator.cpp
js/src/ion/TypePolicy.cpp
js/src/ion/arm/Assembler-arm.cpp
js/src/ion/arm/BaselineIC-arm.cpp
js/src/ion/arm/CodeGenerator-arm.cpp
js/src/ion/arm/Lowering-arm.cpp
js/src/ion/arm/MacroAssembler-arm.cpp
js/src/ion/arm/Trampoline-arm.cpp
js/src/ion/shared/Assembler-shared.h
js/src/ion/shared/Assembler-x86-shared.cpp
js/src/ion/shared/Assembler-x86-shared.h
js/src/ion/shared/CodeGenerator-shared-inl.h
js/src/ion/shared/CodeGenerator-x86-shared.cpp
js/src/ion/shared/IonAssemblerBuffer.h
js/src/ion/shared/IonAssemblerBufferWithConstantPools.h
js/src/ion/x64/BaselineIC-x64.cpp
js/src/ion/x64/CodeGenerator-x64.cpp
js/src/ion/x64/Lowering-x64.cpp
js/src/ion/x64/MacroAssembler-x64.h
js/src/ion/x64/Trampoline-x64.cpp
js/src/ion/x86/BaselineIC-x86.cpp
js/src/ion/x86/MacroAssembler-x86.h
js/src/ion/x86/Trampoline-x86.cpp
js/src/jsanalyze.cpp
js/src/jsanalyze.h
js/src/jsanalyzeinlines.h
js/src/jsclone.cpp
js/src/jscntxtinlines.h
js/src/jsfun.cpp
js/src/jsgc.cpp
js/src/jsgcinlines.h
js/src/jsinfer.cpp
js/src/jsinferinlines.h
js/src/jsobjinlines.h
js/src/jsopcode.cpp
js/src/jsopcode.h
js/src/jsproxy.cpp
js/src/jsreflect.cpp
js/src/jsscript.cpp
js/src/jstypedarray.cpp
js/src/jstypedarray.h
js/src/jstypedarrayinlines.h
js/src/jsversion.h
js/src/jsworkers.cpp
js/src/shell/jsoptparse.cpp
js/src/vm/ForkJoin.cpp
js/src/vm/ObjectImpl.cpp
js/src/vm/ObjectImpl.h
js/src/vm/RegExpObject.cpp
js/src/vm/Stack-inl.h
js/src/vm/Stack.cpp
js/xpconnect/src/XPCJSRuntime.cpp
js/xpconnect/wrappers/WrapperFactory.cpp
js/xpconnect/wrappers/XrayWrapper.cpp
layout/base/nsCSSFrameConstructor.cpp
layout/generic/nsFlexContainerFrame.cpp
modules/libjar/nsJARProtocolHandler.cpp
modules/libpref/src/prefapi.cpp
netwerk/ipc/RemoteOpenFileChild.cpp
security/manager/ssl/src/ScopedNSSTypes.h
security/manager/ssl/src/nsUsageArrayHelper.cpp
toolkit/components/telemetry/Telemetry.cpp
toolkit/identity/IdentityCryptoService.cpp
widget/gonk/nsWindow.cpp
widget/gtk2/nsGtkKeyUtils.cpp
widget/os2/nsWindow.cpp
widget/windows/KeyboardLayout.cpp
widget/windows/nsTextStore.cpp
widget/xpwidgets/WidgetUtils.cpp
xpcom/ds/nsAtomTable.cpp
xpcom/glue/nsISupportsImpl.h
xpcom/glue/nsTArray.h
--- a/accessible/src/atk/AccessibleWrap.cpp
+++ b/accessible/src/atk/AccessibleWrap.cpp
@@ -676,17 +676,16 @@ getRoleCB(AtkObject *aAtkObj)
   case roles::geckoRole: \
     aAtkObj->role = atkRole; \
     break;
 
   switch (accWrap->Role()) {
 #include "RoleMap.h"
     default:
       MOZ_CRASH("Unknown role.");
-      aAtkObj->role = ATK_ROLE_UNKNOWN;
   };
 
 #undef ROLE
 
   return aAtkObj->role;
 }
 
 AtkAttributeSet*
--- a/caps/src/nsPrincipal.cpp
+++ b/caps/src/nsPrincipal.cpp
@@ -836,17 +836,16 @@ nsExpandedPrincipal::CheckMayLoad(nsIURI
 
   return NS_ERROR_DOM_BAD_URI;
 }
 
 NS_IMETHODIMP
 nsExpandedPrincipal::GetHashValue(uint32_t* result)
 {
   MOZ_CRASH("extended principal should never be used as key in a hash map");
-  return NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 nsExpandedPrincipal::GetURI(nsIURI** aURI)
 {
   *aURI = nullptr;
   return NS_OK;
 }
--- a/content/base/src/nsAttrValue.cpp
+++ b/content/base/src/nsAttrValue.cpp
@@ -304,17 +304,16 @@ nsAttrValue::SetTo(const nsAttrValue& aO
     case eColor:
     {
       cont->mValue.mColor = otherCont->mValue.mColor;
       break;
     }
     case eCSSStyleRule:
     {
       MOZ_CRASH("These should be refcounted!");
-      break;
     }
     case eURL:
     {
       NS_ADDREF(cont->mValue.mURL = otherCont->mValue.mURL);
       break;
     }
     case eImage:
     {
--- a/content/base/src/nsDocument.cpp
+++ b/content/base/src/nsDocument.cpp
@@ -8469,17 +8469,16 @@ nsDocument::MaybePreLoadImage(nsIURI* ur
     break;
   case CORS_ANONYMOUS:
     loadFlags |= imgILoader::LOAD_CORS_ANONYMOUS;
     break;
   case CORS_USE_CREDENTIALS:
     loadFlags |= imgILoader::LOAD_CORS_USE_CREDENTIALS;
     break;
   default:
-    /* should never happen */
     MOZ_CRASH("Unknown CORS mode!");
   }
 
   // Image not in cache - trigger preload
   nsRefPtr<imgRequestProxy> request;
   nsresult rv =
     nsContentUtils::LoadImage(uri,
                               this,
@@ -11143,18 +11142,17 @@ SizeOfStyleSheetsElementIncludingThis(ns
 
 size_t
 nsDocument::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
 {
   // This SizeOfExcludingThis() overrides the one from nsINode.  But
   // nsDocuments can only appear at the top of the DOM tree, and we use the
   // specialized DocSizeOfExcludingThis() in that case.  So this should never
   // be called.
-  MOZ_CRASH("nsDocument::SizeOfExcludingThis");
-  return 0;
+  MOZ_CRASH();
 }
 
 void
 nsDocument::DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
 {
   nsIDocument::DocSizeOfExcludingThis(aWindowSizes);
 
   for (nsIContent* node = nsINode::GetFirstChild();
--- a/content/base/src/nsObjectLoadingContent.cpp
+++ b/content/base/src/nsObjectLoadingContent.cpp
@@ -2989,17 +2989,16 @@ nsObjectLoadingContent::ShouldPlay(Fallb
 
   switch (enabledState) {
   case nsIPluginTag::STATE_ENABLED:
     return true;
   case nsIPluginTag::STATE_CLICKTOPLAY:
     return false;
   }
   MOZ_CRASH("Unexpected enabledState");
-  return false;
 }
 
 nsIDocument*
 nsObjectLoadingContent::GetContentDocument()
 {
   nsCOMPtr<nsIContent> thisContent =
     do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
 
--- a/content/canvas/src/CanvasRenderingContext2D.cpp
+++ b/content/canvas/src/CanvasRenderingContext2D.cpp
@@ -2633,17 +2633,17 @@ CanvasRenderingContext2D::DrawOrMeasureT
     // fall through; best we can do with the information available
   case TEXT_BASELINE_ALPHABETIC:
     anchorY = 0;
     break;
   case TEXT_BASELINE_BOTTOM:
     anchorY = -fontMetrics.emDescent;
     break;
   default:
-      MOZ_CRASH("unexpected TextBaseline");
+    MOZ_CRASH("unexpected TextBaseline");
   }
 
   processor.mPt.y += anchorY;
 
   // correct bounding box to get it to be the correct size/position
   processor.mBoundingBox.width = totalWidth;
   processor.mBoundingBox.MoveBy(processor.mPt);
 
--- a/content/canvas/src/WebGLContextGL.cpp
+++ b/content/canvas/src/WebGLContextGL.cpp
@@ -5505,26 +5505,23 @@ WebGLTexelFormat mozilla::GetWebGLTexelF
     if (format == LOCAL_GL_DEPTH_COMPONENT) {
         switch (type) {
             case LOCAL_GL_UNSIGNED_SHORT:
                 return WebGLTexelConversions::D16;
             case LOCAL_GL_UNSIGNED_INT:
                 return WebGLTexelConversions::D32;
             default:
                 MOZ_CRASH("Invalid WebGL texture format/type?");
-                return WebGLTexelConversions::BadFormat;
         }
     } else if (format == LOCAL_GL_DEPTH_STENCIL) {
         switch (type) {
             case LOCAL_GL_UNSIGNED_INT_24_8_EXT:
                 return WebGLTexelConversions::D24S8;
             default:
                 MOZ_CRASH("Invalid WebGL texture format/type?");
-                NS_ABORT_IF_FALSE(false, "Coding mistake?! Should never reach this point.");
-                return WebGLTexelConversions::BadFormat;
         }
     }
 
 
     if (type == LOCAL_GL_UNSIGNED_BYTE) {
         switch (format) {
             case LOCAL_GL_RGBA:
                 return WebGLTexelConversions::RGBA8;
--- a/content/events/src/TextComposition.cpp
+++ b/content/events/src/TextComposition.cpp
@@ -136,17 +136,16 @@ TextComposition::CompositionEventDispatc
       nsTextEvent textEvent(true, NS_TEXT_TEXT, mWidget);
       textEvent.theText = mData;
       nsIMEStateManager::DispatchCompositionEvent(mEventTarget, mPresContext,
                                                   &textEvent, &status, nullptr);
       break;
     }
     default:
       MOZ_CRASH("Unsupported event");
-      break;
   }
   return NS_OK;
 }
 
 /******************************************************************************
  * TextCompositionArray
  ******************************************************************************/
 
--- a/content/events/src/nsDOMMouseEvent.cpp
+++ b/content/events/src/nsDOMMouseEvent.cpp
@@ -137,17 +137,16 @@ nsDOMMouseEvent::InitMouseEvent(const ns
     case NS_MOUSE_SCROLL_EVENT:
     case NS_WHEEL_EVENT:
     case NS_DRAG_EVENT:
     case NS_SIMPLE_GESTURE_EVENT:
       static_cast<nsInputEvent*>(mEvent)->modifiers = modifiers;
       return NS_OK;
     default:
       MOZ_CRASH("There is no space to store the modifiers");
-      return NS_ERROR_FAILURE;
   }
 }
 
 already_AddRefed<nsDOMMouseEvent>
 nsDOMMouseEvent::Constructor(const mozilla::dom::GlobalObject& aGlobal,
                              const nsAString& aType,
                              const mozilla::dom::MouseEventInit& aParam,
                              mozilla::ErrorResult& aRv)
@@ -238,17 +237,16 @@ nsDOMMouseEvent::Buttons()
     case NS_MOUSE_EVENT:
     case NS_MOUSE_SCROLL_EVENT:
     case NS_WHEEL_EVENT:
     case NS_DRAG_EVENT:
     case NS_SIMPLE_GESTURE_EVENT:
       return static_cast<nsMouseEvent_base*>(mEvent)->buttons;
     default:
       MOZ_CRASH("Tried to get mouse buttons for non-mouse event!");
-      return 0;
   }
 }
 
 NS_IMETHODIMP
 nsDOMMouseEvent::GetRelatedTarget(nsIDOMEventTarget** aRelatedTarget)
 {
   NS_ENSURE_ARG_POINTER(aRelatedTarget);
   *aRelatedTarget = GetRelatedTarget().get();
--- a/content/events/src/nsEventStateManager.cpp
+++ b/content/events/src/nsEventStateManager.cpp
@@ -1491,17 +1491,16 @@ nsEventStateManager::DispatchCrossProces
     // Let the child process synthesize a mouse event if needed, and
     // ensure we don't synthesize one in this process.
     *aStatus = nsEventStatus_eConsumeNoDefault;
     nsTouchEvent* touchEvent = static_cast<nsTouchEvent*>(aEvent);
     return remote->SendRealTouchEvent(*touchEvent);
   }
   default: {
     MOZ_CRASH("Attempt to send non-whitelisted event?");
-    return false;
   }
   }
 }
 
 bool
 nsEventStateManager::IsRemoteTarget(nsIContent* target) {
   if (!target) {
     return false;
@@ -2516,17 +2515,16 @@ nsEventStateManager::DispatchLegacyMouse
       scrollDeltaX = aEvent->lineOrPageDeltaX;
       scrollDeltaY = aEvent->lineOrPageDeltaY;
       pixelDeltaX = RoundDown(aEvent->deltaX);
       pixelDeltaY = RoundDown(aEvent->deltaY);
       break;
 
     default:
       MOZ_CRASH("Invalid deltaMode value comes");
-      return;
   }
 
   // Send the legacy events in following order:
   // 1. Vertical scroll
   // 2. Vertical pixel scroll (even if #1 isn't consumed)
   // 3. Horizontal scroll (even if #1 and/or #2 are consumed)
   // 4. Horizontal pixel scroll (even if #3 isn't consumed)
 
@@ -2843,17 +2841,16 @@ nsEventStateManager::DoScrollText(nsIScr
     case nsIDOMWheelEvent::DOM_DELTA_PAGE:
       origin = nsGkAtoms::pages;
       break;
     case nsIDOMWheelEvent::DOM_DELTA_PIXEL:
       origin = nsGkAtoms::pixels;
       break;
     default:
       MOZ_CRASH("Invalid deltaMode value comes");
-      return;
   }
 
   // We shouldn't scroll more one page at once except when over one page scroll
   // is allowed for the event.
   nsSize pageSize = aScrollableFrame->GetPageScrollAmount();
   nsIntSize devPixelPageSize(pc->AppUnitsToDevPixels(pageSize.width),
                              pc->AppUnitsToDevPixels(pageSize.height));
   if (!WheelPrefs::GetInstance()->IsOverOnePageScrollAllowedX(aEvent) &&
@@ -2888,17 +2885,16 @@ nsEventStateManager::DoScrollText(nsIScr
     case widget::WheelEvent::SCROLL_ASYNCHRONOUSELY:
       mode = nsIScrollableFrame::NORMAL;
       break;
     case widget::WheelEvent::SCROLL_SMOOTHLY:
       mode = nsIScrollableFrame::SMOOTH;
       break;
     default:
       MOZ_CRASH("Invalid scrollType value comes");
-      return;
   }
 
   nsIntPoint overflow;
   aScrollableFrame->ScrollBy(actualDevPixelScrollAmount,
                              nsIScrollableFrame::DEVICE_PIXELS,
                              mode, &overflow, origin);
 
   if (!scrollFrameWeak.IsAlive()) {
--- a/content/events/src/nsIMEStateManager.cpp
+++ b/content/events/src/nsIMEStateManager.cpp
@@ -583,17 +583,16 @@ nsIMEStateManager::NotifyIME(Notificatio
     switch (aNotification) {
       case NOTIFY_IME_OF_CURSOR_POS_CHANGED:
         return aWidget->NotifyIME(aNotification);
       case REQUEST_TO_COMMIT_COMPOSITION:
       case REQUEST_TO_CANCEL_COMPOSITION:
         return composition ? aWidget->NotifyIME(aNotification) : NS_OK;
       default:
         MOZ_CRASH("Unsupported notification");
-        return NS_ERROR_INVALID_ARG;
     }
     MOZ_CRASH(
       "Failed to handle the notification for non-synthesized composition");
   }
 
   // If the composition is synthesized events for automated tests, we should
   // dispatch composition events for emulating the native composition behavior.
   // NOTE: The dispatched events are discarded if it's not safe to run script.
@@ -1045,17 +1044,16 @@ nsIMEStateManager::IsEditableIMEState(ns
     case widget::IMEState::ENABLED:
     case widget::IMEState::PASSWORD:
       return true;
     case widget::IMEState::PLUGIN:
     case widget::IMEState::DISABLED:
       return false;
     default:
       MOZ_CRASH("Unknown IME enable state");
-      return false;
   }
 }
 
 void
 nsIMEStateManager::DestroyTextStateManager()
 {
   if (!sTextStateObserver) {
     return;
--- a/content/html/document/src/nsHTMLContentSink.cpp
+++ b/content/html/document/src/nsHTMLContentSink.cpp
@@ -658,31 +658,27 @@ SinkContext::OpenContainer(const nsIPars
   if (mSink->IsMonolithicContainer(nodeType)) {
     mSink->mInMonolithicContainer++;
   }
 
   // Special handling for certain tags
   switch (nodeType) {
     case eHTMLTag_form:
       MOZ_CRASH("Must not use HTMLContentSink for forms.");
-      break;
 
     case eHTMLTag_frameset:
       MOZ_CRASH("Must not use HTMLContentSink for frames.");
-      break;
 
     case eHTMLTag_noembed:
     case eHTMLTag_noframes:
       MOZ_CRASH("Must not use HTMLContentSink for noembed/noframes.");
-      break;
 
     case eHTMLTag_script:
     case eHTMLTag_style:
       MOZ_CRASH("Must not use HTMLContentSink for styles and scripts.");
-      break;
 
     case eHTMLTag_button:
     case eHTMLTag_audio:
     case eHTMLTag_video:
       content->DoneCreatingElement();
       break;
 
     default:
@@ -779,41 +775,35 @@ SinkContext::CloseContainer(const nsHTML
 
   DidAddContent(content);
 
   // Special handling for certain tags
   switch (nodeType) {
   case eHTMLTag_noembed:
   case eHTMLTag_noframes:
     MOZ_CRASH("Must not use HTMLContentSink for noembed/noframes.");
-    break;
 
   case eHTMLTag_form:
     MOZ_CRASH("Must not use HTMLContentSink for forms.");
-    break;
 
   case eHTMLTag_video:
   case eHTMLTag_audio:
   case eHTMLTag_select:
   case eHTMLTag_textarea:
   case eHTMLTag_object:
   case eHTMLTag_applet:
   case eHTMLTag_title:
     content->DoneAddingChildren(HaveNotifiedForCurrentContent());
     break;
 
   case eHTMLTag_script:
     MOZ_CRASH("Must not use HTMLContentSink to run scripts.");
-    result = NS_ERROR_NOT_IMPLEMENTED;
-    break;
 
   case eHTMLTag_style:
     MOZ_CRASH("Must not use HTMLContentSink for styles.");
-    result = NS_ERROR_NOT_IMPLEMENTED;
-    break;
 
   default:
     break;
   }
 
   NS_IF_RELEASE(content);
 
 #ifdef DEBUG
@@ -851,18 +841,16 @@ SinkContext::AddLeaf(const nsIParserNode
 
       // Add new leaf to its parent
       AddLeaf(content);
 
       // Additional processing needed once the element is in the tree
       switch (nodeType) {
       case eHTMLTag_meta:
         MOZ_CRASH("Must not use HTMLContentSink for metas.");
-        rv = NS_ERROR_NOT_IMPLEMENTED;
-        break;
 
       case eHTMLTag_input:
         content->DoneCreatingElement();
         break;
 
       case eHTMLTag_menuitem:
         content->DoneCreatingElement();
         break;
@@ -1747,18 +1735,17 @@ HTMLContentSink::IsEnabled(int32_t aTag,
 NS_IMETHODIMP
 HTMLContentSink::OpenContainer(const nsIParserNode& aNode)
 {
   nsresult rv = NS_OK;
 
   switch (aNode.GetNodeType()) {
     case eHTMLTag_frameset:
       MOZ_CRASH("Must not use HTMLContentSink for frames.");
-      rv = NS_ERROR_NOT_IMPLEMENTED;
-      break;
+
     case eHTMLTag_head:
       rv = OpenHeadContext();
       if (NS_SUCCEEDED(rv)) {
         rv = AddAttributes(aNode, mHead, true, mHaveSeenHead);
         mHaveSeenHead = true;
       }
       break;
     case eHTMLTag_body:
@@ -1772,49 +1759,46 @@ HTMLContentSink::OpenContainer(const nsI
         if (!mNotifiedRootInsertion) {
           NotifyRootInsertion();
         }
         ProcessOfflineManifest(mRoot);
       }
       break;
     case eHTMLTag_form:
       MOZ_CRASH("Must not use HTMLContentSink for forms.");
-      rv = NS_ERROR_NOT_IMPLEMENTED;
-      break;
+
     default:
       rv = mCurrentContext->OpenContainer(aNode);
       break;
   }
 
   return rv;
 }
 
 NS_IMETHODIMP
 HTMLContentSink::CloseContainer(const eHTMLTags aTag)
 {
   nsresult rv = NS_OK;
 
   switch (aTag) {
     case eHTMLTag_frameset:
       MOZ_CRASH("Must not use HTMLContentSink for frames.");
-      rv = NS_ERROR_NOT_IMPLEMENTED;
-      break;
+
     case eHTMLTag_head:
       CloseHeadContext();
       break;
     case eHTMLTag_body:
       rv = CloseBody();
       break;
     case eHTMLTag_html:
       rv = CloseHTML();
       break;
     case eHTMLTag_form:
       MOZ_CRASH("Must not use HTMLContentSink for forms.");
-      rv = NS_ERROR_NOT_IMPLEMENTED;
-      break;
+
     default:
       rv = mCurrentContext->CloseContainer(aTag);
       break;
   }
 
   return rv;
 }
 
@@ -1827,20 +1811,18 @@ HTMLContentSink::CloseMalformedContainer
 NS_IMETHODIMP
 HTMLContentSink::AddLeaf(const nsIParserNode& aNode)
 {
   nsresult rv;
 
   nsHTMLTag nodeType = nsHTMLTag(aNode.GetNodeType());
   switch (nodeType) {
   case eHTMLTag_link:
-    rv = NS_ERROR_NOT_IMPLEMENTED;
     MOZ_CRASH("Must not use HTMLContentSink for links.");
 
-    break;
   default:
     rv = mCurrentContext->AddLeaf(aNode);
 
     break;
   }
 
   return rv;
 }
--- a/content/media/DOMMediaStream.cpp
+++ b/content/media/DOMMediaStream.cpp
@@ -251,17 +251,16 @@ DOMMediaStream::CreateDOMTrack(TrackID a
     mTrackTypesAvailable |= HINT_CONTENTS_AUDIO;
     break;
   case MediaSegment::VIDEO:
     track = new VideoStreamTrack(this, aTrackID);
     mTrackTypesAvailable |= HINT_CONTENTS_VIDEO;
     break;
   default:
     MOZ_CRASH("Unhandled track type");
-    return nullptr;
   }
   mTracks.AppendElement(track);
 
   CheckTracksAvailable();
 
   return track;
 }
 
--- a/content/media/MediaStreamGraph.cpp
+++ b/content/media/MediaStreamGraph.cpp
@@ -1833,17 +1833,16 @@ MediaStream::ApplyTrackDisabling(TrackID
          !i.IsEnded(); i.Next()) {
       VideoChunk& chunk = *i;
       chunk.SetForceBlack(true);
     }
     break;
   }
   default:
     MOZ_CRASH("Unknown track type");
-    break;
   }
 }
 
 void
 SourceMediaStream::DestroyImpl()
 {
   {
     MutexAutoLock lock(mMutex);
--- a/content/media/encoder/MediaEncoder.cpp
+++ b/content/media/encoder/MediaEncoder.cpp
@@ -229,14 +229,13 @@ MediaEncoder::GetEncodedData(nsTArray<ns
     case ENCODE_DONE:
       LOG("MediaEncoder has been shutdown.");
       mShutdown = true;
       reloop = false;
       break;
 
     default:
       MOZ_CRASH("Invalid encode state");
-      break;
     }
   }
 }
 
 }
--- a/content/media/encoder/OpusTrackEncoder.cpp
+++ b/content/media/encoder/OpusTrackEncoder.cpp
@@ -216,17 +216,16 @@ OpusTrackEncoder::GetHeader(nsTArray<uin
     mEncoderState = DATA;
     break;
   }
   case DATA:
     // No more headers.
     break;
   default:
     MOZ_CRASH("Invalid state");
-    break;
   }
   return NS_OK;
 }
 
 nsresult
 OpusTrackEncoder::GetEncodedTrack(nsTArray<uint8_t>* aOutput,
                                   int &aOutputDuration)
 {
--- a/content/media/webaudio/MediaBufferDecoder.cpp
+++ b/content/media/webaudio/MediaBufferDecoder.cpp
@@ -435,17 +435,16 @@ MediaDecodeTask::RunNextPhase()
   switch (mPhase) {
   case PhaseEnum::AllocateBuffer:
     MOZ_ASSERT(!NS_IsMainThread());
     NS_DispatchToMainThread(this);
     break;
   case PhaseEnum::Decode:
   case PhaseEnum::Done:
     MOZ_CRASH("Invalid phase Decode");
-    break;
   }
 }
 
 class AutoResampler {
 public:
   AutoResampler()
     : mResampler(nullptr)
   {}
--- a/content/media/webspeech/recognition/SpeechRecognition.cpp
+++ b/content/media/webspeech/recognition/SpeechRecognition.cpp
@@ -190,17 +190,17 @@ SpeechRecognition::Transition(SpeechEven
           Reset();
           break;
         case EVENT_RECOGNITIONSERVICE_INTERMEDIATE_RESULT:
         case EVENT_RECOGNITIONSERVICE_FINAL_RESULT:
           DoNothing(aEvent);
           break;
         case EVENT_START:
           SR_LOG("STATE_STARTING: Unhandled event %s", GetName(aEvent));
-          MOZ_CRASH("");
+          MOZ_CRASH();
         case EVENT_COUNT:
           MOZ_CRASH("Invalid event EVENT_COUNT");
       }
       break;
     case STATE_ESTIMATING:
       switch (aEvent->mType) {
         case EVENT_AUDIO_DATA:
           WaitForEstimation(aEvent);
@@ -216,17 +216,17 @@ SpeechRecognition::Transition(SpeechEven
         case EVENT_RECOGNITIONSERVICE_ERROR:
           DoNothing(aEvent);
           break;
         case EVENT_AUDIO_ERROR:
           AbortError(aEvent);
           break;
         case EVENT_START:
           SR_LOG("STATE_ESTIMATING: Unhandled event %d", aEvent->mType);
-          MOZ_CRASH("");
+          MOZ_CRASH();
         case EVENT_COUNT:
           MOZ_CRASH("Invalid event EVENT_COUNT");
       }
       break;
     case STATE_WAITING_FOR_SPEECH:
       switch (aEvent->mType) {
         case EVENT_AUDIO_DATA:
           DetectSpeech(aEvent);
@@ -242,17 +242,17 @@ SpeechRecognition::Transition(SpeechEven
           break;
         case EVENT_RECOGNITIONSERVICE_INTERMEDIATE_RESULT:
         case EVENT_RECOGNITIONSERVICE_FINAL_RESULT:
         case EVENT_RECOGNITIONSERVICE_ERROR:
           DoNothing(aEvent);
           break;
         case EVENT_START:
           SR_LOG("STATE_STARTING: Unhandled event %s", GetName(aEvent));
-          MOZ_CRASH("");
+          MOZ_CRASH();
         case EVENT_COUNT:
           MOZ_CRASH("Invalid event EVENT_COUNT");
       }
       break;
     case STATE_RECOGNIZING:
       switch (aEvent->mType) {
         case EVENT_AUDIO_DATA:
           WaitForSpeechEnd(aEvent);
@@ -268,17 +268,17 @@ SpeechRecognition::Transition(SpeechEven
           AbortSilently(aEvent);
           break;
         case EVENT_RECOGNITIONSERVICE_FINAL_RESULT:
         case EVENT_RECOGNITIONSERVICE_INTERMEDIATE_RESULT:
           DoNothing(aEvent);
           break;
         case EVENT_START:
           SR_LOG("STATE_RECOGNIZING: Unhandled aEvent %s", GetName(aEvent));
-          MOZ_CRASH("");
+          MOZ_CRASH();
         case EVENT_COUNT:
           MOZ_CRASH("Invalid event EVENT_COUNT");
       }
       break;
     case STATE_WAITING_FOR_RESULT:
       switch (aEvent->mType) {
         case EVENT_STOP:
           DoNothing(aEvent);
@@ -294,17 +294,17 @@ SpeechRecognition::Transition(SpeechEven
           DoNothing(aEvent);
           break;
         case EVENT_ABORT:
           AbortSilently(aEvent);
           break;
         case EVENT_START:
         case EVENT_RECOGNITIONSERVICE_INTERMEDIATE_RESULT:
           SR_LOG("STATE_WAITING_FOR_RESULT: Unhandled aEvent %s", GetName(aEvent));
-          MOZ_CRASH("");
+          MOZ_CRASH();
         case EVENT_COUNT:
           MOZ_CRASH("Invalid event EVENT_COUNT");
       }
       break;
     case STATE_ABORTING:
       DoNothing(aEvent);
       break;
     case STATE_COUNT:
--- a/content/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp
+++ b/content/media/webspeech/synth/ipc/SpeechSynthesisChild.cpp
@@ -44,17 +44,16 @@ PSpeechSynthesisRequestChild*
 SpeechSynthesisChild::AllocPSpeechSynthesisRequest(const nsString& aText,
                                                    const nsString& aLang,
                                                    const nsString& aUri,
                                                    const float& aVolume,
                                                    const float& aRate,
                                                    const float& aPitch)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return nullptr;
 }
 
 bool
 SpeechSynthesisChild::DeallocPSpeechSynthesisRequest(PSpeechSynthesisRequestChild* aActor)
 {
   delete aActor;
   return true;
 }
@@ -145,25 +144,23 @@ SpeechTaskChild::SpeechTaskChild(SpeechS
 {
 }
 
 NS_IMETHODIMP
 SpeechTaskChild::Setup(nsISpeechTaskCallback* aCallback,
                        uint32_t aChannels, uint32_t aRate, uint8_t argc)
 {
   MOZ_CRASH("Should never be called from child");
-  return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
 SpeechTaskChild::SendAudio(const JS::Value& aData, const JS::Value& aLandmarks,
                            JSContext* aCx)
 {
   MOZ_CRASH("Should never be called from child");
-  return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 void
 SpeechTaskChild::Pause()
 {
   MOZ_ASSERT(mActor);
   mActor->SendPause();
 }
--- a/dom/audiochannel/AudioChannelService.cpp
+++ b/dom/audiochannel/AudioChannelService.cpp
@@ -564,10 +564,9 @@ AudioChannelService::GetInternalType(Aud
                : AUDIO_CHANNEL_INT_PUBLICNOTIFICATION;
 
     case AUDIO_CHANNEL_LAST:
     default:
       break;
   }
 
   MOZ_CRASH("unexpected audio channel type");
-  return AUDIO_CHANNEL_INT_LAST;
 }
--- a/dom/base/nsDOMClassInfo.cpp
+++ b/dom/base/nsDOMClassInfo.cpp
@@ -1812,28 +1812,25 @@ nsDOMClassInfo::Init()
                     "The number of items in sClassInfoData doesn't match the "
                     "number of nsIDOMClassInfo ID's, this is bad! Fix it!");
 
 #ifdef DEBUG
   for (size_t i = 0; i < eDOMClassInfoIDCount; i++) {
     if (!sClassInfoData[i].u.mConstructorFptr ||
         sClassInfoData[i].mDebugID != i) {
       MOZ_CRASH("Class info data out of sync, you forgot to update "
-                      "nsDOMClassInfo.h and nsDOMClassInfo.cpp! Fix this, "
-                      "mozilla will not work without this fixed!");
-      return NS_ERROR_NOT_INITIALIZED;
+                "nsDOMClassInfo.h and nsDOMClassInfo.cpp! Fix this, "
+                "mozilla will not work without this fixed!");
     }
   }
 
   for (size_t i = 0; i < eDOMClassInfoIDCount; i++) {
     if (!sClassInfoData[i].mInterfaces) {
       MOZ_CRASH("Class info data without an interface list! Fix this, "
-                      "mozilla will not work without this fixed!");
-
-      return NS_ERROR_NOT_INITIALIZED;
+                "mozilla will not work without this fixed!");
      }
    }
 #endif
 
   // Initialize static JSString's
   DefineStaticJSVals(cx);
 
   int32_t i;
@@ -2023,17 +2020,16 @@ nsDOMClassInfo::PostCreate(nsIXPConnectW
   return NS_ERROR_UNEXPECTED;
 }
 
 NS_IMETHODIMP
 nsDOMClassInfo::PostTransplant(nsIXPConnectWrappedNative *wrapper,
                                JSContext *cx, JSObject *obj)
 {
   MOZ_CRASH("nsDOMClassInfo::PostTransplant Don't call me!");
-  return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDOMClassInfo::AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
                             JSObject *obj, jsid id, jsval *vp,
                             bool *_retval)
 {
   NS_WARNING("nsDOMClassInfo::AddProperty Don't call me!");
--- a/dom/base/nsScreen.cpp
+++ b/dom/base/nsScreen.cpp
@@ -367,17 +367,16 @@ nsScreen::MozLockOrientation(const Seque
                                            mEventListener, /* useCapture = */ true);
       return true;
     }
   }
 
   // This is only for compilers that don't understand that the previous switch
   // will always return.
   MOZ_CRASH("unexpected lock orientation permission value");
-  return false;
 }
 
 void
 nsScreen::MozUnlockOrientation()
 {
   hal::UnlockScreenOrientation();
 }
 
--- a/dom/bindings/PrimitiveConversions.h
+++ b/dom/bindings/PrimitiveConversions.h
@@ -89,17 +89,16 @@ template<typename T>
 struct DisallowedConversion {
   typedef int jstype;
   typedef int intermediateType;
 
 private:
   static inline bool converter(JSContext* cx, JS::Handle<JS::Value> v,
                                jstype* retval) {
     MOZ_CRASH("This should never be instantiated!");
-    return false;
   }
 };
 
 struct PrimitiveConversionTraits_smallInt {
   // The output of JS::ToInt32 is determined as follows:
   //   1) The value is converted to a double
   //   2) Anything that's not a finite double returns 0
   //   3) The double is rounded towards zero to the nearest integer
--- a/dom/bluetooth/ipc/BluetoothChild.cpp
+++ b/dom/bluetooth/ipc/BluetoothChild.cpp
@@ -113,17 +113,16 @@ BluetoothChild::RecvNotificationsStopped
   Send__delete__(this);
   return true;
 }
 
 PBluetoothRequestChild*
 BluetoothChild::AllocPBluetoothRequest(const Request& aRequest)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return nullptr;
 }
 
 bool
 BluetoothChild::DeallocPBluetoothRequest(PBluetoothRequestChild* aActor)
 {
   delete aActor;
   return true;
 }
--- a/dom/bluetooth/ipc/BluetoothParent.cpp
+++ b/dom/bluetooth/ipc/BluetoothParent.cpp
@@ -63,17 +63,16 @@ public:
     MOZ_ASSERT(NS_IsMainThread());
     mRequest = nullptr;
   }
 
   virtual bool
   ParseSuccessfulReply(JS::Value* aValue) MOZ_OVERRIDE
   {
     MOZ_CRASH("This should never be called!");
-    return false;
   }
 };
 
 /*******************************************************************************
  * BluetoothParent
  ******************************************************************************/
 
 BluetoothParent::BluetoothParent()
@@ -228,21 +227,19 @@ BluetoothParent::RecvPBluetoothRequestCo
     case Request::TConnectScoRequest:
       return actor->DoRequest(aRequest.get_ConnectScoRequest());
     case Request::TDisconnectScoRequest:
       return actor->DoRequest(aRequest.get_DisconnectScoRequest());
     case Request::TIsScoConnectedRequest:
       return actor->DoRequest(aRequest.get_IsScoConnectedRequest());
     default:
       MOZ_CRASH("Unknown type!");
-      return false;
   }
 
   MOZ_CRASH("Should never get here!");
-  return false;
 }
 
 PBluetoothRequestParent*
 BluetoothParent::AllocPBluetoothRequest(const Request& aRequest)
 {
   MOZ_ASSERT(mService);
   return new BluetoothRequestParent(mService);
 }
--- a/dom/bluetooth/ipc/BluetoothServiceChildProcess.cpp
+++ b/dom/bluetooth/ipc/BluetoothServiceChildProcess.cpp
@@ -190,34 +190,31 @@ BluetoothServiceChildProcess::RemoveDevi
 nsresult
 BluetoothServiceChildProcess::GetScoSocket(
                                     const nsAString& aObjectPath,
                                     bool aAuth,
                                     bool aEncrypt,
                                     mozilla::ipc::UnixSocketConsumer* aConsumer)
 {
   MOZ_CRASH("This should never be called!");
-  return NS_ERROR_FAILURE;
 }
 
 nsresult
 BluetoothServiceChildProcess::GetServiceChannel(const nsAString& aDeviceAddress,
                                                 const nsAString& aServiceUuid,
                                                 BluetoothProfileManagerBase* aManager)
 {
   MOZ_CRASH("This should never be called!");
-  return NS_ERROR_FAILURE;
 }
 
 bool
 BluetoothServiceChildProcess::UpdateSdpRecords(const nsAString& aDeviceAddress,
                                                BluetoothProfileManagerBase* aManager)
 {
   MOZ_CRASH("This should never be called!");
-  return false;
 }
 
 bool
 BluetoothServiceChildProcess::SetPinCodeInternal(
                                                 const nsAString& aDeviceAddress,
                                                 const nsAString& aPinCode,
                                                 BluetoothReplyRunnable* aRunnable)
 {
@@ -360,39 +357,34 @@ BluetoothServiceChildProcess::HandleShut
   }
   return NS_OK;
 }
 
 nsresult
 BluetoothServiceChildProcess::StartInternal()
 {
   MOZ_CRASH("This should never be called!");
-  return NS_ERROR_FAILURE;
 }
 
 nsresult
 BluetoothServiceChildProcess::StopInternal()
 {
   MOZ_CRASH("This should never be called!");
-  return NS_ERROR_FAILURE;
 }
 
 bool
 BluetoothServiceChildProcess::IsEnabledInternal()
 {
   MOZ_CRASH("This should never be called!");
-  return false;
 }
 
 bool
 BluetoothServiceChildProcess::IsConnected(uint16_t aProfileId)
 {
   MOZ_CRASH("This should never be called!");
-  return false;
 }
 
 nsresult
 BluetoothServiceChildProcess::SendSinkMessage(const nsAString& aDeviceAddresses,
                                               const nsAString& aMessage)
 {
   MOZ_CRASH("This should never be called!");
-  return NS_ERROR_FAILURE;
 }
--- a/dom/fm/FMRadio.cpp
+++ b/dom/fm/FMRadio.cpp
@@ -236,17 +236,16 @@ void FMRadio::Notify(const FMRadioOperat
     case FM_RADIO_OPERATION_DISABLE:
       DispatchTrustedEvent(RADIO_DIABLED_EVENT_NAME);
       break;
     case FM_RADIO_OPERATION_SEEK:
       DispatchTrustedEvent(RADIO_SEEK_COMPLETE_EVENT_NAME);
       break;
     default:
       MOZ_CRASH();
-      return;
   }
 }
 
 /* void canPlayChanged (in boolean canPlay); */
 NS_IMETHODIMP FMRadio::CanPlayChanged(bool canPlay)
 {
   nsCOMPtr<nsIAudioManager> audioManager =
     do_GetService(NS_AUDIOMANAGER_CONTRACTID);
--- a/dom/indexedDB/IDBDatabase.cpp
+++ b/dom/indexedDB/IDBDatabase.cpp
@@ -132,17 +132,16 @@ public:
     return Success_NotSent;
   }
 
   virtual nsresult UnpackResponseFromParentProcess(
                                             const ResponseValue& aResponseValue)
                                             MOZ_OVERRIDE
   {
     MOZ_CRASH("Should never get here!");
-    return NS_ERROR_UNEXPECTED;
   }
 
 private:
   // In-params.
   nsString mName;
   nsString mType;
 
   // Out-params.
@@ -865,17 +864,16 @@ NoRequestDatabaseHelper::SendResponseToC
   return Success_NotSent;
 }
 
 nsresult
 NoRequestDatabaseHelper::UnpackResponseFromParentProcess(
                                             const ResponseValue& aResponseValue)
 {
   MOZ_CRASH("Should never get here!");
-  return NS_ERROR_UNEXPECTED;
 }
 
 nsresult
 NoRequestDatabaseHelper::OnSuccess()
 {
   NS_ASSERTION(IndexedDatabaseManager::IsMainProcess(), "Wrong process!");
   return NS_OK;
 }
--- a/dom/indexedDB/OpenDatabaseHelper.cpp
+++ b/dom/indexedDB/OpenDatabaseHelper.cpp
@@ -1475,17 +1475,16 @@ protected:
     return Success_NotSent;
   }
 
   virtual nsresult UnpackResponseFromParentProcess(
                                             const ResponseValue& aResponseValue)
                                             MOZ_OVERRIDE
   {
     MOZ_CRASH("Should never get here!");
-    return NS_ERROR_UNEXPECTED;
   }
 
   uint64_t RequestedVersion() const
   {
     return mRequestedVersion;
   }
 
 private:
@@ -1555,17 +1554,16 @@ protected:
     return Success_NotSent;
   }
 
   virtual nsresult UnpackResponseFromParentProcess(
                                             const ResponseValue& aResponseValue)
                                             MOZ_OVERRIDE
   {
     MOZ_CRASH("Should never get here!");
-    return NS_ERROR_UNEXPECTED;
   }
 
 private:
   // In-params
   nsRefPtr<OpenDatabaseHelper> mOpenHelper;
   nsRefPtr<IDBOpenDBRequest> mOpenRequest;
   uint64_t mCurrentVersion;
   nsString mName;
--- a/dom/indexedDB/ipc/IndexedDBChild.cpp
+++ b/dom/indexedDB/ipc/IndexedDBChild.cpp
@@ -222,17 +222,16 @@ IndexedDBChild::DeallocPIndexedDBDatabas
   delete aActor;
   return true;
 }
 
 PIndexedDBDeleteDatabaseRequestChild*
 IndexedDBChild::AllocPIndexedDBDeleteDatabaseRequest(const nsString& aName)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return NULL;
 }
 
 bool
 IndexedDBChild::DeallocPIndexedDBDeleteDatabaseRequest(
                                    PIndexedDBDeleteDatabaseRequestChild* aActor)
 {
   delete aActor;
   return true;
@@ -645,29 +644,27 @@ IndexedDBTransactionChild::RecvComplete(
       resultCode = aParams.get_AbortResult().errorCode();
       if (NS_SUCCEEDED(resultCode)) {
         resultCode = NS_ERROR_DOM_INDEXEDDB_ABORT_ERR;
       }
       break;
 
     default:
       MOZ_CRASH("Unknown union type!");
-      return false;
   }
 
   FireCompleteEvent(resultCode);
   return true;
 }
 
 PIndexedDBObjectStoreChild*
 IndexedDBTransactionChild::AllocPIndexedDBObjectStore(
                                     const ObjectStoreConstructorParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct an object store!");
-  return NULL;
 }
 
 bool
 IndexedDBTransactionChild::DeallocPIndexedDBObjectStore(
                                              PIndexedDBObjectStoreChild* aActor)
 {
   delete aActor;
   return true;
@@ -756,33 +753,31 @@ IndexedDBObjectStoreChild::RecvPIndexedD
   return true;
 }
 
 PIndexedDBRequestChild*
 IndexedDBObjectStoreChild::AllocPIndexedDBRequest(
                                         const ObjectStoreRequestParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return NULL;
 }
 
 bool
 IndexedDBObjectStoreChild::DeallocPIndexedDBRequest(
                                                  PIndexedDBRequestChild* aActor)
 {
   delete aActor;
   return false;
 }
 
 PIndexedDBIndexChild*
 IndexedDBObjectStoreChild::AllocPIndexedDBIndex(
                                           const IndexConstructorParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct an index!");
-  return NULL;
 }
 
 bool
 IndexedDBObjectStoreChild::DeallocPIndexedDBIndex(PIndexedDBIndexChild* aActor)
 {
   delete aActor;
   return true;
 }
@@ -888,28 +883,26 @@ IndexedDBIndexChild::RecvPIndexedDBCurso
       rv = mIndex->OpenCursorFromChildProcess(request, direction, aParams.key(),
                                               aParams.objectKey(),
                                               getter_AddRefs(cursor));
       NS_ENSURE_SUCCESS(rv, false);
       break;
 
     default:
       MOZ_CRASH("Unknown union type!");
-      return false;
   }
 
   actor->SetCursor(cursor);
   return true;
 }
 
 PIndexedDBRequestChild*
 IndexedDBIndexChild::AllocPIndexedDBRequest(const IndexRequestParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return NULL;
 }
 
 bool
 IndexedDBIndexChild::DeallocPIndexedDBRequest(PIndexedDBRequestChild* aActor)
 {
   delete aActor;
   return true;
 }
@@ -977,17 +970,16 @@ IndexedDBCursorChild::ActorDestroy(Actor
 #endif
   }
 }
 
 PIndexedDBRequestChild*
 IndexedDBCursorChild::AllocPIndexedDBRequest(const CursorRequestParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return NULL;
 }
 
 bool
 IndexedDBCursorChild::DeallocPIndexedDBRequest(PIndexedDBRequestChild* aActor)
 {
   delete aActor;
   return true;
 }
@@ -1030,17 +1022,16 @@ IndexedDBRequestChildBase::Disconnect()
     }
   }
 }
 
 bool
 IndexedDBRequestChildBase::Recv__delete__(const ResponseValue& aResponse)
 {
   MOZ_CRASH("This should be overridden!");
-  return false;
 }
 
 /*******************************************************************************
  * IndexedDBObjectStoreRequestChild
  ******************************************************************************/
 
 IndexedDBObjectStoreRequestChild::IndexedDBObjectStoreRequestChild(
                                                  AsyncConnectionHelper* aHelper,
@@ -1089,17 +1080,16 @@ IndexedDBObjectStoreRequestChild::Recv__
       MOZ_ASSERT(mRequestType == ParamsUnionType::TCountParams);
       break;
     case ResponseValue::TOpenCursorResponse:
       MOZ_ASSERT(mRequestType == ParamsUnionType::TOpenCursorParams);
       break;
 
     default:
       MOZ_CRASH("Received invalid response parameters!");
-      return false;
   }
 
   nsresult rv = mHelper->OnParentProcessRequestComplete(aResponse);
   NS_ENSURE_SUCCESS(rv, false);
 
   return true;
 }
 
@@ -1148,17 +1138,16 @@ IndexedDBIndexRequestChild::Recv__delete
       break;
     case ResponseValue::TOpenCursorResponse:
       MOZ_ASSERT(mRequestType == ParamsUnionType::TOpenCursorParams ||
                  mRequestType == ParamsUnionType::TOpenKeyCursorParams);
       break;
 
     default:
       MOZ_CRASH("Received invalid response parameters!");
-      return false;
   }
 
   nsresult rv = mHelper->OnParentProcessRequestComplete(aResponse);
   NS_ENSURE_SUCCESS(rv, false);
 
   return true;
 }
 
@@ -1192,17 +1181,16 @@ IndexedDBCursorRequestChild::Recv__delet
     case ResponseValue::Tnsresult:
       break;
     case ResponseValue::TContinueResponse:
       MOZ_ASSERT(mRequestType == ParamsUnionType::TContinueParams);
       break;
 
     default:
       MOZ_CRASH("Received invalid response parameters!");
-      return false;
   }
 
   nsresult rv = mHelper->OnParentProcessRequestComplete(aResponse);
   NS_ENSURE_SUCCESS(rv, false);
 
   return true;
 }
 
@@ -1278,24 +1266,22 @@ IPCOpenDatabaseHelper::UnpackResponseFro
   NS_NOTREACHED("Should never get here!");
   return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
 }
 
 AsyncConnectionHelper::ChildProcessSendResult
 IPCOpenDatabaseHelper::SendResponseToChildProcess(nsresult aResultCode)
 {
   MOZ_CRASH("Don't call me!");
-  return Error;
 }
 
 nsresult
 IPCOpenDatabaseHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
 {
   MOZ_CRASH("Don't call me!");
-  return NS_ERROR_FAILURE;
 }
 
 nsresult
 IPCOpenDatabaseHelper::GetSuccessResult(JSContext* aCx, JS::MutableHandle<JS::Value> aVal)
 {
   return WrapNative(aCx, NS_ISUPPORTS_CAST(EventTarget*, mDatabase),
                     aVal);
 }
@@ -1307,24 +1293,22 @@ IPCSetVersionHelper::UnpackResponseFromP
   NS_NOTREACHED("Should never get here!");
   return NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR;
 }
 
 AsyncConnectionHelper::ChildProcessSendResult
 IPCSetVersionHelper::SendResponseToChildProcess(nsresult aResultCode)
 {
   MOZ_CRASH("Don't call me!");
-  return Error;
 }
 
 nsresult
 IPCSetVersionHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
 {
   MOZ_CRASH("Don't call me!");
-  return NS_ERROR_FAILURE;
 }
 
 already_AddRefed<nsIDOMEvent>
 IPCSetVersionHelper::CreateSuccessEvent(mozilla::dom::EventTarget* aOwner)
 {
   return IDBVersionChangeEvent::CreateUpgradeNeeded(aOwner,
                                                     mOldVersion,
                                                     mRequestedVersion);
@@ -1339,31 +1323,28 @@ IPCSetVersionHelper::GetSuccessResult(JS
                     aVal);
 }
 
 nsresult
 IPCDeleteDatabaseHelper::UnpackResponseFromParentProcess(
                                             const ResponseValue& aResponseValue)
 {
   MOZ_CRASH("Don't call me!");
-  return NS_ERROR_FAILURE;
 }
 
 AsyncConnectionHelper::ChildProcessSendResult
 IPCDeleteDatabaseHelper::SendResponseToChildProcess(nsresult aResultCode)
 {
   MOZ_CRASH("Don't call me!");
-  return Error;
 }
 
 nsresult
 IPCDeleteDatabaseHelper::GetSuccessResult(JSContext* aCx, JS::MutableHandle<JS::Value> aVal)
 {
   aVal.setUndefined();
   return NS_OK;
 }
 
 nsresult
 IPCDeleteDatabaseHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
 {
   MOZ_CRASH("Don't call me!");
-  return NS_ERROR_FAILURE;
 }
--- a/dom/indexedDB/ipc/IndexedDBParent.cpp
+++ b/dom/indexedDB/ipc/IndexedDBParent.cpp
@@ -306,17 +306,16 @@ IndexedDBDatabaseParent::HandleEvent(nsI
                                                 mOpenRequest))) {
     rv = HandleRequestEvent(aEvent, type);
     NS_ENSURE_SUCCESS(rv, rv);
 
     return NS_OK;
   }
 
   MOZ_CRASH("Unexpected message!");
-  return NS_ERROR_UNEXPECTED;
 }
 
 void
 IndexedDBDatabaseParent::Disconnect()
 {
   if (mDatabase) {
     mDatabase->DisconnectFromActorParent();
   }
@@ -506,17 +505,16 @@ IndexedDBDatabaseParent::HandleRequestEv
 
     databaseConcrete->SetActor(this);
     mDatabase = databaseConcrete;
 
     return NS_OK;
   }
 
   MOZ_CRASH("Unexpected message type!");
-  return NS_ERROR_UNEXPECTED;
 }
 
 nsresult
 IndexedDBDatabaseParent::HandleDatabaseEvent(nsIDOMEvent* aEvent,
                                              const nsAString& aType)
 {
   MOZ_ASSERT(mDatabase);
   MOZ_ASSERT(!aType.EqualsLiteral(ERROR_EVT_STR),
@@ -552,17 +550,16 @@ IndexedDBDatabaseParent::HandleDatabaseE
     if (!SendVersionChange(oldVersion, newVersion)) {
       return NS_ERROR_FAILURE;
     }
 
     return NS_OK;
   }
 
   MOZ_CRASH("Unexpected message type!");
-  return NS_ERROR_UNEXPECTED;
 }
 
 void
 IndexedDBDatabaseParent::ActorDestroy(ActorDestroyReason aWhy)
 {
   if (mDatabase) {
     mDatabase->SetActor(static_cast<IndexedDBDatabaseParent*>(NULL));
     mDatabase->Invalidate();
@@ -776,17 +773,16 @@ IndexedDBTransactionParent::RecvAllReque
 
   return true;
 }
 
 bool
 IndexedDBTransactionParent::RecvDeleteObjectStore(const nsString& aName)
 {
   MOZ_CRASH("Should be overridden, don't call me!");
-  return false;
 }
 
 bool
 IndexedDBTransactionParent::RecvPIndexedDBObjectStoreConstructor(
                                     PIndexedDBObjectStoreParent* aActor,
                                     const ObjectStoreConstructorParams& aParams)
 {
   if (IsDisconnected()) {
@@ -820,21 +816,19 @@ IndexedDBTransactionParent::RecvPIndexed
 
     objectStore->SetActor(actor);
     return true;
   }
 
   if (aParams.type() ==
       ObjectStoreConstructorParams::TCreateObjectStoreParams) {
     MOZ_CRASH("Should be overridden, don't call me!");
-    return false;
   }
 
   MOZ_CRASH("Unknown param type!");
-  return false;
 }
 
 PIndexedDBObjectStoreParent*
 IndexedDBTransactionParent::AllocPIndexedDBObjectStore(
                                     const ObjectStoreConstructorParams& aParams)
 {
   return new IndexedDBObjectStoreParent();
 }
@@ -1025,21 +1019,19 @@ IndexedDBCursorParent::RecvPIndexedDBReq
   }
 
   switch (aParams.type()) {
     case CursorRequestParams::TContinueParams:
       return actor->Continue(aParams.get_ContinueParams());
 
     default:
       MOZ_CRASH("Unknown type!");
-      return false;
   }
 
   MOZ_CRASH("Should never get here!");
-  return false;
 }
 
 PIndexedDBRequestParent*
 IndexedDBCursorParent::AllocPIndexedDBRequest(
                                              const CursorRequestParams& aParams)
 {
   MOZ_ASSERT(mCursor);
   return new IndexedDBCursorRequestParent(mCursor, aParams.type());
@@ -1082,17 +1074,16 @@ IndexedDBObjectStoreParent::ActorDestroy
     mObjectStore->SetActor(static_cast<IndexedDBObjectStoreParent*>(NULL));
   }
 }
 
 bool
 IndexedDBObjectStoreParent::RecvDeleteIndex(const nsString& aName)
 {
   MOZ_CRASH("Should be overridden, don't call me!");
-  return false;
 }
 
 bool
 IndexedDBObjectStoreParent::RecvPIndexedDBRequestConstructor(
                                         PIndexedDBRequestParent* aActor,
                                         const ObjectStoreRequestParams& aParams)
 {
   if (IsDisconnected()) {
@@ -1135,21 +1126,19 @@ IndexedDBObjectStoreParent::RecvPIndexed
     case ObjectStoreRequestParams::TCountParams:
       return actor->Count(aParams.get_CountParams());
 
     case ObjectStoreRequestParams::TOpenCursorParams:
       return actor->OpenCursor(aParams.get_OpenCursorParams());
 
     default:
       MOZ_CRASH("Unknown type!");
-      return false;
   }
 
   MOZ_CRASH("Should never get here!");
-  return false;
 }
 
 bool
 IndexedDBObjectStoreParent::RecvPIndexedDBIndexConstructor(
                                           PIndexedDBIndexParent* aActor,
                                           const IndexConstructorParams& aParams)
 {
   if (IsDisconnected()) {
@@ -1179,21 +1168,19 @@ IndexedDBObjectStoreParent::RecvPIndexed
     }
 
     index->SetActor(actor);
     return true;
   }
 
   if (aParams.type() == IndexConstructorParams::TCreateIndexParams) {
     MOZ_CRASH("Should be overridden, don't call me!");
-    return false;
   }
 
   MOZ_CRASH("Unknown param type!");
-  return false;
 }
 
 PIndexedDBRequestParent*
 IndexedDBObjectStoreParent::AllocPIndexedDBRequest(
                                         const ObjectStoreRequestParams& aParams)
 {
   return new IndexedDBObjectStoreRequestParent(mObjectStore, aParams.type());
 }
@@ -1221,17 +1208,16 @@ IndexedDBObjectStoreParent::DeallocPInde
   return true;
 }
 
 PIndexedDBCursorParent*
 IndexedDBObjectStoreParent::AllocPIndexedDBCursor(
                               const ObjectStoreCursorConstructorParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct a cursor!");
-  return NULL;
 }
 
 bool
 IndexedDBObjectStoreParent::DeallocPIndexedDBCursor(
                                                  PIndexedDBCursorParent* aActor)
 {
   delete aActor;
   return true;
@@ -1411,21 +1397,19 @@ IndexedDBIndexParent::RecvPIndexedDBRequ
     case IndexRequestParams::TOpenCursorParams:
       return actor->OpenCursor(aParams.get_OpenCursorParams());
 
     case IndexRequestParams::TOpenKeyCursorParams:
       return actor->OpenKeyCursor(aParams.get_OpenKeyCursorParams());
 
     default:
       MOZ_CRASH("Unknown type!");
-      return false;
   }
 
   MOZ_CRASH("Should never get here!");
-  return false;
 }
 
 PIndexedDBRequestParent*
 IndexedDBIndexParent::AllocPIndexedDBRequest(const IndexRequestParams& aParams)
 {
   return new IndexedDBIndexRequestParent(mIndex, aParams.type());
 }
 
@@ -1436,17 +1420,16 @@ IndexedDBIndexParent::DeallocPIndexedDBR
   return true;
 }
 
 PIndexedDBCursorParent*
 IndexedDBIndexParent::AllocPIndexedDBCursor(
                                     const IndexCursorConstructorParams& aParams)
 {
   MOZ_CRASH("Caller is supposed to manually construct a cursor!");
-  return NULL;
 }
 
 bool
 IndexedDBIndexParent::DeallocPIndexedDBCursor(PIndexedDBCursorParent* aActor)
 {
   delete aActor;
   return true;
 }
@@ -1568,17 +1551,16 @@ IndexedDBObjectStoreRequestParent::GetAl
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_objectstore::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   {
     AutoSetCurrentTransaction asct(mObjectStore->Transaction());
 
     nsresult rv = mObjectStore->GetAllInternal(keyRange, aParams.limit(),
                                                nullptr,
                                                getter_AddRefs(request));
@@ -1708,17 +1690,16 @@ IndexedDBObjectStoreRequestParent::Count
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_objectstore::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   nsRefPtr<IDBRequest> request;
 
   {
     AutoSetCurrentTransaction asct(mObjectStore->Transaction());
 
     nsresult rv =
@@ -1748,17 +1729,16 @@ IndexedDBObjectStoreRequestParent::OpenC
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_objectstore::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   size_t direction = static_cast<size_t>(aParams.direction());
 
   nsRefPtr<IDBRequest> request;
 
   {
     AutoSetCurrentTransaction asct(mObjectStore->Transaction());
@@ -1871,17 +1851,16 @@ IndexedDBIndexRequestParent::GetAll(cons
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_index::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   {
     AutoSetCurrentTransaction asct(mIndex->ObjectStore()->Transaction());
 
     nsresult rv = mIndex->GetAllInternal(keyRange, aParams.limit(), nullptr,
                                          getter_AddRefs(request));
     NS_ENSURE_SUCCESS(rv, false);
@@ -1911,17 +1890,16 @@ IndexedDBIndexRequestParent::GetAllKeys(
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_index::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   {
     AutoSetCurrentTransaction asct(mIndex->ObjectStore()->Transaction());
 
     nsresult rv = mIndex->GetAllKeysInternal(keyRange, aParams.limit(), nullptr,
                                              getter_AddRefs(request));
     NS_ENSURE_SUCCESS(rv, false);
@@ -1949,17 +1927,16 @@ IndexedDBIndexRequestParent::Count(const
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_index::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   nsRefPtr<IDBRequest> request;
 
   {
     AutoSetCurrentTransaction asct(mIndex->ObjectStore()->Transaction());
 
     nsresult rv = mIndex->CountInternal(keyRange, nullptr,
@@ -1989,17 +1966,16 @@ IndexedDBIndexRequestParent::OpenCursor(
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_objectstore::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   size_t direction = static_cast<size_t>(aParams.direction());
 
   nsRefPtr<IDBRequest> request;
 
   {
     AutoSetCurrentTransaction asct(mIndex->ObjectStore()->Transaction());
@@ -2031,17 +2007,16 @@ IndexedDBIndexRequestParent::OpenKeyCurs
         IDBKeyRange::FromSerializedKeyRange(keyRangeUnion.get_KeyRange());
       break;
 
     case ipc::FIXME_Bug_521898_objectstore::OptionalKeyRange::Tvoid_t:
       break;
 
     default:
       MOZ_CRASH("Unknown param type!");
-      return false;
   }
 
   size_t direction = static_cast<size_t>(aParams.direction());
 
   nsRefPtr<IDBRequest> request;
 
   {
     AutoSetCurrentTransaction asct(mIndex->ObjectStore()->Transaction());
@@ -2198,10 +2173,9 @@ IndexedDBDeleteDatabaseRequestParent::Se
  ******************************************************************************/
 
  NS_IMPL_ISUPPORTS1(WeakEventListenerBase, nsIDOMEventListener)
 
  NS_IMETHODIMP
  WeakEventListenerBase::HandleEvent(nsIDOMEvent* aEvent)
 {
   MOZ_CRASH("This must be overridden!");
-  return NS_ERROR_FAILURE;
 }
--- a/dom/ipc/Blob.cpp
+++ b/dom/ipc/Blob.cpp
@@ -86,17 +86,16 @@ public:
   }
 
   bool
   Deserialize(const InputStreamParams& aParams)
   {
     // See InputStreamUtils.cpp to see how deserialization of a
     // RemoteInputStream is special-cased.
     MOZ_CRASH("RemoteInputStream should never be deserialized");
-    return false;
   }
 
   void
   SetStream(nsIInputStream* aStream)
   {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(aStream);
 
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -842,41 +842,37 @@ ContentChild::DeallocPStorage(PStorageCh
     return true;
 }
 
 PBluetoothChild*
 ContentChild::AllocPBluetooth()
 {
 #ifdef MOZ_B2G_BT
     MOZ_CRASH("No one should be allocating PBluetoothChild actors");
-    return nullptr;
 #else
     MOZ_CRASH("No support for bluetooth on this platform!");
-    return nullptr;
 #endif
 }
 
 bool
 ContentChild::DeallocPBluetooth(PBluetoothChild* aActor)
 {
 #ifdef MOZ_B2G_BT
     delete aActor;
     return true;
 #else
     MOZ_CRASH("No support for bluetooth on this platform!");
-    return false;
 #endif
 }
 
 PSpeechSynthesisChild*
 ContentChild::AllocPSpeechSynthesis()
 {
 #ifdef MOZ_WEBSPEECH
     MOZ_CRASH("No one should be allocating PSpeechSynthesisChild actors");
-    return nullptr;
 #else
     return nullptr;
 #endif
 }
 
 bool
 ContentChild::DeallocPSpeechSynthesis(PSpeechSynthesisChild* aActor)
 {
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -1988,43 +1988,40 @@ ContentParent::AllocPBluetooth()
 {
 #ifdef MOZ_B2G_BT
     if (!AssertAppProcessPermission(this, "bluetooth")) {
         return nullptr;
     }
     return new mozilla::dom::bluetooth::BluetoothParent();
 #else
     MOZ_CRASH("No support for bluetooth on this platform!");
-    return nullptr;
 #endif
 }
 
 bool
 ContentParent::DeallocPBluetooth(PBluetoothParent* aActor)
 {
 #ifdef MOZ_B2G_BT
     delete aActor;
     return true;
 #else
     MOZ_CRASH("No support for bluetooth on this platform!");
-    return false;
 #endif
 }
 
 bool
 ContentParent::RecvPBluetoothConstructor(PBluetoothParent* aActor)
 {
 #ifdef MOZ_B2G_BT
     nsRefPtr<BluetoothService> btService = BluetoothService::Get();
     NS_ENSURE_TRUE(btService, false);
 
     return static_cast<BluetoothParent*>(aActor)->InitWithService(btService);
 #else
     MOZ_CRASH("No support for bluetooth on this platform!");
-    return false;
 #endif
 }
 
 PSpeechSynthesisParent*
 ContentParent::AllocPSpeechSynthesis()
 {
 #ifdef MOZ_WEBSPEECH
     return new mozilla::dom::SpeechSynthesisParent();
--- a/dom/ipc/StructuredCloneUtils.cpp
+++ b/dom/ipc/StructuredCloneUtils.cpp
@@ -43,22 +43,18 @@ Read(JSContext* aCx, JSStructuredCloneRe
     nsCOMPtr<nsIDOMFile> file = do_QueryInterface(closure->mBlobs[aData]);
     MOZ_ASSERT(file);
 
 #ifdef DEBUG
     {
       // File should not be mutable.
       nsCOMPtr<nsIMutable> mutableFile = do_QueryInterface(file);
       bool isMutable;
-      if (NS_FAILED(mutableFile->GetMutable(&isMutable))) {
-        MOZ_CRASH("GetMutable failed!");
-      }
-      else {
-        MOZ_ASSERT(!isMutable);
-      }
+      MOZ_ASSERT(NS_SUCCEEDED(mutableFile->GetMutable(&isMutable)));
+      MOZ_ASSERT(!isMutable);
     }
 #endif
 
     JS::Rooted<JS::Value> wrappedFile(aCx);
     JS::Rooted<JSObject*> global(aCx, JS_GetGlobalForScopeChain(aCx));
     nsresult rv = nsContentUtils::WrapNative(aCx, global, file,
                                              &NS_GET_IID(nsIDOMFile),
                                              wrappedFile.address());
@@ -76,22 +72,18 @@ Read(JSContext* aCx, JSStructuredCloneRe
     nsCOMPtr<nsIDOMBlob> blob = do_QueryInterface(closure->mBlobs[aData]);
     MOZ_ASSERT(blob);
 
 #ifdef DEBUG
     {
       // Blob should not be mutable.
       nsCOMPtr<nsIMutable> mutableBlob = do_QueryInterface(blob);
       bool isMutable;
-      if (NS_FAILED(mutableBlob->GetMutable(&isMutable))) {
-        MOZ_CRASH("GetMutable failed!");
-      }
-      else {
-        MOZ_ASSERT(!isMutable);
-      }
+      MOZ_ASSERT(NS_SUCCEEDED(mutableBlob->GetMutable(&isMutable)));
+      MOZ_ASSERT(!isMutable);
     }
 #endif
 
     JS::Rooted<JS::Value> wrappedBlob(aCx);
     JS::Rooted<JSObject*> global(aCx, JS_GetGlobalForScopeChain(aCx));
     nsresult rv = nsContentUtils::WrapNative(aCx, global, blob,
                                              &NS_GET_IID(nsIDOMBlob),
                                              wrappedBlob.address());
--- a/dom/mobilemessage/src/MmsMessage.cpp
+++ b/dom/mobilemessage/src/MmsMessage.cpp
@@ -362,17 +362,16 @@ MmsMessage::GetDelivery(nsAString& aDeli
       break;
     case eDeliveryState_NotDownloaded:
       aDelivery = DELIVERY_NOT_DOWNLOADED;
       break;
     case eDeliveryState_Unknown:
     case eDeliveryState_EndGuard:
     default:
       MOZ_CRASH("We shouldn't get any other delivery state!");
-      return NS_ERROR_UNEXPECTED;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 MmsMessage::GetDeliveryStatus(JSContext* aCx, JS::Value* aDeliveryStatus)
 {
@@ -405,17 +404,16 @@ MmsMessage::GetDeliveryStatus(JSContext*
         statusStr = DELIVERY_STATUS_REJECTED;
         break;
       case eDeliveryStatus_Manual:
         statusStr = DELIVERY_STATUS_MANUAL;
         break;
       case eDeliveryStatus_EndGuard:
       default:
         MOZ_CRASH("We shouldn't get any other delivery status!");
-        return NS_ERROR_UNEXPECTED;
     }
     tempStrArray.AppendElement(statusStr);
   }
 
   JS::Rooted<JSObject*> deliveryStatusObj(aCx);
   nsresult rv = nsTArrayToJSArray(aCx, tempStrArray, deliveryStatusObj.address());
   NS_ENSURE_SUCCESS(rv, rv);
 
--- a/dom/mobilemessage/src/MobileMessageCallback.cpp
+++ b/dom/mobilemessage/src/MobileMessageCallback.cpp
@@ -88,17 +88,16 @@ MobileMessageCallback::NotifyError(int32
     case nsIMobileMessageCallback::NO_SIM_CARD_ERROR:
       mDOMRequest->FireError(NS_LITERAL_STRING("NoSimCardError"));
       break;
     case nsIMobileMessageCallback::RADIO_DISABLED_ERROR:
       mDOMRequest->FireError(NS_LITERAL_STRING("RadioDisabledError"));
       break;
     default: // SUCCESS_NO_ERROR is handled above.
       MOZ_CRASH("Should never get here!");
-      return NS_ERROR_FAILURE;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 MobileMessageCallback::NotifyMessageSent(nsISupports *aMessage)
 {
--- a/dom/mobilemessage/src/MobileMessageCursorCallback.cpp
+++ b/dom/mobilemessage/src/MobileMessageCursorCallback.cpp
@@ -44,17 +44,16 @@ MobileMessageCursorCallback::NotifyCurso
     case nsIMobileMessageCallback::UNKNOWN_ERROR:
       cursor->FireError(NS_LITERAL_STRING("UnknownError"));
       break;
     case nsIMobileMessageCallback::INTERNAL_ERROR:
       cursor->FireError(NS_LITERAL_STRING("InternalError"));
       break;
     default: // SUCCESS_NO_ERROR is handled above.
       MOZ_CRASH("Should never get here!");
-      return NS_ERROR_FAILURE;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 MobileMessageCursorCallback::NotifyCursorResult(nsISupports* aResult)
 {
--- a/dom/mobilemessage/src/MobileMessageThread.cpp
+++ b/dom/mobilemessage/src/MobileMessageThread.cpp
@@ -182,16 +182,15 @@ MobileMessageThread::GetLastMessageType(
       aLastMessageType = MESSAGE_TYPE_SMS;
       break;
     case eMessageType_MMS:
       aLastMessageType = MESSAGE_TYPE_MMS;
       break;
     case eMessageType_EndGuard:
     default:
       MOZ_CRASH("We shouldn't get any other message type!");
-      return NS_ERROR_UNEXPECTED;
   }
 
   return NS_OK;
 }
 
 } // namespace dom
 } // namespace mozilla
--- a/dom/mobilemessage/src/SmsMessage.cpp
+++ b/dom/mobilemessage/src/SmsMessage.cpp
@@ -174,17 +174,16 @@ SmsMessage::GetDelivery(nsAString& aDeli
       break;
     case eDeliveryState_Error:
       aDelivery = DELIVERY_ERROR;
       break;
     case eDeliveryState_Unknown:
     case eDeliveryState_EndGuard:
     default:
       MOZ_CRASH("We shouldn't get any other delivery state!");
-      return NS_ERROR_UNEXPECTED;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SmsMessage::GetDeliveryStatus(nsAString& aDeliveryStatus)
 {
@@ -199,17 +198,16 @@ SmsMessage::GetDeliveryStatus(nsAString&
       aDeliveryStatus = DELIVERY_STATUS_PENDING;
       break;
     case eDeliveryStatus_Error:
       aDeliveryStatus = DELIVERY_STATUS_ERROR;
       break;
     case eDeliveryStatus_EndGuard:
     default:
       MOZ_CRASH("We shouldn't get any other delivery status!");
-      return NS_ERROR_UNEXPECTED;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SmsMessage::GetSender(nsAString& aSender)
 {
@@ -247,17 +245,16 @@ SmsMessage::GetMessageClass(nsAString& a
     case eMessageClass_Class2:
       aMessageClass = MESSAGE_CLASS_CLASS_2;
       break;
     case eMessageClass_Class3:
       aMessageClass = MESSAGE_CLASS_CLASS_3;
       break;
     default:
       MOZ_CRASH("We shouldn't get any other message class!");
-      return NS_ERROR_UNEXPECTED;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 SmsMessage::GetTimestamp(JSContext* cx, JS::Value* aDate)
 {
--- a/dom/mobilemessage/src/ipc/SmsChild.cpp
+++ b/dom/mobilemessage/src/ipc/SmsChild.cpp
@@ -26,17 +26,16 @@ CreateMessageFromMessageData(const Mobil
     case MobileMessageData::TMmsMessageData:
       message = new MmsMessage(aData.get_MmsMessageData());
       break;
     case MobileMessageData::TSmsMessageData:
       message = new SmsMessage(aData.get_SmsMessageData());
       break;
     default:
       MOZ_CRASH("Unexpected type of MobileMessageData");
-      return nullptr;
   }
 
   return message.forget();
 }
 
 void
 NotifyObserversWithMobileMessage(const char* aEventName,
                                  const MobileMessageData& aData)
@@ -109,31 +108,29 @@ SmsChild::RecvNotifyDeliveryErrorMessage
   NotifyObserversWithMobileMessage(kSmsDeliveryErrorObserverTopic, aData);
   return true;
 }
 
 PSmsRequestChild*
 SmsChild::AllocPSmsRequest(const IPCSmsRequest& aRequest)
 {
   MOZ_CRASH("Caller is supposed to manually construct a request!");
-  return nullptr;
 }
 
 bool
 SmsChild::DeallocPSmsRequest(PSmsRequestChild* aActor)
 {
   delete aActor;
   return true;
 }
 
 PMobileMessageCursorChild*
 SmsChild::AllocPMobileMessageCursor(const IPCMobileMessageCursor& aCursor)
 {
   MOZ_CRASH("Caller is supposed to manually construct a cursor!");
-  return nullptr;
 }
 
 bool
 SmsChild::DeallocPMobileMessageCursor(PMobileMessageCursorChild* aActor)
 {
   // MobileMessageCursorChild is refcounted, must not be freed manually.
   // Originally AddRefed in SendCursorRequest() in SmsIPCService.cpp.
   static_cast<MobileMessageCursorChild*>(aActor)->Release();
@@ -196,17 +193,16 @@ SmsRequestChild::Recv__delete__(const Me
     case MessageReply::TReplyMarkeMessageRead:
       mReplyRequest->NotifyMessageMarkedRead(aReply.get_ReplyMarkeMessageRead().read());
       break;
     case MessageReply::TReplyMarkeMessageReadFail:
       mReplyRequest->NotifyMarkMessageReadFailed(aReply.get_ReplyMarkeMessageReadFail().error());
       break;
     default:
       MOZ_CRASH("Received invalid response parameters!");
-      return false;
   }
 
   return true;
 }
 
 /*******************************************************************************
  * MobileMessageCursorChild
  ******************************************************************************/
@@ -239,17 +235,16 @@ MobileMessageCursorChild::RecvNotifyResu
     case MobileMessageCursorData::TSmsMessageData:
       result = new SmsMessage(aData.get_SmsMessageData());
       break;
     case MobileMessageCursorData::TThreadData:
       result = new MobileMessageThread(aData.get_ThreadData());
       break;
     default:
       MOZ_CRASH("Received invalid response parameters!");
-      return false;
   }
 
   mCursorCallback->NotifyCursorResult(result);
   return true;
 }
 
 bool
 MobileMessageCursorChild::Recv__delete__(const int32_t& aError)
--- a/dom/mobilemessage/src/ipc/SmsParent.cpp
+++ b/dom/mobilemessage/src/ipc/SmsParent.cpp
@@ -334,17 +334,16 @@ SmsParent::RecvPSmsRequestConstructor(PS
     case IPCSmsRequest::TGetMessageRequest:
       return actor->DoRequest(aRequest.get_GetMessageRequest());
     case IPCSmsRequest::TDeleteMessageRequest:
       return actor->DoRequest(aRequest.get_DeleteMessageRequest());
     case IPCSmsRequest::TMarkMessageReadRequest:
       return actor->DoRequest(aRequest.get_MarkMessageReadRequest());
     default:
       MOZ_CRASH("Unknown type!");
-      break;
   }
 
   return false;
 }
 
 PSmsRequestParent*
 SmsParent::AllocPSmsRequest(const IPCSmsRequest& aRequest)
 {
@@ -373,17 +372,16 @@ SmsParent::RecvPMobileMessageCursorConst
 
   switch (aRequest.type()) {
     case IPCMobileMessageCursor::TCreateMessageCursorRequest:
       return actor->DoRequest(aRequest.get_CreateMessageCursorRequest());
     case IPCMobileMessageCursor::TCreateThreadCursorRequest:
       return actor->DoRequest(aRequest.get_CreateThreadCursorRequest());
     default:
       MOZ_CRASH("Unknown type!");
-      break;
   }
 
   return false;
 }
 
 PMobileMessageCursorParent*
 SmsParent::AllocPMobileMessageCursor(const IPCMobileMessageCursor& aRequest)
 {
@@ -440,17 +438,16 @@ SmsRequestParent::DoRequest(const SendMe
         NS_WARNING("SmsRequestParent: Fail to build MMS params.");
         return true;
       }
       mmsService->Send(params, this);
     }
     break;
   default:
     MOZ_CRASH("Unknown type of SendMessageRequest!");
-    return false;
   }
   return true;
 }
 
 bool
 SmsRequestParent::DoRequest(const RetrieveMessageRequest& aRequest)
 {
   nsresult rv = NS_ERROR_FAILURE;
@@ -736,17 +733,16 @@ MobileMessageCursorParent::NotifyCursorR
   nsCOMPtr<nsIDOMMozMobileMessageThread> iThread = do_QueryInterface(aResult);
   if (iThread) {
     MobileMessageThread* thread = static_cast<MobileMessageThread*>(aResult);
     return SendNotifyResult(MobileMessageCursorData(thread->GetData()))
       ? NS_OK : NS_ERROR_FAILURE;
   }
 
   MOZ_CRASH("Received invalid response parameters!");
-  return NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
 MobileMessageCursorParent::NotifyCursorDone()
 {
   return NotifyCursorError(nsIMobileMessageCallback::SUCCESS_NO_ERROR);
 }
 
--- a/dom/network/src/TCPSocketParent.cpp
+++ b/dom/network/src/TCPSocketParent.cpp
@@ -108,17 +108,16 @@ TCPSocketParent::RecvData(const Sendable
 
     case SendableData::TnsString:
       rv = mIntermediary->SendString(aData.get_nsString());
       NS_ENSURE_SUCCESS(rv, true);
       break;
 
     default:
       MOZ_CRASH("unexpected SendableData type");
-      return false;
   }
   return true;
 }
 
 bool
 TCPSocketParent::RecvClose()
 {
   NS_ENSURE_TRUE(mSocket, true);
--- a/dom/power/PowerManagerService.cpp
+++ b/dom/power/PowerManagerService.cpp
@@ -115,28 +115,26 @@ PowerManagerService::SyncProfile()
 NS_IMETHODIMP
 PowerManagerService::Reboot()
 {
   StartForceQuitWatchdog(eHalShutdownMode_Reboot, mWatchdogTimeoutSecs);
   // To synchronize any unsaved user data before rebooting.
   SyncProfile();
   hal::Reboot();
   MOZ_CRASH("hal::Reboot() shouldn't return");
-  return NS_OK;
 }
 
 NS_IMETHODIMP
 PowerManagerService::PowerOff()
 {
   StartForceQuitWatchdog(eHalShutdownMode_PowerOff, mWatchdogTimeoutSecs);
   // To synchronize any unsaved user data before powering off.
   SyncProfile();
   hal::PowerOff();
   MOZ_CRASH("hal::PowerOff() shouldn't return");
-  return NS_OK;
 }
 
 NS_IMETHODIMP
 PowerManagerService::Restart()
 {
   // FIXME/bug 796826 this implementation is currently gonk-specific,
   // because it relies on the Gonk to initialize the Gecko processes to
   // restart B2G. It's better to do it here to have a real "restart".
@@ -149,17 +147,16 @@ PowerManagerService::Restart()
 
   // To synchronize any unsaved user data before restarting.
   SyncProfile();
 #ifdef XP_UNIX
   sync();
 #endif
   _exit(0);
   MOZ_CRASH("_exit() shouldn't return");
-  return NS_OK;
 }
 
 NS_IMETHODIMP
 PowerManagerService::AddWakeLockListener(nsIDOMMozWakeLockListener *aListener)
 {
   if (mWakeLockListeners.Contains(aListener))
     return NS_OK;
 
--- a/dom/workers/XMLHttpRequest.cpp
+++ b/dom/workers/XMLHttpRequest.cpp
@@ -259,17 +259,16 @@ ConvertStringToResponseType(const nsAStr
 
   for (size_t index = 0; index < ArrayLength(strings) - 1; index++) {
     if (aString.EqualsASCII(strings[index].value, strings[index].length)) {
       return static_cast<XMLHttpRequestResponseType>(index);
     }
   }
 
   MOZ_CRASH("Don't know anything about this response type!");
-  return XMLHttpRequestResponseType::_empty;
 }
 
 enum
 {
   STRING_abort = 0,
   STRING_error,
   STRING_load,
   STRING_loadstart,
--- a/extensions/cookie/nsPermissionManager.cpp
+++ b/extensions/cookie/nsPermissionManager.cpp
@@ -284,17 +284,16 @@ DeleteFromMozHostListener::
 DeleteFromMozHostListener(nsPermissionManager* aManager)
   : mManager(aManager)
 {
 }
 
 NS_IMETHODIMP DeleteFromMozHostListener::HandleResult(mozIStorageResultSet *)
 {
   MOZ_CRASH("Should not get any results");
-  return NS_OK;
 }
 
 NS_IMETHODIMP DeleteFromMozHostListener::HandleError(mozIStorageError *)
 {
   // Errors are handled in |HandleCompletion|
   return NS_OK;
 }
 
--- a/gfx/gl/GLContext.cpp
+++ b/gfx/gl/GLContext.cpp
@@ -1734,17 +1734,16 @@ GLContext::ReadPixelsIntoImageSurface(gf
         case gfxASurface::ImageFormatRGB16_565:
             destPixelSize = 2;
             destFormat = LOCAL_GL_RGB;
             destType = LOCAL_GL_UNSIGNED_SHORT_5_6_5_REV;
             break;
 
         default:
             MOZ_CRASH("Bad format.");
-            return;
     }
     MOZ_ASSERT(dest->Stride() == dest->Width() * destPixelSize);
 
     GLenum readFormat = destFormat;
     GLenum readType = destType;
     bool needsTempSurf = !GetActualReadFormats(this,
                                                destFormat, destType,
                                                readFormat, readType);
@@ -1768,17 +1767,16 @@ GLContext::ReadPixelsIntoImageSurface(gf
             case LOCAL_GL_RGB: {
                 MOZ_ASSERT(readPixelSize == 2);
                 MOZ_ASSERT(readType == LOCAL_GL_UNSIGNED_SHORT_5_6_5_REV);
                 readFormatGFX = gfxASurface::ImageFormatRGB16_565;
                 break;
             }
             default: {
                 MOZ_CRASH("Bad read format.");
-                return;
             }
         }
 
         switch (readType) {
             case LOCAL_GL_UNSIGNED_BYTE: {
                 MOZ_ASSERT(readFormat == LOCAL_GL_RGBA);
                 readPixelSize = 4;
                 break;
@@ -1790,17 +1788,16 @@ GLContext::ReadPixelsIntoImageSurface(gf
             }
             case LOCAL_GL_UNSIGNED_SHORT_5_6_5_REV: {
                 MOZ_ASSERT(readFormat == LOCAL_GL_RGB);
                 readPixelSize = 2;
                 break;
             }
             default: {
                 MOZ_CRASH("Bad read type.");
-                return;
             }
         }
 
         tempSurf = new gfxImageSurface(dest->GetSize(), readFormatGFX, false);
         readSurf = tempSurf;
     } else {
         readPixelSize = destPixelSize;
         readSurf = dest;
--- a/gfx/gl/GLContextProviderGLX.cpp
+++ b/gfx/gl/GLContextProviderGLX.cpp
@@ -103,17 +103,16 @@ GLXLibrary::EnsureInitialized(LibType li
 #ifdef __OpenBSD__
             libGLfilename = "libGL.so";
 #else
             libGLfilename = "libGL.so.1";
 #endif
             break;
         default:
             MOZ_CRASH("Invalid GLX library type.");
-            return false;
         }
 
         ScopedGfxFeatureReporter reporter(libGLfilename, forceFeatureReport);
         mOGLLibrary = PR_LoadLibrary(libGLfilename);
         if (!mOGLLibrary) {
             NS_WARNING("Couldn't load OpenGL shared library.");
             return false;
         }
--- a/gfx/gl/GLScreenBuffer.cpp
+++ b/gfx/gl/GLScreenBuffer.cpp
@@ -90,20 +90,17 @@ GLScreenBuffer::BindAsFramebuffer(GLCont
     case LOCAL_GL_READ_FRAMEBUFFER_EXT:
         if (!gl->HasExt_FramebufferBlit())
             NS_WARNING("READ_FRAMEBUFFER requested but unavailable.");
 
         gl->raw_fBindFramebuffer(LOCAL_GL_READ_FRAMEBUFFER_EXT, readFB);
         break;
 
     default:
-        // In case we got a bad target.
         MOZ_CRASH("Bad `target` for BindFramebuffer.");
-        gl->raw_fBindFramebuffer(target, 0);
-        break;
     }
 }
 
 void
 GLScreenBuffer::BindFB(GLuint fb)
 {
     GLuint drawFB = DrawFB();
     GLuint readFB = ReadFB();
@@ -573,17 +570,16 @@ ReadBuffer::Create(GLContext* gl,
     case AttachmentType::GLTexture:
         colorTex = surf->Texture();
         break;
     case AttachmentType::GLRenderbuffer:
         colorRB = surf->Renderbuffer();
         break;
     default:
         MOZ_CRASH("Unknown attachment type?");
-        return nullptr;
     }
     MOZ_ASSERT(colorTex || colorRB);
 
     GLuint fb = 0;
     gl->fGenFramebuffers(1, &fb);
     gl->AttachBuffersToFB(colorTex, colorRB, depthRB, stencilRB, fb);
 
     MOZ_ASSERT(gl->IsFramebufferComplete(fb));
@@ -623,17 +619,16 @@ ReadBuffer::Attach(SharedSurface_GL* sur
         case AttachmentType::GLTexture:
             colorTex = surf->Texture();
             break;
         case AttachmentType::GLRenderbuffer:
             colorRB = surf->Renderbuffer();
             break;
         default:
             MOZ_CRASH("Unknown attachment type?");
-            return;
         }
 
         mGL->AttachBuffersToFB(colorTex, colorRB, 0, 0, mFB);
         MOZ_ASSERT(mGL->IsFramebufferComplete(mFB));
     }
 
     mSurf = surf;
 }
--- a/gfx/gl/SharedSurface.h
+++ b/gfx/gl/SharedSurface.h
@@ -101,22 +101,20 @@ public:
         return mHasAlpha;
     }
 
 
     // For use when AttachType is correct.
     virtual GLuint Texture() const {
         MOZ_ASSERT(AttachType() == AttachmentType::GLTexture);
         MOZ_CRASH("Did you forget to override this function?");
-        return 0;
     }
 
     virtual GLuint Renderbuffer() const {
         MOZ_ASSERT(AttachType() == AttachmentType::GLRenderbuffer);
         MOZ_CRASH("Did you forget to override this function?");
-        return 0;
     }
 };
 
 } /* namespace gfx */
 } /* namespace mozilla */
 
 #endif /* SHARED_SURFACE_H_ */
--- a/gfx/gl/SharedSurfaceGL.cpp
+++ b/gfx/gl/SharedSurfaceGL.cpp
@@ -57,17 +57,16 @@ SharedSurface_GL::Copy(SharedSurface_GL*
         } else if (dest->AttachType() == AttachmentType::GLRenderbuffer) {
             GLuint destRB = dest->Renderbuffer();
             ScopedFramebufferForRenderbuffer destWrapper(gl, destRB);
 
             gl->BlitFramebufferToFramebuffer(0, destWrapper.FB(),
                                              src->Size(), dest->Size());
         } else {
             MOZ_CRASH("Unhandled dest->AttachType().");
-            return;
         }
 
         if (srcNeedsUnlock)
             src->UnlockProd();
 
         if (origNeedsRelock)
             origLocked->LockProd();
 
@@ -95,17 +94,16 @@ SharedSurface_GL::Copy(SharedSurface_GL*
         } else if (src->AttachType() == AttachmentType::GLRenderbuffer) {
             GLuint srcRB = src->Renderbuffer();
             ScopedFramebufferForRenderbuffer srcWrapper(gl, srcRB);
 
             gl->BlitFramebufferToFramebuffer(srcWrapper.FB(), 0,
                                              src->Size(), dest->Size());
         } else {
             MOZ_CRASH("Unhandled src->AttachType().");
-            return;
         }
 
         if (destNeedsUnlock)
             dest->UnlockProd();
 
         if (origNeedsRelock)
             origLocked->LockProd();
 
@@ -133,17 +131,16 @@ SharedSurface_GL::Copy(SharedSurface_GL*
 
             gl->BlitTextureToFramebuffer(srcTex, destWrapper.FB(),
                                          src->Size(), dest->Size());
 
             return;
         }
 
         MOZ_CRASH("Unhandled dest->AttachType().");
-        return;
     }
 
     if (src->AttachType() == AttachmentType::GLRenderbuffer) {
         GLuint srcRB = src->Renderbuffer();
         ScopedFramebufferForRenderbuffer srcWrapper(gl, srcRB);
 
         if (dest->AttachType() == AttachmentType::GLTexture) {
             GLuint destTex = dest->Texture();
@@ -160,21 +157,19 @@ SharedSurface_GL::Copy(SharedSurface_GL*
 
             gl->BlitFramebufferToFramebuffer(srcWrapper.FB(), destWrapper.FB(),
                                              src->Size(), dest->Size());
 
             return;
         }
 
         MOZ_CRASH("Unhandled dest->AttachType().");
-        return;
     }
 
     MOZ_CRASH("Unhandled src->AttachType().");
-    return;
 }
 
 void
 SharedSurface_GL::LockProd()
 {
     MOZ_ASSERT(!mIsLocked);
 
     LockProdImpl();
@@ -260,17 +255,16 @@ SharedSurface_Basic::Create(GLContext* g
             format = gfxASurface::ImageFormatRGB24;
         break;
     case LOCAL_GL_RGBA:
     case LOCAL_GL_RGBA8:
         format = gfxASurface::ImageFormatARGB32;
         break;
     default:
         MOZ_CRASH("Unhandled Tex format.");
-        return nullptr;
     }
     return new SharedSurface_Basic(gl, size, hasAlpha, format, tex);
 }
 
 SharedSurface_Basic::SharedSurface_Basic(GLContext* gl,
                                          const gfxIntSize& size,
                                          bool hasAlpha,
                                          gfxASurface::gfxImageFormat format,
--- a/gfx/gl/SurfaceStream.cpp
+++ b/gfx/gl/SurfaceStream.cpp
@@ -39,17 +39,16 @@ SurfaceStream::CreateForType(SurfaceStre
         case SurfaceStreamType::TripleBuffer_Copy:
             return new SurfaceStream_TripleBuffer_Copy(prevStream);
         case SurfaceStreamType::TripleBuffer_Async:
             return new SurfaceStream_TripleBuffer_Async(prevStream);
         case SurfaceStreamType::TripleBuffer:
             return new SurfaceStream_TripleBuffer(prevStream);
         default:
             MOZ_CRASH("Invalid Type.");
-            return nullptr;
     }
 }
 
 void
 SurfaceStream::New(SurfaceFactory* factory, const gfxIntSize& size,
                    SharedSurface*& surf)
 {
     MOZ_ASSERT(!surf);
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -1773,23 +1773,23 @@ private:
  * Clients will usually want to Connect/Clear() on each transaction to
  * avoid difficulties managing memory across multiple layer subtrees.
  */
 class RefLayer : public ContainerLayer {
   friend class LayerManager;
 
 private:
   virtual void InsertAfter(Layer* aChild, Layer* aAfter)
-  { MOZ_CRASH("no"); }
+  { MOZ_CRASH(); }
 
   virtual void RemoveChild(Layer* aChild)
-  { MOZ_CRASH("no"); }
+  { MOZ_CRASH(); }
 
   virtual void RepositionChild(Layer* aChild, Layer* aAfter)
-  { MOZ_CRASH("no"); }
+  { MOZ_CRASH(); }
 
   using ContainerLayer::SetFrameMetrics;
 
 public:
   /**
    * CONSTRUCTION PHASE ONLY
    * Set the ID of the layer's referent.
    */
--- a/gfx/layers/client/CompositableClient.h
+++ b/gfx/layers/client/CompositableClient.h
@@ -69,17 +69,16 @@ public:
     MOZ_COUNT_CTOR(CompositableClient);
   }
 
   virtual ~CompositableClient();
 
   virtual TextureInfo GetTextureInfo() const
   {
     MOZ_CRASH("This method should be overridden");
-    return TextureInfo();
   }
 
   LayersBackend GetCompositorBackendType() const;
 
   TemporaryRef<TextureClient>
   CreateTextureClient(TextureClientType aTextureClientType);
 
   virtual void SetDescriptorFromReply(TextureIdentifier aTextureId,
--- a/gfx/layers/client/ContentClient.h
+++ b/gfx/layers/client/ContentClient.h
@@ -137,17 +137,16 @@ public:
                                                      uint32_t aFlags,
                                                      gfxASurface**) MOZ_OVERRIDE;
   virtual TemporaryRef<gfx::DrawTarget>
     CreateDTBuffer(ContentType aType, const nsIntRect& aRect, uint32_t aFlags);
 
   virtual TextureInfo GetTextureInfo() const MOZ_OVERRIDE
   {
     MOZ_CRASH("Should not be called on non-remote ContentClient");
-    return TextureInfo();
   }
 
 private:
   BasicLayerManager* mManager;
 };
 
 /**
  * A ContentClientRemote backed by a ThebesLayerBuffer.
--- a/gfx/layers/composite/CompositableHost.cpp
+++ b/gfx/layers/composite/CompositableHost.cpp
@@ -68,17 +68,16 @@ CompositableHost::Create(const TextureIn
   case BUFFER_CONTENT_DIRECT:
     result = new ContentHostDoubleBuffered(aTextureInfo);
     return result;
   case BUFFER_CONTENT_INC:
     result = new ContentHostIncremental(aTextureInfo);
     return result;
   default:
     MOZ_CRASH("Unknown CompositableType");
-    return nullptr;
   }
 }
 
 void
 CompositableHost::DumpTextureHost(FILE* aFile, TextureHost* aTexture)
 {
   if (!aTexture) {
     return;
--- a/gfx/layers/composite/TextureHost.cpp
+++ b/gfx/layers/composite/TextureHost.cpp
@@ -55,17 +55,16 @@ TextureHost::CreateTextureHost(SurfaceDe
                                     aTextureFlags);
 #endif
     case LAYERS_BASIC:
       return CreateBasicTextureHost(aDescriptorType,
                                     aTextureHostFlags,
                                     aTextureFlags);
     default:
       MOZ_CRASH("Couldn't create texture host");
-      return nullptr;
   }
 }
 
 
 TextureHost::TextureHost()
   : mFlags(0)
   , mBuffer(nullptr)
   , mFormat(gfx::FORMAT_UNKNOWN)
--- a/gfx/layers/d3d10/CanvasLayerD3D10.cpp
+++ b/gfx/layers/d3d10/CanvasLayerD3D10.cpp
@@ -166,17 +166,16 @@ CanvasLayerD3D10::UpdateSurface()
 
         mTexture->Unmap(0);
         mSRView = mUploadSRView;
         break;
       }
 
       default:
         MOZ_CRASH("Unhandled SharedSurfaceType.");
-        return;
     }
   } else if (mSurface) {
     RECT r;
     r.left = 0;
     r.top = 0;
     r.right = mBounds.width;
     r.bottom = mBounds.height;
 
--- a/gfx/layers/opengl/CanvasLayerOGL.cpp
+++ b/gfx/layers/opengl/CanvasLayerOGL.cpp
@@ -219,17 +219,16 @@ CanvasLayerOGL::UpdateSurface()
         }
         case SharedSurfaceType::GLTextureShare: {
           SharedSurface_GLTexture* textureSurf = SharedSurface_GLTexture::Cast(surf);
           mTexture = textureSurf->Texture();
           break;
         }
         default:
           MOZ_CRASH("Unacceptable SharedSurface type.");
-          return;
       }
     } else {
       nothingToShow = true;
     }
   } else if (mCanvasSurface) {
 #ifdef XP_MACOSX
     if (mDrawTarget && mDrawTarget->GetNativeSurface(gfx::NATIVE_SURFACE_CGCONTEXT_ACCELERATED)) {
       if (!mTexture) {
@@ -241,17 +240,16 @@ CanvasLayerOGL::UpdateSurface()
       }
       mDrawTarget->Flush();
       return;
     }
 #endif
     updatedSurface = mCanvasSurface;
   } else {
     MOZ_CRASH("Unhandled canvas layer type.");
-    return;
   }
 
   if (updatedSurface) {
     mOGLManager->MakeCurrent();
     mLayerProgram = gl()->UploadSurfaceToTexture(updatedSurface,
                                                  mBounds,
                                                  mUploadTexture,
                                                  true,//false,
--- a/gfx/layers/opengl/GLManager.cpp
+++ b/gfx/layers/opengl/GLManager.cpp
@@ -74,13 +74,12 @@ GLManager::CreateGLManager(LayerManager*
       return new GLManagerCompositor(static_cast<CompositorOGL*>(
         static_cast<LayerManagerComposite*>(aManager)->GetCompositor()));
     } else {
       return nullptr;
     }
   }
 
   MOZ_CRASH("Cannot create GLManager for non-GL layer manager");
-  return nullptr;
 }
 
 }
 }
--- a/gfx/layers/opengl/TextureHostOGL.cpp
+++ b/gfx/layers/opengl/TextureHostOGL.cpp
@@ -111,17 +111,16 @@ FormatFromShaderType(ShaderProgramType a
     case RGBXLayerProgramType:
       return FORMAT_R8G8B8X8;
     case BGRALayerProgramType:
       return FORMAT_B8G8R8A8;
     case BGRXLayerProgramType:
       return FORMAT_B8G8R8X8;
     default:
       MOZ_CRASH("Unsupported texture shader type");
-      return FORMAT_UNKNOWN;
   }
 }
 
 TextureImageTextureHostOGL::~TextureImageTextureHostOGL()
 {
   MOZ_COUNT_DTOR(TextureImageTextureHostOGL);
   if (mTexture && mTexture->InUpdate()) {
     mTexture->EndUpdate();
@@ -431,17 +430,16 @@ SurfaceStreamHostOGL::Lock()
     }
     case SharedSurfaceType::Basic: {
       toUpload = SharedSurface_Basic::Cast(sharedSurf)->GetData();
       MOZ_ASSERT(toUpload);
       break;
     }
     default:
       MOZ_CRASH("Invalid SharedSurface type.");
-      return false;
   }
 
   if (toUpload) {
     // mBounds seems to end up as (0,0,0,0) a lot, so don't use it?
     nsIntSize size(toUpload->GetSize());
     nsIntRect rect(nsIntPoint(0,0), size);
     nsIntRegion bounds(rect);
     mShaderProgram = mGL->UploadSurfaceToTexture(toUpload,
--- a/gfx/thebes/gfxRect.h
+++ b/gfx/thebes/gfxRect.h
@@ -91,27 +91,27 @@ struct gfxRect :
 
     gfxPoint CCWCorner(mozilla::css::Side side) const {
         switch (side) {
             case NS_SIDE_TOP: return TopLeft();
             case NS_SIDE_RIGHT: return TopRight();
             case NS_SIDE_BOTTOM: return BottomRight();
             case NS_SIDE_LEFT: return BottomLeft();
         }
-        MOZ_CRASH("Incomplet switch");
+        MOZ_CRASH("Incomplete switch");
     }
 
     gfxPoint CWCorner(mozilla::css::Side side) const {
         switch (side) {
             case NS_SIDE_TOP: return TopRight();
             case NS_SIDE_RIGHT: return BottomRight();
             case NS_SIDE_BOTTOM: return BottomLeft();
             case NS_SIDE_LEFT: return TopLeft();
         }
-        MOZ_CRASH("Incomplet switch");
+        MOZ_CRASH("Incomplete switch");
     }
 
     /* Conditions this border to Cairo's max coordinate space.
      * The caller can check IsEmpty() after Condition() -- if it's TRUE,
      * the caller can possibly avoid doing any extra rendering.
      */
     void Condition();
 
--- a/hal/gonk/GonkDiskSpaceWatcher.cpp
+++ b/hal/gonk/GonkDiskSpaceWatcher.cpp
@@ -70,17 +70,16 @@ public:
   ~GonkDiskSpaceWatcher() {};
 
   virtual void OnFileCanReadWithoutBlocking(int aFd);
 
   // We should never write to the fanotify fd.
   virtual void OnFileCanWriteWithoutBlocking(int aFd)
   {
     MOZ_CRASH("Must not write to fanotify fd");
-    MOZ_CRASH();
   }
 
   void DoStart();
   void DoStop();
 
 private:
   void NotifyUpdate();
 
--- a/hal/linux/LinuxPower.cpp
+++ b/hal/linux/LinuxPower.cpp
@@ -62,19 +62,17 @@ QuitHard(hal::ShutdownMode aMode)
       // If we can't SIGKILL our process group, something is badly
       // wrong.  Trying to deliver a catch-able signal to ourselves can
       // invoke signal handlers and might cause problems.  So try
       // _exit() and hope we go away.
       _exit(1);
       break;
     default:
       MOZ_CRASH();
-      break;
   }
-  MOZ_CRASH();
 }
 
 // Function to complusively shut down the system with a given mode when timeout.
 static void*
 ForceQuitWatchdog(void* aParamPtr)
 {
   watchdogParam_t* paramPtr = reinterpret_cast<watchdogParam_t*>(aParamPtr);
   if (paramPtr->timeoutSecs > 0 && paramPtr->timeoutSecs <= 30) {
--- a/ipc/glue/FileDescriptor.cpp
+++ b/ipc/glue/FileDescriptor.cpp
@@ -106,17 +106,16 @@ FileDescriptor::ShareTo(const FileDescri
       return base::FileDescriptor(newHandle, /* auto_close */ true);
     }
     NS_WARNING("Failed to duplicate file handle for other process!");
   }
   return base::FileDescriptor();
 #endif
 
   MOZ_CRASH("Must not get here!");
-  return PickleType();
 }
 
 // static
 bool
 FileDescriptor::IsValid(PlatformHandleType aHandle)
 {
   return aHandle != INVALID_HANDLE;
 }
--- a/ipc/glue/URIUtils.cpp
+++ b/ipc/glue/URIUtils.cpp
@@ -75,17 +75,17 @@ SerializeURI(nsIURI* aURI,
     if (scheme.EqualsASCII(entry.string, entry.length)) {
       allowed = true;
       break;
     }
   }
 
   if (!allowed) {
     MOZ_CRASH("All IPDL URIs must be serializable or an allowed "
-                    "scheme!");
+              "scheme!");
   }
 
   GenericURIParams params;
   if (NS_FAILED(aURI->GetSpec(params.spec())) ||
       NS_FAILED(aURI->GetOriginCharset(params.charset()))) {
     MOZ_CRASH("This must never fail!");
   }
 
--- a/ipc/ril/Ril.cpp
+++ b/ipc/ril/Ril.cpp
@@ -151,17 +151,16 @@ RilConnector::SetUp(int aFd)
     // Nothing to do here.
     return true;
 }
 
 void
 RilConnector::GetSocketAddr(const sockaddr_any& aAddr,
                             nsAString& aAddrStr)
 {
-    // Unused.
     MOZ_CRASH("This should never be called!");
 }
 
 } // anonymous namespace
 
 namespace mozilla {
 namespace ipc {
 
--- a/js/public/RootingAPI.h
+++ b/js/public/RootingAPI.h
@@ -884,22 +884,20 @@ template <typename T> class MaybeRooted<
 {
   public:
     typedef T HandleType;
     typedef FakeRooted<T> RootType;
     typedef FakeMutableHandle<T> MutableHandleType;
 
     static inline JS::Handle<T> toHandle(HandleType v) {
         MOZ_ASSUME_NOT_REACHED("Bad conversion");
-        return JS::Handle<T>::fromMarkedLocation(NULL);
     }
 
     static inline JS::MutableHandle<T> toMutableHandle(MutableHandleType v) {
         MOZ_ASSUME_NOT_REACHED("Bad conversion");
-        return JS::MutableHandle<T>::fromMarkedLocation(NULL);
     }
 };
 
 } /* namespace js */
 
 namespace JS {
 
 template <typename T> template <typename S>
--- a/js/src/assembler/jit/ExecutableAllocator.h
+++ b/js/src/assembler/jit/ExecutableAllocator.h
@@ -157,17 +157,17 @@ private:
         m_freePtr += n;
 
         switch (kind) {
           case ION_CODE:      m_ionCodeBytes      += n;        break;
           case BASELINE_CODE: m_baselineCodeBytes += n;        break;
           case ASMJS_CODE:    m_asmJSCodeBytes    += n;        break;
           case REGEXP_CODE:   m_regexpCodeBytes   += n;        break;
           case OTHER_CODE:    m_otherCodeBytes    += n;        break;
-          default:            MOZ_ASSUME_NOT_REACHED("bad code kind"); break;
+          default:            MOZ_ASSUME_NOT_REACHED("bad code kind");
         }
         return result;
     }
 
     size_t available() const {
         JS_ASSERT(m_end >= m_freePtr);
         return m_end - m_freePtr;
     }
--- a/js/src/builtin/Intl.cpp
+++ b/js/src/builtin/Intl.cpp
@@ -71,42 +71,37 @@ using icu::NumberingSystem;
  * and return error codes. Signatures adapted from ICU header files locid.h,
  * numsys.h, ucal.h, ucol.h, udat.h, udatpg.h, uenum.h, unum.h; see the ICU
  * directory for license.
  */
 
 static int32_t
 u_strlen(const UChar *s)
 {
-    MOZ_NOT_REACHED("u_strlen: Intl API disabled");
-    return 0;
+    MOZ_ASSUME_NOT_REACHED("u_strlen: Intl API disabled");
 }
 
 struct UEnumeration;
 
 static int32_t
 uenum_count(UEnumeration *en, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("uenum_count: Intl API disabled");
-    *status = U_UNSUPPORTED_ERROR;
-    return 0;
+    MOZ_ASSUME_NOT_REACHED("uenum_count: Intl API disabled");
 }
 
 static const char *
 uenum_next(UEnumeration *en, int32_t *resultLength, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("uenum_next: Intl API disabled");
-    *status = U_UNSUPPORTED_ERROR;
-    return NULL;
+    MOZ_ASSUME_NOT_REACHED("uenum_next: Intl API disabled");
 }
 
 static void
 uenum_close(UEnumeration *en)
 {
-    MOZ_NOT_REACHED("uenum_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("uenum_close: Intl API disabled");
 }
 
 struct UCollator;
 
 enum UColAttribute {
      UCOL_ALTERNATE_HANDLING,
      UCOL_CASE_FIRST,
      UCOL_CASE_LEVEL,
@@ -131,55 +126,55 @@ enum UCollationResult {
   UCOL_EQUAL = 0,
   UCOL_GREATER = 1,
   UCOL_LESS = -1
 };
 
 static int32_t
 ucol_countAvailable(void)
 {
-    MOZ_NOT_REACHED("ucol_countAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_countAvailable: Intl API disabled");
 }
 
 static const char *
 ucol_getAvailable(int32_t localeIndex)
 {
-    MOZ_NOT_REACHED("ucol_getAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_getAvailable: Intl API disabled");
 }
 
 static UCollator *
 ucol_open(const char *loc, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucol_open: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_open: Intl API disabled");
 }
 
 static void
 ucol_setAttribute(UCollator *coll, UColAttribute attr, UColAttributeValue value, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucol_setAttribute: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_setAttribute: Intl API disabled");
 }
 
 static UCollationResult
 ucol_strcoll(const UCollator *coll, const UChar *source, int32_t sourceLength,
              const UChar *target, int32_t targetLength)
 {
-    MOZ_NOT_REACHED("ucol_strcoll: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_strcoll: Intl API disabled");
 }
 
 static void
 ucol_close(UCollator *coll)
 {
-    MOZ_NOT_REACHED("ucol_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_close: Intl API disabled");
 }
 
 static UEnumeration *
 ucol_getKeywordValuesForLocale(const char *key, const char *locale, UBool commonlyUsed,
                                UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucol_getKeywordValuesForLocale: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucol_getKeywordValuesForLocale: Intl API disabled");
 }
 
 struct UParseError;
 struct UFieldPosition;
 typedef void *UNumberFormat;
 
 enum UNumberFormatStyle {
     UNUM_DECIMAL = 1,
@@ -206,195 +201,195 @@ enum UNumberFormatAttribute {
 
 enum UNumberFormatTextAttribute {
   UNUM_CURRENCY_CODE,
 };
 
 static int32_t
 unum_countAvailable(void)
 {
-    MOZ_NOT_REACHED("unum_countAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_countAvailable: Intl API disabled");
 }
 
 static const char *
 unum_getAvailable(int32_t localeIndex)
 {
-    MOZ_NOT_REACHED("unum_getAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_getAvailable: Intl API disabled");
 }
 
 static UNumberFormat *
 unum_open(UNumberFormatStyle style, const UChar *pattern, int32_t patternLength,
           const char *locale, UParseError *parseErr, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("unum_open: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_open: Intl API disabled");
 }
 
 static void
 unum_setAttribute(UNumberFormat *fmt, UNumberFormatAttribute  attr, int32_t newValue)
 {
-    MOZ_NOT_REACHED("unum_setAttribute: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_setAttribute: Intl API disabled");
 }
 
 static int32_t
 unum_formatDouble(const UNumberFormat *fmt, double number, UChar *result,
                   int32_t resultLength, UFieldPosition *pos, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("unum_formatDouble: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_formatDouble: Intl API disabled");
 }
 
 static void
 unum_close(UNumberFormat *fmt)
 {
-    MOZ_NOT_REACHED("unum_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_close: Intl API disabled");
 }
 
 static void
 unum_setTextAttribute(UNumberFormat *fmt, UNumberFormatTextAttribute tag, const UChar *newValue,
                       int32_t newValueLength, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("unum_setTextAttribute: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("unum_setTextAttribute: Intl API disabled");
 }
 
 class Locale {
   public:
     Locale(const char *language, const char *country = 0, const char *variant = 0,
            const char *keywordsAndValues = 0);
 };
 
 Locale::Locale(const char *language, const char *country, const char *variant,
                const char *keywordsAndValues)
 {
-    MOZ_NOT_REACHED("Locale::Locale: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("Locale::Locale: Intl API disabled");
 }
 
 class NumberingSystem {
   public:
     static NumberingSystem *createInstance(const Locale &inLocale, UErrorCode &status);
     const char *getName();
 };
 
 NumberingSystem *
 NumberingSystem::createInstance(const Locale &inLocale, UErrorCode &status)
 {
-    MOZ_NOT_REACHED("NumberingSystem::createInstance: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("NumberingSystem::createInstance: Intl API disabled");
 }
 
 const char *
 NumberingSystem::getName()
 {
-    MOZ_NOT_REACHED("NumberingSystem::getName: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("NumberingSystem::getName: Intl API disabled");
 }
 
 typedef void *UCalendar;
 
 enum UCalendarType {
   UCAL_TRADITIONAL,
   UCAL_DEFAULT = UCAL_TRADITIONAL,
   UCAL_GREGORIAN
 };
 
 static UCalendar *
 ucal_open(const UChar *zoneID, int32_t len, const char *locale,
           UCalendarType type, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucal_open: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucal_open: Intl API disabled");
 }
 
 static const char *
 ucal_getType(const UCalendar *cal, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucal_getType: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucal_getType: Intl API disabled");
 }
 
 static UEnumeration *
 ucal_getKeywordValuesForLocale(const char *key, const char *locale,
                                UBool commonlyUsed, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("ucal_getKeywordValuesForLocale: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucal_getKeywordValuesForLocale: Intl API disabled");
 }
 
 static void
 ucal_close(UCalendar *cal)
 {
-    MOZ_NOT_REACHED("ucal_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucal_close: Intl API disabled");
 }
 
 typedef void *UDateTimePatternGenerator;
 
 static UDateTimePatternGenerator *
 udatpg_open(const char *locale, UErrorCode *pErrorCode)
 {
-    MOZ_NOT_REACHED("udatpg_open: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udatpg_open: Intl API disabled");
 }
 
 static int32_t
 udatpg_getBestPattern(UDateTimePatternGenerator *dtpg, const UChar *skeleton,
                       int32_t length, UChar *bestPattern, int32_t capacity,
                       UErrorCode *pErrorCode)
 {
-    MOZ_NOT_REACHED("udatpg_getBestPattern: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udatpg_getBestPattern: Intl API disabled");
 }
 
 static void
 udatpg_close(UDateTimePatternGenerator *dtpg)
 {
-    MOZ_NOT_REACHED("udatpg_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udatpg_close: Intl API disabled");
 }
 
 typedef void *UCalendar;
 typedef void *UDateFormat;
 
 enum UDateFormatStyle {
     UDAT_PATTERN = -2,
     UDAT_IGNORE = UDAT_PATTERN
 };
 
 static int32_t
 udat_countAvailable(void)
 {
-    MOZ_NOT_REACHED("udat_countAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_countAvailable: Intl API disabled");
 }
 
 static const char *
 udat_getAvailable(int32_t localeIndex)
 {
-    MOZ_NOT_REACHED("udat_getAvailable: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_getAvailable: Intl API disabled");
 }
 
 static UDateFormat *
 udat_open(UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const char *locale,
           const UChar *tzID, int32_t tzIDLength, const UChar *pattern,
           int32_t patternLength, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("udat_open: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_open: Intl API disabled");
 }
 
 static const UCalendar *
 udat_getCalendar(const UDateFormat *fmt)
 {
-    MOZ_NOT_REACHED("udat_getCalendar: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_getCalendar: Intl API disabled");
 }
 
 static void
 ucal_setGregorianChange(UCalendar *cal, UDate date, UErrorCode *pErrorCode)
 {
-    MOZ_NOT_REACHED("ucal_setGregorianChange: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("ucal_setGregorianChange: Intl API disabled");
 }
 
 static int32_t
 udat_format(const UDateFormat *format, UDate dateToFormat, UChar *result,
             int32_t resultLength, UFieldPosition *position, UErrorCode *status)
 {
-    MOZ_NOT_REACHED("udat_format: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_format: Intl API disabled");
 }
 
 static void
 udat_close(UDateFormat *format)
 {
-    MOZ_NOT_REACHED("udat_close: Intl API disabled");
+    MOZ_ASSUME_NOT_REACHED("udat_close: Intl API disabled");
 }
 
 #endif
 
 
 /******************** Common to Intl constructors ********************/
 
 static bool
--- a/js/src/builtin/TestingFunctions.cpp
+++ b/js/src/builtin/TestingFunctions.cpp
@@ -485,17 +485,17 @@ GCState(JSContext *cx, unsigned argc, js
     gc::State globalState = cx->runtime()->gcIncrementalState;
     if (globalState == gc::NO_INCREMENTAL)
         state = "none";
     else if (globalState == gc::MARK)
         state = "mark";
     else if (globalState == gc::SWEEP)
         state = "sweep";
     else
-        MOZ_NOT_REACHED("Unobserveable global GC state");
+        MOZ_ASSUME_NOT_REACHED("Unobserveable global GC state");
 
     JSString *str = JS_NewStringCopyZ(cx, state);
     if (!str)
         return false;
     *vp = StringValue(str);
     return true;
 }
 
--- a/js/src/ctypes/CTypes.cpp
+++ b/js/src/ctypes/CTypes.cpp
@@ -2565,17 +2565,16 @@ ImplicitConvert(JSContext* cx,
       break;
     }
 
     return TypeError(cx, "struct", val);
   }
   case TYPE_void_t:
   case TYPE_function:
     MOZ_ASSUME_NOT_REACHED("invalid type");
-    return false;
   }
 
   return true;
 }
 
 // Convert jsval 'val' to a C binary representation of CType 'targetType',
 // storing the result in 'buffer'. This function is more forceful than
 // ImplicitConvert.
@@ -2638,17 +2637,16 @@ ExplicitConvert(JSContext* cx, HandleVal
   case TYPE_array:
   case TYPE_struct:
     // ImplicitConvert is sufficient. Re-throw the exception it generated.
     JS_SetPendingException(cx, ex);
     return false;
   case TYPE_void_t:
   case TYPE_function:
     MOZ_ASSUME_NOT_REACHED("invalid type");
-    return false;
   }
   return true;
 }
 
 // Given a CType 'typeObj', generate a string describing the C type declaration
 // corresponding to 'typeObj'. For instance, the CType constructed from
 // 'ctypes.int32_t.ptr.array(4).ptr.ptr' will result in the type string
 // 'int32_t*(**)[4]'.
@@ -2811,17 +2809,16 @@ BuildTypeSource(JSContext* cx,
     case ABI_STDCALL:
       AppendString(result, "ctypes.stdcall_abi, ");
       break;
     case ABI_WINAPI:
       AppendString(result, "ctypes.winapi_abi, ");
       break;
     case INVALID_ABI:
       MOZ_ASSUME_NOT_REACHED("invalid abi");
-      break;
     }
 
     // Recursively build the source string describing the function return and
     // argument types.
     BuildTypeSource(cx, fninfo->mReturnType, true, result);
 
     if (fninfo->mArgTypes.length() > 0) {
       AppendString(result, ", [");
@@ -3056,17 +3053,16 @@ BuildDataSource(JSContext* cx,
 
     if (isImplicit)
       AppendString(result, "}");
 
     break;
   }
   case TYPE_void_t:
     MOZ_ASSUME_NOT_REACHED("invalid type");
-    break;
   }
 
   return true;
 }
 
 /*******************************************************************************
 ** JSAPI callback function implementations
 *******************************************************************************/
@@ -5459,17 +5455,16 @@ FunctionType::BuildSymbolName(JSString* 
     // mangling is done.
     AppendString(result, name);
 #endif
     break;
   }
 
   case INVALID_ABI:
     MOZ_ASSUME_NOT_REACHED("invalid abi");
-    break;
   }
 }
 
 static FunctionInfo*
 NewFunctionInfo(JSContext* cx,
                 jsval abiType,
                 jsval returnType,
                 jsval* argTypes,
--- a/js/src/frontend/BytecodeEmitter.cpp
+++ b/js/src/frontend/BytecodeEmitter.cpp
@@ -1620,17 +1620,16 @@ CheckSideEffects(JSContext *cx, Bytecode
               case PNK_ELEM:
                 /* All these delete addressing modes have effects too. */
                 *answer = true;
                 return true;
               default:
                 return CheckSideEffects(cx, bce, pn2, answer);
             }
             MOZ_ASSUME_NOT_REACHED("We have a returning default case");
-            return false;
           }
 
           case PNK_TYPEOF:
           case PNK_VOID:
           case PNK_NOT:
           case PNK_BITNOT:
             if (pn->isOp(JSOP_NOT)) {
                 /* ! does not convert its operand via toString or valueOf. */
@@ -1644,17 +1643,16 @@ CheckSideEffects(JSContext *cx, Bytecode
              * effects. Of the remaining unary-arity node types, we can't
              * easily prove that the operand never denotes an object with a
              * toString or valueOf method.
              */
             *answer = true;
             return true;
         }
         MOZ_ASSUME_NOT_REACHED("We have a returning default case");
-        return false;
 
       case PN_NAME:
         /*
          * Take care to avoid trying to bind a label name (labels, both for
          * statements and property values in object initialisers, have pn_op
          * defaulted to JSOP_NOP).
          */
         if (pn->isKind(PNK_NAME) && !pn->isOp(JSOP_NOP)) {
--- a/js/src/frontend/ParseNode.cpp
+++ b/js/src/frontend/ParseNode.cpp
@@ -377,25 +377,23 @@ Parser<FullParseHandler>::cloneParseTree
     pn->setUsed(opn->isUsed());
 
     switch (pn->getArity()) {
 #define NULLCHECK(e)    JS_BEGIN_MACRO if (!(e)) return NULL; JS_END_MACRO
 
       case PN_CODE:
         if (pn->getKind() == PNK_MODULE) {
             MOZ_ASSUME_NOT_REACHED("module nodes cannot be cloned");
-            return NULL;
-        } else {
-            NULLCHECK(pn->pn_funbox =
-                      newFunctionBox(opn->pn_funbox->function(), pc, opn->pn_funbox->strict));
-            NULLCHECK(pn->pn_body = cloneParseTree(opn->pn_body));
-            pn->pn_cookie = opn->pn_cookie;
-            pn->pn_dflags = opn->pn_dflags;
-            pn->pn_blockid = opn->pn_blockid;
         }
+        NULLCHECK(pn->pn_funbox =
+                  newFunctionBox(opn->pn_funbox->function(), pc, opn->pn_funbox->strict));
+        NULLCHECK(pn->pn_body = cloneParseTree(opn->pn_body));
+        pn->pn_cookie = opn->pn_cookie;
+        pn->pn_dflags = opn->pn_dflags;
+        pn->pn_blockid = opn->pn_blockid;
         break;
 
       case PN_LIST:
         pn->makeEmpty();
         for (ParseNode *opn2 = opn->pn_head; opn2; opn2 = opn2->pn_next) {
             ParseNode *pn2;
             NULLCHECK(pn2 = cloneParseTree(opn2));
             pn->append(pn2);
--- a/js/src/frontend/Parser.cpp
+++ b/js/src/frontend/Parser.cpp
@@ -184,17 +184,16 @@ ParseContext<FullParseHandler>::define(J
         dn->pn_dflags |= (PND_LET | PND_BOUND);
         JS_ASSERT(dn->pn_cookie.level() == staticLevel); /* see bindLet */
         if (!decls_.addShadow(name, dn))
             return false;
         break;
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected kind");
-        break;
     }
 
     return true;
 }
 
 template <>
 bool
 ParseContext<SyntaxParseHandler>::define(JSContext *cx, HandlePropertyName name, Node pn,
@@ -3971,17 +3970,16 @@ Parser<FullParseHandler>::forStatement()
           case PNK_NAME:
             /* Beware 'for (arguments in ...)' with or without a 'var'. */
             pn2->markAsAssigned();
             break;
 
 #if JS_HAS_DESTRUCTURING
           case PNK_ASSIGN:
             MOZ_ASSUME_NOT_REACHED("forStatement TOK_ASSIGN");
-            break;
 
           case PNK_ARRAY:
           case PNK_OBJECT:
             if (versionNumber() == JSVERSION_1_7) {
                 /*
                  * Destructuring for-in requires [key, value] enumeration
                  * in JS1.7.
                  */
@@ -6652,17 +6650,16 @@ Parser<ParseHandler>::primaryExpr(TokenK
             if (op == JSOP_INITPROP) {
                 assignType = VALUE;
             } else if (op == JSOP_INITPROP_GETTER) {
                 assignType = GET;
             } else if (op == JSOP_INITPROP_SETTER) {
                 assignType = SET;
             } else {
                 MOZ_ASSUME_NOT_REACHED("bad opcode in object initializer");
-                assignType = VALUE; /* try to error early */
             }
 
             AtomIndexAddPtr p = seen.lookupForAdd(atom);
             if (p) {
                 jsatomid index = p.value();
                 AssignmentType oldAssignType = AssignmentType(index);
                 if ((oldAssignType & assignType) &&
                     (oldAssignType != VALUE || assignType != VALUE || pc->sc->needStrictChecks()))
--- a/js/src/gc/Statistics.cpp
+++ b/js/src/gc/Statistics.cpp
@@ -246,17 +246,17 @@ ExplainReason(JS::gcreason::Reason reaso
 {
     switch (reason) {
 #define SWITCH_REASON(name)                     \
         case JS::gcreason::name:                    \
           return #name;
         GCREASONS(SWITCH_REASON)
 
         default:
-          MOZ_NOT_REACHED("bad GC reason");
+          MOZ_ASSUME_NOT_REACHED("bad GC reason");
 #undef SWITCH_REASON
     }
 }
 
 static double
 t(int64_t t)
 {
     return double(t) / PRMJ_USEC_PER_MSEC;
--- a/js/src/gc/StoreBuffer.cpp
+++ b/js/src/gc/StoreBuffer.cpp
@@ -65,17 +65,17 @@ StoreBuffer::WholeCellEdges::mark(JSTrac
     if (kind <= JSTRACE_OBJECT) {
         MarkChildren(trc, static_cast<JSObject *>(tenured));
         return;
     }
 #ifdef JS_ION
     JS_ASSERT(kind == JSTRACE_IONCODE);
     static_cast<ion::IonCode *>(tenured)->trace(trc);
 #else
-    MOZ_NOT_REACHED("Only objects can be in the wholeCellBuffer if IonMonkey is disabled.");
+    MOZ_ASSUME_NOT_REACHED("Only objects can be in the wholeCellBuffer if IonMonkey is disabled.");
 #endif
 }
 
 /*** MonoTypeBuffer ***/
 
 /* How full we allow a store buffer to become before we request a MinorGC. */
 const static double HighwaterRatio = 7.0 / 8.0;
 
--- a/js/src/ion/AsmJS.cpp
+++ b/js/src/ion/AsmJS.cpp
@@ -408,33 +408,31 @@ class Type
           case Unsigned:
           case Intish:
             return MIRType_Int32;
           case Void:
           case Unknown:
             return MIRType_None;
         }
         MOZ_ASSUME_NOT_REACHED("Invalid Type");
-        return MIRType_None;
     }
 
     const char *toChars() const {
         switch (which_) {
           case Double:    return "double";
           case Doublish:  return "doublish";
           case Fixnum:    return "fixnum";
           case Int:       return "int";
           case Signed:    return "signed";
           case Unsigned:  return "unsigned";
           case Intish:    return "intish";
           case Void:      return "void";
           case Unknown:   return "unknown";
         }
         MOZ_ASSUME_NOT_REACHED("Invalid Type");
-        return "";
     }
 };
 
 // Represents the subset of Type that can be used as the return type of a
 // function.
 class RetType
 {
   public:
@@ -464,42 +462,39 @@ class RetType
     }
     AsmJSModule::ReturnType toModuleReturnType() const {
         switch (which_) {
           case Void: return AsmJSModule::Return_Void;
           case Signed: return AsmJSModule::Return_Int32;
           case Double: return AsmJSModule::Return_Double;
         }
         MOZ_ASSUME_NOT_REACHED("Unexpected return type");
-        return AsmJSModule::Return_Void;
     }
     MIRType toMIRType() const {
         switch (which_) {
           case Void: return MIRType_None;
           case Signed: return MIRType_Int32;
           case Double: return MIRType_Double;
         }
         MOZ_ASSUME_NOT_REACHED("Unexpected return type");
-        return MIRType_None;
     }
     bool operator==(RetType rhs) const { return which_ == rhs.which_; }
     bool operator!=(RetType rhs) const { return which_ != rhs.which_; }
 };
 
 // Implements <: (subtype) operator when the rhs is an RetType
 static inline bool
 operator<=(Type lhs, RetType rhs)
 {
     switch (rhs.which()) {
       case RetType::Signed: return lhs.isSigned();
       case RetType::Double: return lhs == Type::Double;
       case RetType::Void:   return lhs == Type::Void;
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected rhs type");
-    return false;
 }
 
 // Represents the subset of Type that can be used as a variable or
 // argument's type. Note: AsmJSCoercion and VarType are kept separate to
 // make very clear the signed/int distinction: a coercion may explicitly sign
 // an *expression* but, when stored as a variable, this signedness information
 // is explicitly thrown away by the asm.js type system. E.g., in
 //
@@ -563,17 +558,16 @@ class VarType
 static inline bool
 operator<=(Type lhs, VarType rhs)
 {
     switch (rhs.which()) {
       case VarType::Int:    return lhs.isInt();
       case VarType::Double: return lhs.isDouble();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected rhs type");
-    return false;
 }
 
 // Passed from parent expressions to child expressions to indicate if and how
 // the child expression's result will be coerced. While most type checking
 // occurs bottom-up (with child expressions returning the type of the result
 // and parents checking these types), FFI calls naturally want to know the
 // parent's context to determine the appropriate result type. If a parent
 // passes NoCoercion to an FFI all, then the FFI's return type will be "Void"
@@ -767,17 +761,16 @@ TypedArrayLoadType(ArrayBufferView::View
       case ArrayBufferView::TYPE_UINT32:
         return Type::Intish;
       case ArrayBufferView::TYPE_FLOAT32:
       case ArrayBufferView::TYPE_FLOAT64:
         return Type::Doublish;
       default:;
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected array type");
-    return Type();
 }
 
 enum ArrayStoreEnum {
     ArrayStore_Intish,
     ArrayStore_Doublish
 };
 
 static ArrayStoreEnum
@@ -792,17 +785,16 @@ TypedArrayStoreType(ArrayBufferView::Vie
       case ArrayBufferView::TYPE_UINT32:
         return ArrayStore_Intish;
       case ArrayBufferView::TYPE_FLOAT32:
       case ArrayBufferView::TYPE_FLOAT64:
         return ArrayStore_Doublish;
       default:;
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected array type");
-    return ArrayStore_Doublish;
 }
 
 /*****************************************************************************/
 
 typedef Vector<PropertyName*,1> LabelVector;
 typedef Vector<MBasicBlock*,8> BlockVector;
 
 // ModuleCompiler encapsulates the compilation of an entire asm.js module. Over
@@ -3859,17 +3851,16 @@ IsValidIntMultiplyConstant(ParseNode *ex
         return false;
       case NumLit::BigUnsigned:
       case NumLit::Double:
       case NumLit::OutOfRangeInt:
         return false;
     }
 
     MOZ_ASSUME_NOT_REACHED("Bad literal");
-    return false;
 }
 
 static bool
 CheckMultiply(FunctionCompiler &f, ParseNode *star, MDefinition **def, Type *type)
 {
     JS_ASSERT(star->isKind(PNK_STAR));
     ParseNode *lhs = BinaryLeft(star);
     ParseNode *rhs = BinaryRight(star);
--- a/js/src/ion/BaselineFrameInfo.cpp
+++ b/js/src/ion/BaselineFrameInfo.cpp
@@ -44,17 +44,16 @@ FrameInfo::sync(StackValue *val)
       case StackValue::Register:
         masm.pushValue(val->reg());
         break;
       case StackValue::Constant:
         masm.pushValue(val->constant());
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid kind");
-        break;
     }
 
     val->setStack();
 }
 
 void
 FrameInfo::syncStack(uint32_t uses)
 {
--- a/js/src/ion/BaselineIC.cpp
+++ b/js/src/ion/BaselineIC.cpp
@@ -1432,17 +1432,16 @@ DoTypeUpdateFallback(JSContext *cx, Base
             id = NameToId(ScopeCoordinateName(cx, script, pc));
         else
             id = NameToId(script->getName(pc));
         types::AddTypePropertyId(cx, obj, id, value);
         break;
       }
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid stub");
-        return false;
     }
 
     return stub->addUpdateStubForValue(cx, script, obj, id, value);
 }
 
 typedef bool (*DoTypeUpdateFallbackFn)(JSContext *, BaselineFrame *, ICUpdatedStub *, HandleValue,
                                        HandleValue);
 const VMFunction DoTypeUpdateFallbackInfo =
@@ -2460,17 +2459,16 @@ DoBinaryArithFallback(JSContext *cx, Bas
       }
       case JSOP_URSH: {
         if (!UrshOperation(cx, script, pc, lhs, rhs, ret.address()))
             return false;
         break;
       }
       default:
         MOZ_ASSUME_NOT_REACHED("Unhandled baseline arith op");
-        return false;
     }
 
     if (ret.isDouble())
         stub->setSawDoubleResult();
 
     // Check to see if a new stub should be generated.
     if (stub->numOptimizedStubs() >= ICBinaryArith_Fallback::MAX_OPTIMIZED_STUBS) {
         // TODO: Discard all stubs in this IC and replace with inert megamorphic stub.
@@ -2779,17 +2777,16 @@ ICBinaryArith_Double::Compiler::generate
         masm.setupUnalignedABICall(2, R0.scratchReg());
         masm.passABIArg(FloatReg0);
         masm.passABIArg(FloatReg1);
         masm.callWithABI(JS_FUNC_TO_DATA_PTR(void *, NumberMod), MacroAssembler::DOUBLE);
         JS_ASSERT(ReturnFloatReg == FloatReg0);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return false;
     }
 
     masm.boxDouble(FloatReg0, R0);
     EmitReturnFromIC(masm);
 
     // Failure case - jump to next stub
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
@@ -2860,17 +2857,16 @@ ICBinaryArith_BooleanWithInt32::Compiler
       case JSOP_BITAND: {
         masm.andPtr(rhsReg, lhsReg);
         masm.tagValue(JSVAL_TYPE_INT32, lhsReg, R0);
         EmitReturnFromIC(masm);
         break;
       }
       default:
        MOZ_ASSUME_NOT_REACHED("Unhandled op for BinaryArith_BooleanWithInt32.");
-       return false;
     }
 
     // Failure case - jump to next stub
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
     return true;
 }
 
@@ -2923,17 +2919,16 @@ ICBinaryArith_DoubleWithInt32::Compiler:
       case JSOP_BITXOR:
         masm.xorPtr(intReg, intReg2);
         break;
       case JSOP_BITAND:
         masm.andPtr(intReg, intReg2);
         break;
       default:
        MOZ_ASSUME_NOT_REACHED("Unhandled op for BinaryArith_DoubleWithInt32.");
-       return false;
     }
     masm.tagValue(JSVAL_TYPE_INT32, intReg2, R0);
     EmitReturnFromIC(masm);
 
     // Failure case - jump to next stub
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
     return true;
@@ -2965,17 +2960,16 @@ DoUnaryArithFallback(JSContext *cx, Base
         break;
       }
       case JSOP_NEG:
         if (!NegOperation(cx, script, pc, val, res))
             return false;
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return false;
     }
 
     if (res.isDouble())
         stub->setSawDoubleResult();
 
     if (stub->numOptimizedStubs() >= ICUnaryArith_Fallback::MAX_OPTIMIZED_STUBS) {
         // TODO: Discard/replace stubs.
         return true;
--- a/js/src/ion/BaselineIC.h
+++ b/js/src/ion/BaselineIC.h
@@ -540,17 +540,16 @@ class ICStub
 
     static const char *KindString(Kind k) {
         switch(k) {
 #define DEF_KIND_STR(kindName) case kindName: return #kindName;
             IC_STUB_KIND_LIST(DEF_KIND_STR)
 #undef DEF_KIND_STR
           default:
             MOZ_ASSUME_NOT_REACHED("Invalid kind.");
-            return "INVALID_KIND";
         }
     }
 
     enum Trait {
         Regular             = 0x0,
         Fallback            = 0x1,
         Monitored           = 0x2,
         MonitoredFallback   = 0x3,
--- a/js/src/ion/BaselineJIT.cpp
+++ b/js/src/ion/BaselineJIT.cpp
@@ -486,17 +486,16 @@ BaselineScript::icEntryFromPCOffset(uint
         if (icEntry(i).isForOp())
             return icEntry(i);
     }
     for (size_t i = mid+1; i < numICEntries() && icEntry(i).pcOffset() == pcOffset; i++) {
         if (icEntry(i).isForOp())
             return icEntry(i);
     }
     MOZ_ASSUME_NOT_REACHED("Invalid PC offset for IC entry.");
-    return icEntry(mid);
 }
 
 ICEntry &
 BaselineScript::icEntryFromPCOffset(uint32_t pcOffset, ICEntry *prevLookedUpEntry)
 {
     // Do a linear forward search from the last queried PC offset, or fallback to a
     // binary search if the last offset is too far away.
     if (prevLookedUpEntry && pcOffset >= prevLookedUpEntry->pcOffset() &&
@@ -632,17 +631,16 @@ BaselineScript::nativeCodeForPC(JSScript
                 *slotInfo = PCMappingSlotInfo(b & ~0x80);
             return method_->raw() + nativeOffset;
         }
 
         curPC += GetBytecodeLength(curPC);
     }
 
     MOZ_ASSUME_NOT_REACHED("Invalid pc");
-    return NULL;
 }
 
 jsbytecode *
 BaselineScript::pcForReturnOffset(JSScript *script, uint32_t nativeOffset)
 {
     JS_ASSERT(script->baselineScript() == this);
     JS_ASSERT(nativeOffset < method_->instructionsSize());
 
@@ -677,17 +675,16 @@ BaselineScript::pcForReturnOffset(JSScri
 
         if (curNativeOffset == nativeOffset)
             return curPC;
 
         curPC += GetBytecodeLength(curPC);
     }
 
     MOZ_ASSUME_NOT_REACHED("Invalid pc");
-    return NULL;
 }
 
 jsbytecode *
 BaselineScript::pcForReturnAddress(JSScript *script, uint8_t *nativeAddress)
 {
     JS_ASSERT(script->baselineScript() == this);
     JS_ASSERT(nativeAddress >= method_->raw());
     JS_ASSERT(nativeAddress < method_->raw() + method_->instructionsSize());
--- a/js/src/ion/CodeGenerator.cpp
+++ b/js/src/ion/CodeGenerator.cpp
@@ -3584,17 +3584,16 @@ CodeGenerator::visitBinaryV(LBinaryV *li
       case JSOP_MOD:
         return callVM(ModInfo, lir);
 
       case JSOP_URSH:
         return callVM(UrshInfo, lir);
 
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected binary op");
-        return false;
     }
 }
 
 typedef bool (*StringCompareFn)(JSContext *, HandleString, HandleString, JSBool *);
 static const VMFunction stringsEqualInfo =
     FunctionInfo<StringCompareFn>(ion::StringsEqual<true>);
 static const VMFunction stringsNotEqualInfo =
     FunctionInfo<StringCompareFn>(ion::StringsEqual<false>);
@@ -3732,17 +3731,16 @@ CodeGenerator::visitCompareVM(LCompareVM
           case JSOP_GT:
             return callVM(GtInfo, lir);
 
           case JSOP_GE:
             return callVM(GeInfo, lir);
 
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected compare op");
-            return false;
         }
 
       case ParallelExecution:
         switch (lir->mir()->jsop()) {
           case JSOP_EQ:
             return callVM(ParLooselyEqInfo, lir);
 
           case JSOP_STRICTEQ:
@@ -3763,17 +3761,16 @@ CodeGenerator::visitCompareVM(LCompareVM
           case JSOP_GT:
             return callVM(ParGtInfo, lir);
 
           case JSOP_GE:
             return callVM(ParGeInfo, lir);
 
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected compare op");
-            return false;
         }
     }
 
     MOZ_ASSUME_NOT_REACHED("Unexpected exec mode");
 }
 
 bool
 CodeGenerator::visitIsNullOrLikeUndefined(LIsNullOrLikeUndefined *lir)
@@ -6068,17 +6065,16 @@ CodeGenerator::visitBitOpV(LBitOpV *lir)
       case JSOP_LSH:
         return callVM(BitLhsInfo, lir);
       case JSOP_RSH:
         return callVM(BitRhsInfo, lir);
       default:
         break;
     }
     MOZ_ASSUME_NOT_REACHED("unexpected bitop");
-    return false;
 }
 
 class OutOfLineTypeOfV : public OutOfLineCodeBase<CodeGenerator>
 {
     LTypeOfV *ins_;
 
   public:
     OutOfLineTypeOfV(LTypeOfV *ins)
--- a/js/src/ion/CompactBuffer.h
+++ b/js/src/ion/CompactBuffer.h
@@ -38,17 +38,16 @@ class CompactBufferReader
             JS_ASSERT(shift < 32);
             byte = readByte();
             val |= (uint32_t(byte) >> 1) << shift;
             shift += 7;
             if (!(byte & 1))
                 return val;
         }
         MOZ_ASSUME_NOT_REACHED("unreachable");
-        return 0;
     }
 
   public:
     CompactBufferReader(const uint8_t *start, const uint8_t *end)
       : buffer_(start),
         end_(end)
     { }
     inline CompactBufferReader(const CompactBufferWriter &writer);
--- a/js/src/ion/ExecutionModeInlines.h
+++ b/js/src/ion/ExecutionModeInlines.h
@@ -15,28 +15,26 @@ namespace ion {
 static inline bool
 HasIonScript(JSScript *script, ExecutionMode cmode)
 {
     switch (cmode) {
       case SequentialExecution: return script->hasIonScript();
       case ParallelExecution: return script->hasParallelIonScript();
     }
     MOZ_ASSUME_NOT_REACHED("No such execution mode");
-    return false;
 }
 
 static inline IonScript *
 GetIonScript(JSScript *script, ExecutionMode cmode)
 {
     switch (cmode) {
       case SequentialExecution: return script->maybeIonScript();
       case ParallelExecution: return script->maybeParallelIonScript();
     }
     MOZ_ASSUME_NOT_REACHED("No such execution mode");
-    return NULL;
 }
 
 static inline void
 SetIonScript(JSScript *script, ExecutionMode cmode, IonScript *ionScript)
 {
     switch (cmode) {
       case SequentialExecution: script->setIonScript(ionScript); return;
       case ParallelExecution: script->setParallelIonScript(ionScript); return;
@@ -74,39 +72,36 @@ CanIonCompile(JSFunction *fun, Execution
 static inline bool
 CompilingOffThread(JSScript *script, ExecutionMode cmode)
 {
     switch (cmode) {
       case SequentialExecution: return script->isIonCompilingOffThread();
       case ParallelExecution: return script->isParallelIonCompilingOffThread();
     }
     MOZ_ASSUME_NOT_REACHED("No such execution mode");
-    return false;
 }
 
 static inline bool
 CompilingOffThread(HandleScript script, ExecutionMode cmode)
 {
     switch (cmode) {
       case SequentialExecution: return script->isIonCompilingOffThread();
       case ParallelExecution: return script->isParallelIonCompilingOffThread();
     }
     MOZ_ASSUME_NOT_REACHED("No such execution mode");
-    return false;
 }
 
 static inline types::CompilerOutput::Kind
 CompilerOutputKind(ExecutionMode cmode)
 {
     switch (cmode) {
       case SequentialExecution: return types::CompilerOutput::Ion;
       case ParallelExecution: return types::CompilerOutput::ParallelIon;
     }
     MOZ_ASSUME_NOT_REACHED("No such execution mode");
-    return types::CompilerOutput::Ion;
 }
 
 } // namespace ion
 } // namespace js
 
 #endif  // JS_ION
 
 #endif /* ion_ExecutionModeInlines_h */
--- a/js/src/ion/FixedArityList.h
+++ b/js/src/ion/FixedArityList.h
@@ -31,22 +31,18 @@ class FixedArityList
 };
 
 template <typename T>
 class FixedArityList<T, 0>
 {
   public:
     T &operator [](size_t index) {
         MOZ_ASSUME_NOT_REACHED("no items");
-        static T *operand = NULL;
-        return *operand;
     }
     const T &operator [](size_t index) const {
         MOZ_ASSUME_NOT_REACHED("no items");
-        static T *operand = NULL;
-        return *operand;
     }
 };
 
 } // namespace ion
 } // namespace js
 
 #endif /* ion_FixedArityList_h */
--- a/js/src/ion/Ion.cpp
+++ b/js/src/ion/Ion.cpp
@@ -815,32 +815,30 @@ IonScript::getSafepointIndex(uint32_t di
             guessDisp = table[guess].displacement();
             JS_ASSERT(guessDisp <= disp);
             if (guessDisp == disp)
                 return &table[guess];
         }
     }
 
     MOZ_ASSUME_NOT_REACHED("displacement not found.");
-    return NULL;
 }
 
 const OsiIndex *
 IonScript::getOsiIndex(uint32_t disp) const
 {
     for (const OsiIndex *it = osiIndices(), *end = osiIndices() + osiIndexEntries_;
          it != end;
          ++it)
     {
         if (it->returnPointDisplacement() == disp)
             return it;
     }
 
     MOZ_ASSUME_NOT_REACHED("Failed to find OSI point return address");
-    return NULL;
 }
 
 const OsiIndex *
 IonScript::getOsiIndex(uint8_t *retAddr) const
 {
     IonSpew(IonSpew_Invalidate, "IonScript %p has method %p raw %p", (void *) this, (void *)
             method(), method()->raw());
 
@@ -2001,17 +1999,16 @@ InvalidateActivation(FreeOp *fop, uint8_
             IonSpew(IonSpew_Invalidate, "#%d baseline stub frame @ %p", frameno, it.fp());
             break;
           case IonFrame_Rectifier:
             IonSpew(IonSpew_Invalidate, "#%d rectifier frame @ %p", frameno, it.fp());
             break;
           case IonFrame_Unwound_OptimizedJS:
           case IonFrame_Unwound_BaselineStub:
             MOZ_ASSUME_NOT_REACHED("invalid");
-            break;
           case IonFrame_Unwound_Rectifier:
             IonSpew(IonSpew_Invalidate, "#%d unwound rectifier frame @ %p", frameno, it.fp());
             break;
           case IonFrame_Osr:
             IonSpew(IonSpew_Invalidate, "#%d osr frame @ %p", frameno, it.fp());
             break;
           case IonFrame_Entry:
             IonSpew(IonSpew_Invalidate, "#%d entry frame @ %p", frameno, it.fp());
--- a/js/src/ion/IonAnalysis.cpp
+++ b/js/src/ion/IonAnalysis.cpp
@@ -566,17 +566,16 @@ TypeAnalyzer::replaceRedundantPhi(MPhi *
       case MIRType_Null:
         v = NullValue();
         break;
       case MIRType_Magic:
         v = MagicValue(JS_OPTIMIZED_ARGUMENTS);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return;
     }
     MConstant *c = MConstant::New(v);
     // The instruction pass will insert the box
     block->insertBefore(*(block->begin()), c);
     phi->replaceAllUsesWith(c);
 }
 
 bool
--- a/js/src/ion/IonBuilder.cpp
+++ b/js/src/ion/IonBuilder.cpp
@@ -1100,29 +1100,27 @@ IonBuilder::snoopControlFlow(JSOp op)
           case SRC_WHILE:
           case SRC_FOR_IN:
             // while (cond) { }
             return whileOrForInLoop(sn);
 
           default:
             // Hard assert for now - make an error later.
             MOZ_ASSUME_NOT_REACHED("unknown goto case");
-            break;
         }
         break;
       }
 
       case JSOP_TABLESWITCH:
         return tableSwitch(op, info().getNote(cx, pc));
 
       case JSOP_IFNE:
         // We should never reach an IFNE, it's a stopAt point, which will
         // trigger closing the loop.
         MOZ_ASSUME_NOT_REACHED("we should never reach an ifne!");
-        return ControlStatus_Error;
 
       default:
         break;
     }
     return ControlStatus_None;
 }
 
 bool
@@ -1401,17 +1399,16 @@ IonBuilder::inspectOpcode(JSOp op)
         return pushConstant(Int32Value(GET_UINT24(pc)));
 
       case JSOP_INT32:
         return pushConstant(Int32Value(GET_INT32(pc)));
 
       case JSOP_LOOPHEAD:
         // JSOP_LOOPHEAD is handled when processing the loop header.
         MOZ_ASSUME_NOT_REACHED("JSOP_LOOPHEAD outside loop");
-        return true;
 
       case JSOP_GETELEM:
       case JSOP_CALLELEM:
         return jsop_getelem();
 
       case JSOP_SETELEM:
         return jsop_setelem();
 
@@ -1603,17 +1600,16 @@ IonBuilder::processCfgEntry(CFGState &st
         return processAndOrEnd(state);
 
       case CFGState::LABEL:
         return processLabelEnd(state);
 
       default:
         MOZ_ASSUME_NOT_REACHED("unknown cfgstate");
     }
-    return ControlStatus_Error;
 }
 
 IonBuilder::ControlStatus
 IonBuilder::processIfEnd(CFGState &state)
 {
     if (current) {
         // Here, the false block is the join point. Create an edge from the
         // current block to the false block. Note that a RETURN opcode
@@ -2251,17 +2247,16 @@ IonBuilder::processSwitchBreak(JSOp op)
       case CFGState::TABLE_SWITCH:
         breaks = &state.tableswitch.breaks;
         break;
       case CFGState::COND_SWITCH_BODY:
         breaks = &state.condswitch.breaks;
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected switch state.");
-        return ControlStatus_Error;
     }
 
     *breaks = new DeferredEdge(current, *breaks);
 
     setCurrent(NULL);
     pc += js_CodeSpec[op].length;
     return processControlEnd();
 }
@@ -2328,17 +2323,16 @@ IonBuilder::maybeLoop(JSOp op, jssrcnote
             // for (; ; update?)
             if (SN_TYPE(sn) == SRC_FOR)
                 return forLoop(op, sn);
         }
         break;
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected opcode");
-        return ControlStatus_Error;
     }
 
     return ControlStatus_None;
 }
 
 void
 IonBuilder::assertValidLoopHeadOp(jsbytecode *pc)
 {
@@ -2359,17 +2353,16 @@ IonBuilder::assertValidLoopHeadOp(jsbyte
         jsbytecode *expected_ifne;
         switch (state.state) {
           case CFGState::DO_WHILE_LOOP_BODY:
             expected_ifne = state.loop.updateEnd;
             break;
 
           default:
             MOZ_ASSUME_NOT_REACHED("JSOP_LOOPHEAD unexpected source note");
-            return;
         }
 
         // Make sure this loop goes to the same ifne as the loop header's
         // source notes or GOTO.
         JS_ASSERT(ifne == expected_ifne);
     } else {
         JS_ASSERT(state.state != CFGState::DO_WHILE_LOOP_BODY);
     }
@@ -3142,17 +3135,16 @@ IonBuilder::jsop_ifeq(JSOp op)
 
         if (!cfgStack_.append(CFGState::IfElse(trueEnd, falseEnd, ifFalse)))
             return false;
         break;
       }
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected source note type");
-        break;
     }
 
     // Switch to parsing the true branch. Note that no PC update is needed,
     // it's the next instruction.
     setCurrentAndSpecializePhis(ifTrue);
 
     return true;
 }
@@ -3172,17 +3164,16 @@ IonBuilder::processReturn(JSOp op)
         current->add(ins);
         def = ins;
         break;
       }
 
       default:
         def = NULL;
         MOZ_ASSUME_NOT_REACHED("unknown return op");
-        break;
     }
 
     if (instrumentedProfiling())
         current->add(MFunctionBoundary::New(script(), MFunctionBoundary::Exit));
     MReturn *ret = MReturn::New(def);
     current->end(ret);
 
     if (!graph().addExit(current))
@@ -3262,17 +3253,16 @@ IonBuilder::jsop_bitop(JSOp op)
         break;
 
       case JSOP_URSH:
         ins = MUrsh::New(left, right);
         break;
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected bitop");
-        return false;
     }
 
     current->add(ins);
     ins->infer(inspector, pc);
 
     current->push(ins);
     if (ins->isEffectful() && !resumeAfter(ins))
         return false;
@@ -3320,17 +3310,16 @@ IonBuilder::jsop_binary(JSOp op, MDefini
         break;
 
       case JSOP_MOD:
         ins = MMod::New(left, right);
         break;
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected binary opcode");
-        return false;
     }
 
     bool overflowed = types::HasOperationOverflowed(script(), pc);
 
     current->add(ins);
     ins->infer(inspector, pc, overflowed);
     current->push(ins);
 
@@ -6083,17 +6072,16 @@ ion::TypeSetIncludes(types::TypeSet *typ
       case MIRType_Object:
         return types->unknownObject() || (inputTypes && inputTypes->isSubset(types));
 
       case MIRType_Value:
         return types->unknown() || (inputTypes && inputTypes->isSubset(types));
 
       default:
         MOZ_ASSUME_NOT_REACHED("Bad input type");
-        return false;
     }
 }
 
 // Whether a write of the given value may need a post-write barrier for GC purposes.
 bool
 ion::NeedsPostBarrier(CompileInfo &info, MDefinition *value)
 {
     return info.executionMode() != ParallelExecution && value->mightBeType(MIRType_Object);
@@ -6592,17 +6580,16 @@ IonBuilder::jsop_getelem_typed(int array
             knownType = allowDouble ? MIRType_Double : MIRType_Int32;
             break;
           case TypedArray::TYPE_FLOAT32:
           case TypedArray::TYPE_FLOAT64:
             knownType = MIRType_Double;
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Unknown typed array type");
-            return false;
         }
 
         // Get the length.
         MInstruction *length = getTypedArrayLength(obj);
         current->add(length);
 
         // Bounds check.
         id = addBoundsCheck(id, length);
@@ -6639,17 +6626,16 @@ IonBuilder::jsop_getelem_typed(int array
             break;
           case TypedArray::TYPE_FLOAT32:
           case TypedArray::TYPE_FLOAT64:
             if (allowDouble)
                 needsBarrier = false;
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Unknown typed array type");
-            return false;
         }
 
         // Assume we will read out-of-bound values. In this case the
         // bounds check will be part of the instruction, and the instruction
         // will always return a Value.
         MLoadTypedArrayElementHole *load =
             MLoadTypedArrayElementHole::New(obj, id, arrayType, allowDouble);
         current->add(load);
--- a/js/src/ion/IonCaches.cpp
+++ b/js/src/ion/IonCaches.cpp
@@ -2829,18 +2829,17 @@ IsCacheableScopeChain(JSObject *scopeCha
 
         scopeChain = &scopeChain->as<ScopeObject>().enclosingScope();
         if (!scopeChain) {
             IonSpew(IonSpew_InlineCaches, "Scope chain indirect hit");
             return false;
         }
     }
 
-    MOZ_ASSUME_NOT_REACHED("Shouldn't get here");
-    return false;
+    MOZ_ASSUME_NOT_REACHED();
 }
 
 JSObject *
 BindNameIC::update(JSContext *cx, size_t cacheIndex, HandleObject scopeChain)
 {
     AutoFlushCache afc ("BindNameCache");
 
     IonScript *ion = GetTopIonJSScript(cx)->ionScript();
--- a/js/src/ion/IonCaches.h
+++ b/js/src/ion/IonCaches.h
@@ -33,18 +33,17 @@ namespace ion {
 IONCACHE_KIND_LIST(FORWARD_DECLARE)
 #undef FORWARD_DECLARE
 
 class IonCacheVisitor
 {
   public:
 #define VISIT_INS(op)                                               \
     virtual bool visit##op##IC(CodeGenerator *codegen, op##IC *) {  \
-        MOZ_ASSUME_NOT_REACHED("NYI: " #op "IC");                           \
-        return false;                                               \
+        MOZ_ASSUME_NOT_REACHED("NYI: " #op "IC");                   \
     }
 
     IONCACHE_KIND_LIST(VISIT_INS)
 #undef VISIT_INS
 };
 
 // Common shared temporary state needed during codegen between the different
 // kinds of caches. Used by OutOfLineUpdateCache.
--- a/js/src/ion/IonFrames-inl.h
+++ b/js/src/ion/IonFrames-inl.h
@@ -44,17 +44,16 @@ SizeOfFramePrefix(FrameType type)
         return IonUnwoundRectifierFrameLayout::Size();
       case IonFrame_Exit:
         return IonExitFrameLayout::Size();
       case IonFrame_Osr:
         return IonOsrFrameLayout::Size();
       default:
         MOZ_ASSUME_NOT_REACHED("unknown frame type");
     }
-    return 0;
 }
 
 inline IonCommonFrameLayout *
 IonFrameIterator::current() const
 {
     return (IonCommonFrameLayout *)current_;
 }
 
--- a/js/src/ion/IonFrames.cpp
+++ b/js/src/ion/IonFrames.cpp
@@ -773,17 +773,16 @@ JitActivationIterator::jitStackRange(uin
     } else {
         IonExitFrameLayout *exitFrame = frames.exitFrame();
         IonExitFooterFrame *footer = exitFrame->footer();
         const VMFunction *f = footer->function();
         if (exitFrame->isWrapperExit() && f->outParam == Type_Handle) {
             switch (f->outParamRootType) {
               case VMFunction::RootNone:
                 MOZ_ASSUME_NOT_REACHED("Handle outparam must have root type");
-                break;
               case VMFunction::RootObject:
               case VMFunction::RootString:
               case VMFunction::RootPropertyName:
               case VMFunction::RootFunction:
               case VMFunction::RootCell:
                 // These are all handles to GCThing pointers.
                 min = reinterpret_cast<uintptr_t *>(footer->outParam<void *>());
                 break;
@@ -916,17 +915,16 @@ MarkIonExitFrame(JSTracer *trc, const Io
             break;
         }
     }
 
     if (f->outParam == Type_Handle) {
         switch (f->outParamRootType) {
           case VMFunction::RootNone:
             MOZ_ASSUME_NOT_REACHED("Handle outparam must have root type");
-            break;
           case VMFunction::RootObject:
             gc::MarkObjectRoot(trc, footer->outParam<JSObject *>(), "ion-vm-out");
             break;
           case VMFunction::RootString:
           case VMFunction::RootPropertyName:
             gc::MarkStringRoot(trc, footer->outParam<JSString *>(), "ion-vm-out");
             break;
           case VMFunction::RootFunction:
@@ -956,28 +954,26 @@ MarkJitActivation(JSTracer *trc, const J
           case IonFrame_BaselineStub:
             MarkBaselineStubFrame(trc, frames);
             break;
           case IonFrame_OptimizedJS:
             MarkIonJSFrame(trc, frames);
             break;
           case IonFrame_Unwound_OptimizedJS:
             MOZ_ASSUME_NOT_REACHED("invalid");
-            break;
           case IonFrame_Rectifier:
           case IonFrame_Unwound_Rectifier:
             break;
           case IonFrame_Osr:
             // The callee token will be marked by the callee JS frame;
             // otherwise, it does not need to be marked, since the frame is
             // dead.
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("unexpected frame type");
-            break;
         }
     }
 }
 
 void
 MarkJitActivations(JSRuntime *rt, JSTracer *trc)
 {
     for (JitActivationIterator activations(rt); !activations.done(); ++activations)
@@ -1110,17 +1106,16 @@ SnapshotIterator::FromTypedPayload(JSVal
       case JSVAL_TYPE_BOOLEAN:
         return BooleanValue(!!payload);
       case JSVAL_TYPE_STRING:
         return StringValue(reinterpret_cast<JSString *>(payload));
       case JSVAL_TYPE_OBJECT:
         return ObjectValue(*reinterpret_cast<JSObject *>(payload));
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected type - needs payload");
-        return UndefinedValue();
     }
 }
 
 bool
 SnapshotIterator::slotReadable(const Slot &slot)
 {
     switch (slot.mode()) {
       case SnapshotReader::DOUBLE_REG:
@@ -1180,17 +1175,16 @@ SnapshotIterator::slotValue(const Slot &
       case SnapshotReader::JS_INT32:
         return Int32Value(slot.int32Value());
 
       case SnapshotReader::CONSTANT:
         return ionScript_->getConstant(slot.constantIndex());
 
       default:
         MOZ_ASSUME_NOT_REACHED("huh?");
-        return UndefinedValue();
     }
 }
 
 IonScript *
 IonFrameIterator::ionScript() const
 {
     JS_ASSERT(type() == IonFrame_OptimizedJS);
 
--- a/js/src/ion/IonFrames.h
+++ b/js/src/ion/IonFrames.h
@@ -86,17 +86,16 @@ ScriptFromCalleeToken(CalleeToken token)
       case CalleeToken_Script:
         return CalleeTokenToScript(token);
       case CalleeToken_Function:
         return CalleeTokenToFunction(token)->nonLazyScript();
       case CalleeToken_ParallelFunction:
         return CalleeTokenToParallelFunction(token)->nonLazyScript();
     }
     MOZ_ASSUME_NOT_REACHED("invalid callee token tag");
-    return NULL;
 }
 
 // In between every two frames lies a small header describing both frames. This
 // header, minimally, contains a returnAddress word and a descriptor word. The
 // descriptor describes the size and type of the previous frame, whereas the
 // returnAddress describes the address the newer frame (the callee) will return
 // to. The exact mechanism in which frames are laid out is architecture
 // dependent.
--- a/js/src/ion/IonMacroAssembler.cpp
+++ b/js/src/ion/IonMacroAssembler.cpp
@@ -303,17 +303,16 @@ MacroAssembler::loadFromTypedArray(int a
         if (arrayType == js::TypedArray::TYPE_FLOAT32)
             loadFloatAsDouble(src, dest.fpu());
         else
             loadDouble(src, dest.fpu());
         canonicalizeDouble(dest.fpu());
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid typed array type");
-        break;
     }
 }
 
 template void MacroAssembler::loadFromTypedArray(int arrayType, const Address &src, AnyRegister dest,
                                                  Register temp, Label *fail);
 template void MacroAssembler::loadFromTypedArray(int arrayType, const BaseIndex &src, AnyRegister dest,
                                                  Register temp, Label *fail);
 
@@ -359,17 +358,16 @@ MacroAssembler::loadFromTypedArray(int a
         break;
       case TypedArray::TYPE_FLOAT32:
       case TypedArray::TYPE_FLOAT64:
         loadFromTypedArray(arrayType, src, AnyRegister(ScratchFloatReg), dest.scratchReg(), NULL);
         boxDouble(ScratchFloatReg, dest);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid typed array type");
-        break;
     }
 }
 
 template void MacroAssembler::loadFromTypedArray(int arrayType, const Address &src, const ValueOperand &dest,
                                                  bool allowDouble, Register temp, Label *fail);
 template void MacroAssembler::loadFromTypedArray(int arrayType, const BaseIndex &src, const ValueOperand &dest,
                                                  bool allowDouble, Register temp, Label *fail);
 
@@ -1253,17 +1251,16 @@ MacroAssembler::convertValueToInt32(Valu
 }
 
 void
 MacroAssembler::PushEmptyRooted(VMFunction::RootType rootType)
 {
     switch (rootType) {
       case VMFunction::RootNone:
         MOZ_ASSUME_NOT_REACHED("Handle must have root type");
-        break;
       case VMFunction::RootObject:
       case VMFunction::RootString:
       case VMFunction::RootPropertyName:
       case VMFunction::RootFunction:
       case VMFunction::RootCell:
         Push(ImmWord((void *)NULL));
         break;
       case VMFunction::RootValue:
@@ -1274,17 +1271,16 @@ MacroAssembler::PushEmptyRooted(VMFuncti
 
 void
 MacroAssembler::popRooted(VMFunction::RootType rootType, Register cellReg,
                           const ValueOperand &valueReg)
 {
     switch (rootType) {
       case VMFunction::RootNone:
         MOZ_ASSUME_NOT_REACHED("Handle must have root type");
-        break;
       case VMFunction::RootObject:
       case VMFunction::RootString:
       case VMFunction::RootPropertyName:
       case VMFunction::RootFunction:
       case VMFunction::RootCell:
         Pop(cellReg);
         break;
       case VMFunction::RootValue:
--- a/js/src/ion/IonMacroAssembler.h
+++ b/js/src/ion/IonMacroAssembler.h
@@ -542,33 +542,31 @@ class MacroAssembler : public MacroAssem
             store16(value, dest);
             break;
           case TypedArray::TYPE_INT32:
           case TypedArray::TYPE_UINT32:
             store32(value, dest);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Invalid typed array type");
-            break;
         }
     }
 
     template<typename S, typename T>
     void storeToTypedFloatArray(int arrayType, const S &value, const T &dest) {
         switch (arrayType) {
           case TypedArray::TYPE_FLOAT32:
             convertDoubleToFloat(value, ScratchFloatReg);
             storeFloat(ScratchFloatReg, dest);
             break;
           case TypedArray::TYPE_FLOAT64:
             storeDouble(value, dest);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Invalid typed array type");
-            break;
         }
     }
 
     Register extractString(const Address &address, Register scratch) {
         return extractObject(address, scratch);
     }
     Register extractString(const ValueOperand &value, Register scratch) {
         return extractObject(value, scratch);
@@ -942,17 +940,16 @@ JSOpToDoubleCondition(JSOp op)
       case JSOP_LE:
         return Assembler::DoubleLessThanOrEqual;
       case JSOP_GT:
         return Assembler::DoubleGreaterThan;
       case JSOP_GE:
         return Assembler::DoubleGreaterThanOrEqual;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected comparison operation");
-        return Assembler::DoubleEqual;
     }
 }
 
 // Note: the op may have been inverted during lowering (to put constants in a
 // position where they can be immediates), so it is important to use the
 // lir->jsop() instead of the mir->jsop() when it is present.
 static inline Assembler::Condition
 JSOpToCondition(JSOp op, bool isSigned)
@@ -970,17 +967,16 @@ JSOpToCondition(JSOp op, bool isSigned)
           case JSOP_LE:
             return Assembler::LessThanOrEqual;
           case JSOP_GT:
             return Assembler::GreaterThan;
           case JSOP_GE:
             return Assembler::GreaterThanOrEqual;
           default:
             MOZ_ASSUME_NOT_REACHED("Unrecognized comparison operation");
-            return Assembler::Equal;
         }
     } else {
         switch (op) {
           case JSOP_EQ:
           case JSOP_STRICTEQ:
             return Assembler::Equal;
           case JSOP_NE:
           case JSOP_STRICTNE:
@@ -990,17 +986,16 @@ JSOpToCondition(JSOp op, bool isSigned)
           case JSOP_LE:
             return Assembler::BelowOrEqual;
           case JSOP_GT:
             return Assembler::Above;
           case JSOP_GE:
             return Assembler::AboveOrEqual;
           default:
             MOZ_ASSUME_NOT_REACHED("Unrecognized comparison operation");
-            return Assembler::Equal;
         }
     }
 }
 
 typedef Vector<MIRType, 8> MIRTypeVector;
 
 class ABIArgIter
 {
--- a/js/src/ion/IonTypes.h
+++ b/js/src/ion/IonTypes.h
@@ -64,17 +64,16 @@ BailoutKindString(BailoutKind kind)
         return "Bailout_BoundsCheck";
       case Bailout_ShapeGuard:
         return "Bailout_ShapeGuard";
       case Bailout_CachedShapeGuard:
         return "Bailout_CachedShapeGuard";
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid BailoutKind");
     }
-    return "INVALID_BAILOUT_KIND";
 }
 #endif
 
 // The ordering of this enumeration is important: Anything < Value is a
 // specialized type. Furthermore, anything < String has trivial conversion to
 // a number.
 enum MIRType
 {
@@ -114,17 +113,16 @@ MIRTypeFromValueType(JSValueType type)
       case JSVAL_TYPE_OBJECT:
         return MIRType_Object;
       case JSVAL_TYPE_MAGIC:
         return MIRType_Magic;
       case JSVAL_TYPE_UNKNOWN:
         return MIRType_Value;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected jsval type");
-        return MIRType_None;
     }
 }
 
 static inline JSValueType
 ValueTypeFromMIRType(MIRType type)
 {
   switch (type) {
     case MIRType_Undefined:
@@ -182,17 +180,16 @@ StringFromMIRType(MIRType type)
     case MIRType_Elements:
       return "Elements";
     case MIRType_Pointer:
       return "Pointer";
     case MIRType_ForkJoinSlice:
       return "ForkJoinSlice";
     default:
       MOZ_ASSUME_NOT_REACHED("Unknown MIRType.");
-      return "";
   }
 }
 
 static inline bool
 IsNumberType(MIRType type)
 {
     return type == MIRType_Int32 || type == MIRType_Double;
 }
--- a/js/src/ion/LIR-Common.h
+++ b/js/src/ion/LIR-Common.h
@@ -4476,27 +4476,25 @@ class LPhi : public LInstruction
         JS_ASSERT(index < numOperands());
         inputs_[index] = a;
     }
     size_t numTemps() const {
         return 0;
     }
     LDefinition *getTemp(size_t index) {
         MOZ_ASSUME_NOT_REACHED("no temps");
-        return NULL;
     }
     void setTemp(size_t index, const LDefinition &temp) {
         MOZ_ASSUME_NOT_REACHED("no temps");
     }
     size_t numSuccessors() const {
         return 0;
     }
     MBasicBlock *getSuccessor(size_t i) const {
         MOZ_ASSUME_NOT_REACHED("no successors");
-        return NULL;
     }
     void setSuccessor(size_t i, MBasicBlock *) {
         MOZ_ASSUME_NOT_REACHED("no successors");
     }
 
     virtual void printInfo(FILE *fp) {
         printOperands(fp);
     }
@@ -4798,17 +4796,16 @@ class LAsmJSCall : public LInstruction
     void setTemp(size_t index, const LDefinition &a) {
         MOZ_ASSUME_NOT_REACHED("no temps");
     }
     size_t numSuccessors() const {
         return 0;
     }
     MBasicBlock *getSuccessor(size_t i) const {
         MOZ_ASSUME_NOT_REACHED("no successors");
-        return NULL;
     }
     void setSuccessor(size_t i, MBasicBlock *) {
         MOZ_ASSUME_NOT_REACHED("no successors");
     }
 };
 
 class LAsmJSCheckOverRecursed : public LInstructionHelper<0, 0, 0>
 {
--- a/js/src/ion/LIR.cpp
+++ b/js/src/ion/LIR.cpp
@@ -266,17 +266,16 @@ LAllocation::toString() const
       case LAllocation::DOUBLE_ARGUMENT:
         JS_snprintf(buf, sizeof(buf), "arg:%d", toArgument()->index());
         return buf;
       case LAllocation::USE:
         PrintUse(buf, sizeof(buf), toUse());
         return buf;
       default:
         MOZ_ASSUME_NOT_REACHED("what?");
-        return "???";
     }
 }
 #endif // DEBUG
 
 void
 LInstruction::printOperands(FILE *fp)
 {
     for (size_t i = 0; i < numOperands(); i++) {
--- a/js/src/ion/LIR.h
+++ b/js/src/ion/LIR.h
@@ -546,17 +546,16 @@ class LDefinition
             // need to change to ::OBJECT.
             return LDefinition::GENERAL;
           case MIRType_Pointer:
             return LDefinition::GENERAL;
           case MIRType_ForkJoinSlice:
             return LDefinition::GENERAL;
           default:
             MOZ_ASSUME_NOT_REACHED("unexpected type");
-            return LDefinition::GENERAL;
         }
     }
 };
 
 // Forward declarations of LIR types.
 #define LIROP(op) class L##op;
     LIR_OPCODE_LIST(LIROP)
 #undef LIROP
@@ -712,17 +711,17 @@ class LInstructionVisitor
     }
 
     LInstructionVisitor()
       : ins_(NULL),
         lastPC_(NULL)
     {}
 
   public:
-#define VISIT_INS(op) virtual bool visit##op(L##op *) { MOZ_ASSUME_NOT_REACHED("NYI: " #op); return false; }
+#define VISIT_INS(op) virtual bool visit##op(L##op *) { MOZ_ASSUME_NOT_REACHED("NYI: " #op); }
     LIR_OPCODE_LIST(VISIT_INS)
 #undef VISIT_INS
 };
 
 typedef InlineList<LInstruction>::iterator LInstructionIterator;
 typedef InlineList<LInstruction>::reverse_iterator LInstructionReverseIterator;
 
 class LPhi;
--- a/js/src/ion/LiveRangeAllocator.cpp
+++ b/js/src/ion/LiveRangeAllocator.cpp
@@ -26,17 +26,16 @@ Requirement::priority() const
       case Requirement::REGISTER:
         return 1;
 
       case Requirement::NONE:
         return 2;
 
       default:
         MOZ_ASSUME_NOT_REACHED("Unknown requirement kind.");
-        return -1;
     }
 }
 
 bool
 LiveInterval::Range::contains(const Range *other) const
 {
     Range pre, inside, post;
     intersect(other, &pre, &inside, &post);
--- a/js/src/ion/LiveRangeAllocator.h
+++ b/js/src/ion/LiveRangeAllocator.h
@@ -114,17 +114,16 @@ UseCompatibleWith(const LUse *use, LAllo
         return alloc.isRegister();
       case LUse::FIXED:
           // Fixed uses are handled using fixed intervals. The
           // UsePosition is only used as hint.
         return alloc.isRegister();
       default:
         MOZ_ASSUME_NOT_REACHED("Unknown use policy");
     }
-    return false;
 }
 
 #ifdef DEBUG
 
 static inline bool
 DefinitionCompatibleWith(LInstruction *ins, const LDefinition *def, LAllocation alloc)
 {
     if (ins->isPhi()) {
@@ -144,17 +143,16 @@ DefinitionCompatibleWith(LInstruction *i
         if (!alloc.isRegister() || !ins->numOperands())
             return false;
         return alloc == *ins->getOperand(def->getReusedInput());
       case LDefinition::PASSTHROUGH:
         return true;
       default:
         MOZ_ASSUME_NOT_REACHED("Unknown definition policy");
     }
-    return false;
 }
 
 #endif // DEBUG
 
 static inline LDefinition *
 FindReusingDefinition(LInstruction *ins, LAllocation *alloc)
 {
     for (size_t i = 0; i < ins->numDefs(); i++) {
--- a/js/src/ion/Lowering.cpp
+++ b/js/src/ion/Lowering.cpp
@@ -839,17 +839,16 @@ LIRGenerator::visitCompare(MCompare *com
         if (!useBoxAtStart(lir, LCompareV::LhsInput, left))
             return false;
         if (!useBoxAtStart(lir, LCompareV::RhsInput, right))
             return false;
         return define(lir, comp);
     }
 
     MOZ_ASSUME_NOT_REACHED("Unrecognized compare type.");
-    return false;
 }
 
 static void
 ReorderCommutative(MDefinition **lhsp, MDefinition **rhsp)
 {
     MDefinition *lhs = *lhsp;
     MDefinition *rhs = *rhsp;
 
@@ -1448,17 +1447,16 @@ LIRGenerator::visitToDouble(MToDouble *c
 
       case MIRType_Double:
         return redefine(convert, opd);
 
       default:
         // Objects might be effectful.
         // Strings are complicated - we don't handle them yet.
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitToInt32(MToInt32 *convert)
 {
     MDefinition *opd = convert->input();
 
@@ -1495,17 +1493,16 @@ LIRGenerator::visitToInt32(MToInt32 *con
         return false;
 
       case MIRType_Undefined:
         IonSpew(IonSpew_Abort, "Undefined coerces to NaN, not int32_t.");
         return false;
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitTruncateToInt32(MTruncateToInt32 *truncate)
 {
     MDefinition *opd = truncate->input();
 
@@ -1528,31 +1525,29 @@ LIRGenerator::visitTruncateToInt32(MTrun
 
       case MIRType_Double:
         return lowerTruncateDToInt32(truncate);
 
       default:
         // Objects might be effectful.
         // Strings are complicated - we don't handle them yet.
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitToString(MToString *ins)
 {
     MDefinition *opd = ins->input();
 
     switch (opd->type()) {
       case MIRType_Null:
       case MIRType_Undefined:
       case MIRType_Boolean:
         MOZ_ASSUME_NOT_REACHED("NYI: Lower MToString");
-        return false;
 
       case MIRType_Double: {
         LDoubleToString *lir = new LDoubleToString(useRegister(opd), temp());
 
         if (!define(lir, ins))
             return false;
         return assignSafepoint(lir, ins);
       }
@@ -1563,17 +1558,16 @@ LIRGenerator::visitToString(MToString *i
         if (!define(lir, ins))
             return false;
         return assignSafepoint(lir, ins);
       }
 
       default:
         // Objects might be effectful. (see ToPrimitive)
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitRegExp(MRegExp *ins)
 {
     LRegExp *lir = new LRegExp();
     return defineReturn(lir, ins) && assignSafepoint(lir, ins);
@@ -1657,17 +1651,16 @@ LIRGenerator::visitLoadSlot(MLoadSlot *i
 {
     switch (ins->type()) {
       case MIRType_Value:
         return defineBox(new LLoadSlotV(useRegister(ins->slots())), ins);
 
       case MIRType_Undefined:
       case MIRType_Null:
         MOZ_ASSUME_NOT_REACHED("typed load must have a payload");
-        return false;
 
       default:
         return define(new LLoadSlotT(useRegister(ins->slots())), ins);
     }
 }
 
 bool
 LIRGenerator::visitFunctionEnvironment(MFunctionEnvironment *ins)
@@ -1903,17 +1896,16 @@ LIRGenerator::visitNot(MNot *ins)
         LNotV *lir = new LNotV(tempFloat(), temp0, temp1);
         if (!useBox(lir, LNotV::Input, op))
             return false;
         return define(lir, ins);
       }
 
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected MIRType.");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitBoundsCheck(MBoundsCheck *ins)
 {
     LInstruction *check;
     if (ins->minimum() || ins->maximum()) {
@@ -1972,17 +1964,16 @@ LIRGenerator::visitLoadElement(MLoadElem
                                                useRegisterOrConstant(ins->index()));
         if (ins->fallible() && !assignSnapshot(lir))
             return false;
         return defineBox(lir, ins);
       }
       case MIRType_Undefined:
       case MIRType_Null:
         MOZ_ASSUME_NOT_REACHED("typed load must have a payload");
-        return false;
 
       default:
       {
         LLoadElementT *lir = new LLoadElementT(useRegister(ins->elements()),
                                                useRegisterOrConstant(ins->index()));
         if (ins->fallible() && !assignSnapshot(lir))
             return false;
         return define(lir, ins);
@@ -2079,17 +2070,16 @@ LIRGenerator::visitArrayPopShift(MArrayP
       case MIRType_Value:
       {
         LArrayPopShiftV *lir = new LArrayPopShiftV(object, temp(), temp());
         return defineBox(lir, ins) && assignSafepoint(lir, ins);
       }
       case MIRType_Undefined:
       case MIRType_Null:
         MOZ_ASSUME_NOT_REACHED("typed load must have a payload");
-        return false;
 
       default:
       {
         LArrayPopShiftT *lir = new LArrayPopShiftT(object, temp(), temp());
         return define(lir, ins) && assignSafepoint(lir, ins);
       }
     }
 }
@@ -2175,17 +2165,16 @@ LIRGenerator::visitClampToUint8(MClampTo
         LClampVToUint8 *lir = new LClampVToUint8(tempFloat());
         if (!useBox(lir, LClampVToUint8::Input, in))
             return false;
         return assignSnapshot(lir) && define(lir, ins);
       }
 
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        return false;
     }
 }
 
 bool
 LIRGenerator::visitLoadTypedArrayElementHole(MLoadTypedArrayElementHole *ins)
 {
     JS_ASSERT(ins->object()->type() == MIRType_Object);
     JS_ASSERT(ins->index()->type() == MIRType_Int32);
--- a/js/src/ion/MIR.cpp
+++ b/js/src/ion/MIR.cpp
@@ -112,17 +112,16 @@ EvaluateConstantOperands(MBinaryInstruct
       case MDefinition::Op_Div:
         ret.setNumber(NumberDiv(lhs.toNumber(), rhs.toNumber()));
         break;
       case MDefinition::Op_Mod:
         ret.setNumber(NumberMod(lhs.toNumber(), rhs.toNumber()));
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("NYI");
-        return NULL;
     }
 
     if (ins->type() != MIRTypeFromValue(ret)) {
         if (ptypeChange)
             *ptypeChange = true;
         return NULL;
     }
 
@@ -433,17 +432,16 @@ MConstant::printOpcode(FILE *fp)
       case MIRType_String:
         fprintf(fp, "string %p", (void *)value().toString());
         break;
       case MIRType_Magic:
         fprintf(fp, "magic");
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected type");
-        break;
     }
 }
 
 void
 MControlInstruction::printOpcode(FILE *fp)
 {
     MDefinition::printOpcode(fp);
     for (size_t j = 0; j < numSuccessors(); j++)
@@ -1482,17 +1480,16 @@ MCompare::inputType()
         return MIRType_String;
       case Compare_Object:
         return MIRType_Object;
       case Compare_Unknown:
       case Compare_Value:
         return MIRType_Value;
       default:
         MOZ_ASSUME_NOT_REACHED("No known conversion");
-        return MIRType_None;
     }
 }
 
 static inline bool
 MustBeUInt32(MDefinition *def, MDefinition **pwrapped)
 {
     if (def->isUrsh()) {
         *pwrapped = def->toUrsh()->getOperand(0);
@@ -1933,17 +1930,16 @@ MCompare::tryFold(bool *result)
           case MIRType_Int32:
           case MIRType_Double:
           case MIRType_String:
           case MIRType_Boolean:
             *result = (op == JSOP_NE || op == JSOP_STRICTNE);
             return true;
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected type");
-            return false;
         }
     }
 
     if (compareType_ == Compare_Boolean) {
         JS_ASSERT(op == JSOP_STRICTEQ || op == JSOP_STRICTNE);
         JS_ASSERT(rhs()->type() == MIRType_Boolean);
 
         switch (lhs()->type()) {
@@ -1955,20 +1951,18 @@ MCompare::tryFold(bool *result)
           case MIRType_Object:
           case MIRType_Null:
           case MIRType_Undefined:
             *result = (op == JSOP_STRICTNE);
             return true;
           case MIRType_Boolean:
             // Int32 specialization should handle this.
             MOZ_ASSUME_NOT_REACHED("Wrong specialization");
-            return false;
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected type");
-            return false;
         }
     }
 
     if (compareType_ == Compare_StrictString) {
         JS_ASSERT(op == JSOP_STRICTEQ || op == JSOP_STRICTNE);
         JS_ASSERT(rhs()->type() == MIRType_String);
 
         switch (lhs()->type()) {
@@ -1980,20 +1974,18 @@ MCompare::tryFold(bool *result)
           case MIRType_Object:
           case MIRType_Null:
           case MIRType_Undefined:
             *result = (op == JSOP_STRICTNE);
             return true;
           case MIRType_String:
             // Compare_String specialization should handle this.
             MOZ_ASSUME_NOT_REACHED("Wrong specialization");
-            return false;
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected type");
-            return false;
         }
     }
 
     return false;
 }
 
 bool
 MCompare::evaluateConstantOperands(bool *result)
@@ -2036,17 +2028,16 @@ MCompare::evaluateConstantOperands(bool 
             *result = (comp == 0);
             break;
           case JSOP_STRICTNE: // Fall through.
           case JSOP_NE:
             *result = (comp != 0);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected op.");
-            return false;
         }
 
         return true;
     }
 
     if (compareType_ == Compare_UInt32) {
         uint32_t lhsUint = uint32_t(lhs.toInt32());
         uint32_t rhsUint = uint32_t(rhs.toInt32());
@@ -2069,17 +2060,16 @@ MCompare::evaluateConstantOperands(bool 
             *result = (lhsUint == rhsUint);
             break;
           case JSOP_NE:
           case JSOP_STRICTNE:
             *result = (lhsUint != rhsUint);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Unexpected op.");
-            return false;
         }
 
         return true;
     }
 
     if (!lhs.isNumber() || !rhs.isNumber())
         return false;
 
--- a/js/src/ion/MIR.h
+++ b/js/src/ion/MIR.h
@@ -3455,17 +3455,16 @@ class MDiv : public MBinaryArithInstruct
     }
 
     MDefinition *foldsTo(bool useValueNumbers);
     void analyzeEdgeCasesForward();
     void analyzeEdgeCasesBackward();
 
     double getIdentity() {
         MOZ_ASSUME_NOT_REACHED("not used");
-        return 1;
     }
 
     bool canBeNegativeZero() {
         return canBeNegativeZero_;
     }
     void setCanBeNegativeZero(bool negativeZero) {
         canBeNegativeZero_ = negativeZero;
     }
@@ -3503,17 +3502,16 @@ class MMod : public MBinaryArithInstruct
             mod->setTruncated(true);
         return mod;
     }
 
     MDefinition *foldsTo(bool useValueNumbers);
 
     double getIdentity() {
         MOZ_ASSUME_NOT_REACHED("not used");
-        return 1;
     }
 
     bool fallible();
 
     void computeRange();
     bool truncate();
 };
 
--- a/js/src/ion/MOpcodes.h
+++ b/js/src/ion/MOpcodes.h
@@ -208,17 +208,17 @@ class MInstructionVisitor // interface i
 #define VISIT_INS(op) virtual bool visit##op(M##op *) = 0;
     MIR_OPCODE_LIST(VISIT_INS)
 #undef VISIT_INS
 };
 
 class MInstructionVisitorWithDefaults : public MInstructionVisitor
 {
   public:
-#define VISIT_INS(op) virtual bool visit##op(M##op *) { MOZ_ASSUME_NOT_REACHED("NYI: " #op); return false; }
+#define VISIT_INS(op) virtual bool visit##op(M##op *) { MOZ_ASSUME_NOT_REACHED("NYI: " #op); }
     MIR_OPCODE_LIST(VISIT_INS)
 #undef VISIT_INS
 };
 
 } // namespace ion
 } // namespace js
 
 #endif /* ion_MOpcodes_h */
--- a/js/src/ion/Snapshots.cpp
+++ b/js/src/ion/Snapshots.cpp
@@ -264,17 +264,16 @@ SnapshotReader::readSlot()
             slot.unknown_type_.value = Location::From(reader_.readSigned());
         }
         return slot;
 #endif
       }
     }
 
     MOZ_ASSUME_NOT_REACHED("huh?");
-    return Slot(JS_UNDEFINED);
 }
 
 SnapshotOffset
 SnapshotWriter::startSnapshot(uint32_t frameCount, BailoutKind kind, bool resumeAfter)
 {
     nframes_ = frameCount;
     framesWritten_ = 0;
 
@@ -374,17 +373,16 @@ ValTypeToString(JSValueType type)
       case JSVAL_TYPE_BOOLEAN:
         return "boolean";
       case JSVAL_TYPE_OBJECT:
         return "object";
       case JSVAL_TYPE_MAGIC:
         return "magic";
       default:
         MOZ_ASSUME_NOT_REACHED("no payload");
-        return "";
     }
 }
 
 void
 SnapshotWriter::addSlot(JSValueType type, const Register &reg)
 {
     IonSpew(IonSpew_Snapshots, "    slot %u: %s (%s)",
             slotsWritten_, ValTypeToString(type), reg.name());
--- a/js/src/ion/StupidAllocator.cpp
+++ b/js/src/ion/StupidAllocator.cpp
@@ -32,17 +32,16 @@ StupidAllocator::stackLocation(uint32_t 
 StupidAllocator::RegisterIndex
 StupidAllocator::registerIndex(AnyRegister reg)
 {
     for (size_t i = 0; i < registerCount; i++) {
         if (reg == registers[i].reg)
             return i;
     }
     MOZ_ASSUME_NOT_REACHED("Bad register");
-    return UINT32_MAX;
 }
 
 bool
 StupidAllocator::init()
 {
     if (!RegisterAllocator::init())
         return false;
 
--- a/js/src/ion/TypePolicy.cpp
+++ b/js/src/ion/TypePolicy.cpp
@@ -205,17 +205,16 @@ ComparePolicy::adjustInputs(MInstruction
           case MIRType_Object:
             replace = MUnbox::New(in, MIRType_Object, MUnbox::Infallible);
             break;
           case MIRType_String:
             replace = MUnbox::New(in, MIRType_String, MUnbox::Infallible);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Unknown compare specialization");
-            return false;
         }
 
         def->block()->insertBefore(def, replace);
         def->replaceOperand(i, replace);
     }
 
     return true;
 }
@@ -487,17 +486,16 @@ StoreTypedArrayPolicy::adjustValueInput(
         value = MConstant::New(DoubleValue(js_NaN));
         ins->block()->insertBefore(ins, value->toInstruction());
         break;
       case MIRType_String:
         value = boxAt(ins, value);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected type");
-        break;
     }
 
     if (value != curValue) {
         ins->replaceOperand(valueOperand, value);
         curValue = value;
     }
 
     JS_ASSERT(value->type() == MIRType_Int32 ||
@@ -525,17 +523,16 @@ StoreTypedArrayPolicy::adjustValueInput(
       case TypedArray::TYPE_FLOAT64:
         if (value->type() != MIRType_Double) {
             value = MToDouble::New(value);
             ins->block()->insertBefore(ins, value->toInstruction());
         }
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid array type");
-        break;
     }
 
     if (value != curValue) {
         ins->replaceOperand(valueOperand, value);
         curValue = value;
     }
     return true;
 }
--- a/js/src/ion/arm/Assembler-arm.cpp
+++ b/js/src/ion/arm/Assembler-arm.cpp
@@ -726,17 +726,16 @@ Assembler::getCF32Target(Iter *iter)
             offset = - offset;
         }
         uint32_t **ptr = (uint32_t **)&dataInst[offset + 8];
         return *ptr;
 
     }
 
     MOZ_ASSUME_NOT_REACHED("unsupported branch relocation");
-    return NULL;
 }
 
 uintptr_t
 Assembler::getPointer(uint8_t *instPtr)
 {
     InstructionIterator iter((Instruction*)instPtr);
     uintptr_t ret = (uintptr_t)getPtr32Target(&iter, NULL, NULL);
     return ret;
@@ -790,17 +789,16 @@ Assembler::getPtr32Target(Iter *start, R
         if (dest)
             *dest = toRD(*load);
         if (style)
             *style = L_LDR;
         uint32_t **ptr = (uint32_t **)&dataInst[offset + 8];
         return *ptr;
     }
     MOZ_ASSUME_NOT_REACHED("unsupported relocation");
-    return NULL;
 }
 
 static IonCode *
 CodeFromJump(InstructionIterator *jump)
 {
     uint8_t *target = (uint8_t *)Assembler::getCF32Target(jump);
     return IonCode::FromExecutable(target);
 }
@@ -1798,17 +1796,17 @@ Assembler::patchConstantPoolLoad(void* l
 }
 
 uint32_t
 Assembler::placeConstantPoolBarrier(int offset)
 {
     // BUG: 700526
     // this is still an active path, however, we do not hit it in the test
     // suite at all.
-    MOZ_NOT_REACHED("ARMAssembler holdover");
+    MOZ_ASSUME_NOT_REACHED("ARMAssembler holdover");
 #if 0
     offset = (offset - sizeof(ARMWord)) >> 2;
     ASSERT((offset <= BOFFSET_MAX && offset >= BOFFSET_MIN));
     return AL | B | (offset & BRANCH_MASK);
 #endif
 }
 
 // Control flow stuff:
@@ -2006,17 +2004,16 @@ Assembler::as_vnmul(VFPRegister vd, VFPR
     MOZ_ASSUME_NOT_REACHED("Feature NYI");
 }
 
 BufferOffset
 Assembler::as_vnmla(VFPRegister vd, VFPRegister vn, VFPRegister vm,
                   Condition c)
 {
     MOZ_ASSUME_NOT_REACHED("Feature NYI");
-    return BufferOffset();
 }
 
 BufferOffset
 Assembler::as_vnmls(VFPRegister vd, VFPRegister vn, VFPRegister vm,
                   Condition c)
 {
     MOZ_ASSUME_NOT_REACHED("Feature NYI");
     return BufferOffset();
--- a/js/src/ion/arm/BaselineIC-arm.cpp
+++ b/js/src/ion/arm/BaselineIC-arm.cpp
@@ -192,17 +192,16 @@ ICBinaryArith_Int32::Compiler::generateS
         } else {
             masm.j(Assembler::LessThan, &failure);
             // Move result for return.
             masm.mov(scratchReg, R0.payloadReg());
         }
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unhandled op for BinaryArith_Int32.");
-        return false;
     }
 
     EmitReturnFromIC(masm);
 
     switch (op_) {
       case JSOP_MUL:
         masm.bind(&maybeNegZero);
 
@@ -244,17 +243,16 @@ ICUnaryArith_Int32::Compiler::generateSt
         // Guard against 0 and MIN_INT, both result in a double.
         masm.branchTest32(Assembler::Zero, R0.payloadReg(), Imm32(0x7fffffff), &failure);
 
         // Compile -x as 0 - x.
         masm.ma_rsb(R0.payloadReg(), Imm32(0), R0.payloadReg());
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return false;
     }
 
     EmitReturnFromIC(masm);
 
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
     return true;
 }
--- a/js/src/ion/arm/CodeGenerator-arm.cpp
+++ b/js/src/ion/arm/CodeGenerator-arm.cpp
@@ -1065,17 +1065,16 @@ CodeGeneratorARM::visitMathD(LMathD *mat
       case JSOP_MUL:
         masm.ma_vmul(ToFloatRegister(src1), ToFloatRegister(src2), ToFloatRegister(output));
         break;
       case JSOP_DIV:
         masm.ma_vdiv(ToFloatRegister(src1), ToFloatRegister(src2), ToFloatRegister(output));
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected opcode");
-        return false;
     }
     return true;
 }
 
 bool
 CodeGeneratorARM::visitFloor(LFloor *lir)
 {
     FloatRegister input = ToFloatRegister(lir->input());
@@ -1699,24 +1698,22 @@ getBase(U *mir)
     }
     return InvalidReg;
 }
 
 bool
 CodeGeneratorARM::visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
 
 bool
 CodeGeneratorARM::visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
 
 bool
 CodeGeneratorARM::visitAsmJSLoadHeap(LAsmJSLoadHeap *ins)
 {
     const MAsmJSLoadHeap *mir = ins->mir();
     bool isSigned;
     int size;
--- a/js/src/ion/arm/Lowering-arm.cpp
+++ b/js/src/ion/arm/Lowering-arm.cpp
@@ -484,12 +484,11 @@ LIRGeneratorARM::lowerTruncateDToInt32(M
 
     return define(new LTruncateDToInt32(useRegister(opd), LDefinition::BogusTemp()), ins);
 }
 
 bool
 LIRGeneratorARM::visitStoreTypedArrayElementStatic(MStoreTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
 
 //__aeabi_uidiv
--- a/js/src/ion/arm/MacroAssembler-arm.cpp
+++ b/js/src/ion/arm/MacroAssembler-arm.cpp
@@ -725,17 +725,16 @@ MacroAssemblerARM::ma_cmp(Register src1,
         as_cmp(src1, op.toOp2(), c);
         break;
       case Operand::MEM:
         ma_ldr(op, ScratchRegister);
         as_cmp(src1, O2Reg(ScratchRegister), c);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("trying to compare FP and integer registers");
-        break;
     }
 }
 void
 MacroAssemblerARM::ma_cmp(Register src1, Register src2, Condition c)
 {
     as_cmp(src1, O2Reg(src2), c);
 }
 
@@ -799,18 +798,16 @@ MacroAssemblerARM::ma_check_mul(Register
     
     if (cond == Overflow) {
         as_smull(ScratchRegister, dest, src1, src2);
         as_cmp(ScratchRegister, asr(dest, 31));
         return NotEqual;
     }
 
     MOZ_ASSUME_NOT_REACHED("Condition NYI");
-    return Always;
-
 }
 
 Assembler::Condition
 MacroAssemblerARM::ma_check_mul(Register src1, Imm32 imm, Register dest, Condition cond)
 {
     ma_mov(imm, ScratchRegister);
     if (cond == Equal || cond == NotEqual) {
         as_smull(ScratchRegister, dest, ScratchRegister, src1, SetCond);
@@ -819,17 +816,16 @@ MacroAssemblerARM::ma_check_mul(Register
     
     if (cond == Overflow) {
         as_smull(ScratchRegister, dest, ScratchRegister, src1);
         as_cmp(ScratchRegister, asr(dest, 31));
         return NotEqual;
     }
 
     MOZ_ASSUME_NOT_REACHED("Condition NYI");
-    return Always;
 }
 
 void
 MacroAssemblerARM::ma_mod_mask(Register src, Register dest, Register hold, int32_t shift)
 {
     // MATH:
     // We wish to compute x % (1<<y) - 1 for a known constant, y.
     // first, let b = (1<<y) and C = (1<<y)-1, then think of the 32 bit dividend as
--- a/js/src/ion/arm/Trampoline-arm.cpp
+++ b/js/src/ion/arm/Trampoline-arm.cpp
@@ -691,17 +691,16 @@ IonRuntime::generateVMWrapper(JSContext 
         // Called functions return bools, which are 0/false and non-zero/true
         masm.branch32(Assembler::Equal, r0, Imm32(0), &failure);
         break;
       case Type_ParallelResult:
         masm.branch32(Assembler::NotEqual, r0, Imm32(TP_SUCCESS), &failure);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unknown failure kind");
-        break;
     }
 
     // Load the outparam and free any allocated stack.
     switch (f.outParam) {
       case Type_Handle:
         masm.popRooted(f.outParamRootType, ReturnReg, JSReturnOperand);
         break;
 
--- a/js/src/ion/shared/Assembler-shared.h
+++ b/js/src/ion/shared/Assembler-shared.h
@@ -59,17 +59,16 @@ ScaleFromElemWidth(int shift)
         return TimesTwo;
       case 4:
         return TimesFour;
       case 8:
         return TimesEight;
     }
 
     MOZ_ASSUME_NOT_REACHED("Invalid scale");
-    return TimesOne;
 }
 
 // Used for 32-bit immediates which do not require relocation.
 struct Imm32
 {
     int32_t value;
 
     explicit Imm32(int32_t value) : value(value)
@@ -82,17 +81,16 @@ struct Imm32
           case TimesTwo:
             return Imm32(1);
           case TimesFour:
             return Imm32(2);
           case TimesEight:
             return Imm32(3);
         };
         MOZ_ASSUME_NOT_REACHED("Invalid scale");
-        return Imm32(-1);
     }
 
     static inline Imm32 FactorOf(enum Scale s) {
         return Imm32(1 << ShiftOf(s).value);
     }
 };
 
 // Pointer-sized immediate.
--- a/js/src/ion/shared/Assembler-x86-shared.cpp
+++ b/js/src/ion/shared/Assembler-x86-shared.cpp
@@ -119,17 +119,16 @@ AssemblerX86Shared::InvertCondition(Cond
       case AboveOrEqual:
         return Below;
       case Below:
         return AboveOrEqual;
       case BelowOrEqual:
         return Above;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected condition");
-        return Equal;
     }
 }
 
 void
 AutoFlushCache::update(uintptr_t newStart, size_t len)
 {
 }
 
--- a/js/src/ion/shared/Assembler-x86-shared.h
+++ b/js/src/ion/shared/Assembler-x86-shared.h
@@ -130,17 +130,16 @@ class AssemblerX86Shared
             return NaN_HandledByCond;
           case DoubleEqual:
             return NaN_IsFalse;
           case DoubleNotEqualOrUnordered:
             return NaN_IsTrue;
         }
 
         MOZ_ASSUME_NOT_REACHED("Unknown double condition");
-        return NaN_HandledByCond;
     }
 
     static void staticAsserts() {
         // DoubleConditionBits should not interfere with x86 condition codes.
         JS_STATIC_ASSERT(!((Equal | NotEqual | Above | AboveOrEqual | Below |
                             BelowOrEqual | Parity | NoParity) & DoubleConditionBits));
     }
 
--- a/js/src/ion/shared/CodeGenerator-shared-inl.h
+++ b/js/src/ion/shared/CodeGenerator-shared-inl.h
@@ -13,17 +13,16 @@ namespace ion {
 static inline int32_t
 ToInt32(const LAllocation *a)
 {
     if (a->isConstantValue())
         return a->toConstant()->toInt32();
     if (a->isConstantIndex())
         return a->toConstantIndex()->index();
     MOZ_ASSUME_NOT_REACHED("this is not a constant!");
-    return -1;
 }
 static inline double
 ToDouble(const LAllocation *a)
 {
     return a->toConstant()->toNumber();
 }
 
 static inline Register
--- a/js/src/ion/shared/CodeGenerator-x86-shared.cpp
+++ b/js/src/ion/shared/CodeGenerator-x86-shared.cpp
@@ -1134,17 +1134,16 @@ CodeGeneratorX86Shared::visitMathD(LMath
       case JSOP_MUL:
         masm.mulsd(rhs, lhs);
         break;
       case JSOP_DIV:
         masm.divsd(rhs, lhs);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unexpected opcode");
-        return false;
     }
     return true;
 }
 
 bool
 CodeGeneratorX86Shared::visitFloor(LFloor *lir)
 {
     FloatRegister input = ToFloatRegister(lir->input());
--- a/js/src/ion/shared/IonAssemblerBuffer.h
+++ b/js/src/ion/shared/IonAssemblerBuffer.h
@@ -234,17 +234,16 @@ struct AssemblerBuffer
     BufferOffset nextOffset() const {
         if (tail != NULL)
             return BufferOffset(bufferSize + tail->size());
         else
             return BufferOffset(bufferSize);
     }
     BufferOffset prevOffset() const {
         MOZ_ASSUME_NOT_REACHED("Don't current record lastInstSize");
-        return BufferOffset(bufferSize + tail->nodeSize - lastInstSize);
     }
 
     // Break the instruction stream so we can go back and edit it at this point
     void perforate() {
         Slice *tmp = newSlice(LifoAlloc_);
         if (!tmp)
             m_oom = true;
         bufferSize += tail->size();
--- a/js/src/ion/shared/IonAssemblerBufferWithConstantPools.h
+++ b/js/src/ion/shared/IonAssemblerBufferWithConstantPools.h
@@ -1126,17 +1126,16 @@ struct AssemblerBufferWithConstantPool :
         }
         for (int idx = numPoolKinds-1; idx >= 0; idx--) {
             if (poolGroup[idx].other == realPool) {
                 return start + offset;
             }
             start = poolGroup[idx].other->addPoolSize(start);
         }
         MOZ_ASSUME_NOT_REACHED("Entry is not in a pool");
-        return -1;
     }
     void writePoolEntry(PoolEntry pe, uint8_t *buff) {
         size_t size = getPoolEntrySize(pe);
         uint8_t *entry = getPoolEntry(pe);
         memcpy(entry, buff, size);
     }
     void readPoolEntry(PoolEntry pe, uint8_t *buff) {
         size_t size = getPoolEntrySize(pe);
--- a/js/src/ion/x64/BaselineIC-x64.cpp
+++ b/js/src/ion/x64/BaselineIC-x64.cpp
@@ -176,17 +176,16 @@ ICBinaryArith_Int32::Compiler::generateS
             masm.boxDouble(ScratchFloatReg, R0);
         } else {
             masm.j(Assembler::Signed, &revertRegister);
             masm.boxValue(JSVAL_TYPE_INT32, ExtractTemp0, R0.valueReg());
         }
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unhandled op in BinaryArith_Int32");
-        return false;
     }
 
     // Return from stub.
     EmitReturnFromIC(masm);
 
     if (op_ == JSOP_MUL) {
         masm.bind(&maybeNegZero);
 
@@ -226,17 +225,16 @@ ICUnaryArith_Int32::Compiler::generateSt
         break;
       case JSOP_NEG:
         // Guard against 0 and MIN_INT, both result in a double.
         masm.branchTest32(Assembler::Zero, R0.valueReg(), Imm32(0x7fffffff), &failure);
         masm.negl(R0.valueReg());
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return false;
     }
 
     masm.tagValue(JSVAL_TYPE_INT32, R0.valueReg(), R0);
 
     EmitReturnFromIC(masm);
 
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
--- a/js/src/ion/x64/CodeGenerator-x64.cpp
+++ b/js/src/ion/x64/CodeGenerator-x64.cpp
@@ -53,17 +53,16 @@ FrameSizeClass::ClassLimit()
 {
     return FrameSizeClass(0);
 }
 
 uint32_t
 FrameSizeClass::frameSize() const
 {
     MOZ_ASSUME_NOT_REACHED("x64 does not use frame size classes");
-    return 0;
 }
 
 bool
 CodeGeneratorX64::visitValue(LValue *value)
 {
     LDefinition *reg = value->getDef(0);
     masm.moveValue(value->value(), ToRegister(reg));
     return true;
@@ -114,17 +113,16 @@ CodeGeneratorX64::visitUnbox(LUnbox *unb
           case MIRType_Object:
             cond = masm.testObject(Assembler::NotEqual, value);
             break;
           case MIRType_String:
             cond = masm.testString(Assembler::NotEqual, value);
             break;
           default:
             MOZ_ASSUME_NOT_REACHED("Given MIRType cannot be unboxed.");
-            return false;
         }
         if (!bailoutIf(cond, unbox->snapshot()))
             return false;
     }
 
     switch (mir->type()) {
       case MIRType_Int32:
         masm.unboxInt32(value, ToRegister(result));
@@ -135,17 +133,16 @@ CodeGeneratorX64::visitUnbox(LUnbox *unb
       case MIRType_Object:
         masm.unboxObject(value, ToRegister(result));
         break;
       case MIRType_String:
         masm.unboxString(value, ToRegister(result));
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Given MIRType cannot be unboxed.");
-        break;
     }
 
     return true;
 }
 
 bool
 CodeGeneratorX64::visitLoadSlotV(LLoadSlotV *load)
 {
@@ -385,24 +382,22 @@ CodeGeneratorX64::visitUInt32ToDouble(LU
     masm.convertUInt32ToDouble(ToRegister(lir->input()), ToFloatRegister(lir->output()));
     return true;
 }
 
 bool
 CodeGeneratorX64::visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
 
 bool
 CodeGeneratorX64::visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
 
 bool
 CodeGeneratorX64::visitAsmJSLoadHeap(LAsmJSLoadHeap *ins)
 {
     MAsmJSLoadHeap *mir = ins->mir();
     ArrayBufferView::ViewType vt = mir->viewType();
 
--- a/js/src/ion/x64/Lowering-x64.cpp
+++ b/js/src/ion/x64/Lowering-x64.cpp
@@ -174,10 +174,9 @@ LIRGeneratorX64::newLGetPropertyCacheT(M
 {
     return new LGetPropertyCacheT(useRegister(ins->object()), LDefinition::BogusTemp());
 }
 
 bool
 LIRGeneratorX64::visitStoreTypedArrayElementStatic(MStoreTypedArrayElementStatic *ins)
 {
     MOZ_ASSUME_NOT_REACHED("NYI");
-    return true;
 }
--- a/js/src/ion/x64/MacroAssembler-x64.h
+++ b/js/src/ion/x64/MacroAssembler-x64.h
@@ -91,17 +91,16 @@ class MacroAssemblerX64 : public MacroAs
             return Operand(Register::FromCode(base.base()), base.disp() + 4);
 
           case Operand::SCALE:
             return Operand(Register::FromCode(base.base()), Register::FromCode(base.index()),
                            base.scale(), base.disp() + 4);
 
           default:
             MOZ_ASSUME_NOT_REACHED("unexpected operand kind");
-            return base; // Silence GCC warning.
         }
     }
     static inline Operand ToUpper32(const Address &address) {
         return Operand(address.base, address.offset + 4);
     }
     static inline Operand ToUpper32(const BaseIndex &address) {
         return Operand(address.base, address.index, address.scale, address.offset + 4);
     }
--- a/js/src/ion/x64/Trampoline-x64.cpp
+++ b/js/src/ion/x64/Trampoline-x64.cpp
@@ -446,17 +446,16 @@ GenerateBailoutThunk(JSContext *cx, Macr
 
     masm.generateBailoutTail(rdx, r9);
 }
 
 IonCode *
 IonRuntime::generateBailoutTable(JSContext *cx, uint32_t frameClass)
 {
     MOZ_ASSUME_NOT_REACHED("x64 does not use bailout tables");
-    return NULL;
 }
 
 IonCode *
 IonRuntime::generateBailoutHandler(JSContext *cx)
 {
     MacroAssembler masm;
 
     GenerateBailoutThunk(cx, masm, NO_FRAME_SIZE_CLASS_ID);
@@ -558,17 +557,16 @@ IonRuntime::generateVMWrapper(JSContext 
                 break;
               case VMFunction::WordByRef:
                 masm.passABIArg(MoveOperand(argsBase, argDisp, MoveOperand::EFFECTIVE));
                 argDisp += sizeof(void *);
                 break;
               case VMFunction::DoubleByValue:
               case VMFunction::DoubleByRef:
                 MOZ_ASSUME_NOT_REACHED("NYI: x64 callVM should not be used with 128bits values.");
-                break;
             }
         }
     }
 
     // Copy the implicit outparam, if any.
     if (outReg != InvalidReg)
         masm.passABIArg(outReg);
 
@@ -584,17 +582,16 @@ IonRuntime::generateVMWrapper(JSContext 
         masm.testb(rax, rax);
         masm.j(Assembler::Zero, &failure);
         break;
       case Type_ParallelResult:
         masm.branchPtr(Assembler::NotEqual, rax, Imm32(TP_SUCCESS), &failure);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unknown failure kind");
-        break;
     }
 
     // Load the outparam and free any allocated stack.
     switch (f.outParam) {
       case Type_Handle:
         masm.popRooted(f.outParamRootType, ReturnReg, JSReturnOperand);
         break;
 
--- a/js/src/ion/x86/BaselineIC-x86.cpp
+++ b/js/src/ion/x86/BaselineIC-x86.cpp
@@ -180,17 +180,16 @@ ICBinaryArith_Int32::Compiler::generateS
             masm.boxDouble(ScratchFloatReg, R0);
         } else {
             masm.j(Assembler::Signed, &revertRegister);
             masm.tagValue(JSVAL_TYPE_INT32, R0.payloadReg(), R0);
         }
         break;
       default:
        MOZ_ASSUME_NOT_REACHED("Unhandled op for BinaryArith_Int32.  ");
-       return false;
     }
 
     // Return.
     EmitReturnFromIC(masm);
 
     switch(op_) {
       case JSOP_MUL:
         masm.bind(&maybeNegZero);
@@ -242,17 +241,16 @@ ICUnaryArith_Int32::Compiler::generateSt
         break;
       case JSOP_NEG:
         // Guard against 0 and MIN_INT, both result in a double.
         masm.branchTest32(Assembler::Zero, R0.payloadReg(), Imm32(0x7fffffff), &failure);
         masm.negl(R0.payloadReg());
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return false;
     }
 
     EmitReturnFromIC(masm);
 
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
     return true;
 }
--- a/js/src/ion/x86/MacroAssembler-x86.h
+++ b/js/src/ion/x86/MacroAssembler-x86.h
@@ -94,17 +94,16 @@ class MacroAssemblerX86 : public MacroAs
             return Operand(Register::FromCode(base.base()), base.disp() + sizeof(void *));
 
           case Operand::SCALE:
             return Operand(Register::FromCode(base.base()), Register::FromCode(base.index()),
                            base.scale(), base.disp() + sizeof(void *));
 
           default:
             MOZ_ASSUME_NOT_REACHED("unexpected operand kind");
-            return base; // Silence GCC warning.
         }
     }
     void moveValue(const Value &val, Register type, Register data) {
         jsval_layout jv = JSVAL_TO_IMPL(val);
         movl(Imm32(jv.s.tag), type);
         if (val.isMarkable())
             movl(ImmGCPtr(reinterpret_cast<gc::Cell *>(val.toGCThing())), data);
         else
--- a/js/src/ion/x86/Trampoline-x86.cpp
+++ b/js/src/ion/x86/Trampoline-x86.cpp
@@ -605,17 +605,16 @@ IonRuntime::generateVMWrapper(JSContext 
         masm.testb(eax, eax);
         masm.j(Assembler::Zero, &failure);
         break;
       case Type_ParallelResult:
         masm.branchPtr(Assembler::NotEqual, eax, Imm32(TP_SUCCESS), &failure);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unknown failure kind");
-        break;
     }
 
     // Load the outparam and free any allocated stack.
     switch (f.outParam) {
       case Type_Handle:
         masm.popRooted(f.outParamRootType, ReturnReg, JSReturnOperand);
         break;
 
--- a/js/src/jsanalyze.cpp
+++ b/js/src/jsanalyze.cpp
@@ -2017,17 +2017,17 @@ SSAValue::print() const
             printf("write:%05u", varOffset());
         break;
 
       case PHI:
         printf("phi:%05u#%u", phiOffset(), phiSlot());
         break;
 
       default:
-        MOZ_NOT_REACHED("Bad kind");
+        MOZ_ASSUME_NOT_REACHED("Bad kind");
     }
 }
 
 void
 ScriptAnalysis::assertMatchingDebugMode()
 {
     JS_ASSERT(!!script_->compartment()->debugMode() == !!originalDebugMode_);
 }
--- a/js/src/jsanalyze.h
+++ b/js/src/jsanalyze.h
@@ -202,17 +202,16 @@ ReverseCompareOp(JSOp op)
         return JSOP_GE;
       case JSOP_EQ:
       case JSOP_NE:
       case JSOP_STRICTEQ:
       case JSOP_STRICTNE:
         return op;
       default:
         MOZ_ASSUME_NOT_REACHED("unrecognized op");
-        return op;
     }
 }
 
 static inline JSOp
 NegateCompareOp(JSOp op)
 {
     switch (op) {
       case JSOP_GT:
@@ -228,17 +227,16 @@ NegateCompareOp(JSOp op)
       case JSOP_NE:
         return JSOP_EQ;
       case JSOP_STRICTNE:
         return JSOP_STRICTEQ;
       case JSOP_STRICTEQ:
         return JSOP_STRICTNE;
       default:
         MOZ_ASSUME_NOT_REACHED("unrecognized op");
-        return op;
     }
 }
 
 static inline unsigned
 FollowBranch(JSContext *cx, JSScript *script, unsigned offset)
 {
     /*
      * Get the target offset of a branch. For GOTO opcodes implementing
@@ -291,17 +289,16 @@ static inline uint32_t GetBytecodeSlot(J
       case JSOP_SETLOCAL:
         return LocalSlot(script, GET_SLOTNO(pc));
 
       case JSOP_THIS:
         return ThisSlot();
 
       default:
         MOZ_ASSUME_NOT_REACHED("Bad slot opcode");
-        return 0;
     }
 }
 
 /* Slot opcodes which update SSA information. */
 static inline bool
 BytecodeUpdatesSlot(JSOp op)
 {
     return (op == JSOP_SETARG || op == JSOP_SETLOCAL);
--- a/js/src/jsanalyzeinlines.h
+++ b/js/src/jsanalyzeinlines.h
@@ -67,17 +67,16 @@ ScriptAnalysis::getValueTypes(const SSAV
              */
             return pushedTypes(v.varOffset(), 0);
         }
       case SSAValue::PHI:
         return &v.phiNode()->types;
       default:
         /* Cannot compute types for empty SSA values. */
         MOZ_ASSUME_NOT_REACHED("Bad SSA value");
-        return NULL;
     }
 }
 
 inline types::StackTypeSet *
 ScriptAnalysis::poppedTypes(uint32_t offset, uint32_t which)
 {
     return getValueTypes(poppedValue(offset, which));
 }
--- a/js/src/jsclone.cpp
+++ b/js/src/jsclone.cpp
@@ -923,17 +923,16 @@ JSStructuredCloneReader::readTypedArray(
       case TypedArray::TYPE_FLOAT64:
         obj = JS_NewFloat64ArrayWithBuffer(context(), buffer, byteOffset, nelems);
         break;
       case TypedArray::TYPE_UINT8_CLAMPED:
         obj = JS_NewUint8ClampedArrayWithBuffer(context(), buffer, byteOffset, nelems);
         break;
       default:
         MOZ_ASSUME_NOT_REACHED("unknown TypedArray type");
-        return false;
     }
 
     if (!obj)
         return false;
     vp->setObject(*obj);
 
     allObjs[placeholderIndex] = *vp;
 
@@ -966,17 +965,16 @@ bytesPerTypedArrayElement(uint32_t array
       case TypedArray::TYPE_INT32:
       case TypedArray::TYPE_UINT32:
       case TypedArray::TYPE_FLOAT32:
         return sizeof(uint32_t);
       case TypedArray::TYPE_FLOAT64:
         return sizeof(uint64_t);
       default:
         MOZ_ASSUME_NOT_REACHED("unknown TypedArray type");
-        return 0;
     }
 }
 
 /*
  * Read in the data for a structured clone version 1 ArrayBuffer, performing
  * endianness-conversion while reading.
  */
 bool
@@ -1003,17 +1001,16 @@ JSStructuredCloneReader::readV1ArrayBuff
       case TypedArray::TYPE_INT32:
       case TypedArray::TYPE_UINT32:
       case TypedArray::TYPE_FLOAT32:
         return in.readArray((uint32_t*) buffer.dataPointer(), nelems);
       case TypedArray::TYPE_FLOAT64:
         return in.readArray((uint64_t*) buffer.dataPointer(), nelems);
       default:
         MOZ_ASSUME_NOT_REACHED("unknown TypedArray type");
-        return false;
     }
 }
 
 bool
 JSStructuredCloneReader::startRead(Value *vp)
 {
     uint32_t tag, data;
 
--- a/js/src/jscntxtinlines.h
+++ b/js/src/jscntxtinlines.h
@@ -612,13 +612,12 @@ js::ThreadSafeContext::allowGC() const
     switch (contextKind_) {
       case Context_JS:
         return CanGC;
       case Context_ForkJoin:
         return NoGC;
       default:
         /* Silence warnings. */
         MOZ_ASSUME_NOT_REACHED("Bad context kind");
-        return NoGC;
     }
 }
 
 #endif /* jscntxtinlines_h */
--- a/js/src/jsfun.cpp
+++ b/js/src/jsfun.cpp
@@ -139,17 +139,16 @@ fun_getProperty(JSContext *cx, HandleObj
                 return false;
             }
         }
 
         return true;
     }
 
     MOZ_ASSUME_NOT_REACHED("fun_getProperty");
-    return false;
 }
 
 
 
 /* NB: no sentinels at ends -- use ArrayLength to bound loops.
  * Properties censored into [[ThrowTypeError]] in strict mode. */
 static const uint16_t poisonPillProps[] = {
     NAME_OFFSET(arguments),
@@ -1747,11 +1746,10 @@ JSObject::hasIdempotentProtoChain() cons
             return false;
 
         obj = obj->getProto();
         if (!obj)
             return true;
     }
 
     MOZ_ASSUME_NOT_REACHED("Should not get here");
-    return false;
 }
 
--- a/js/src/jsgc.cpp
+++ b/js/src/jsgc.cpp
@@ -455,17 +455,16 @@ FinalizeArenas(FreeOp *fop,
       case FINALIZE_EXTERNAL_STRING:
         return FinalizeTypedArenas<JSExternalString>(fop, src, dest, thingKind, budget);
       case FINALIZE_IONCODE:
 #ifdef JS_ION
         return FinalizeTypedArenas<ion::IonCode>(fop, src, dest, thingKind, budget);
 #endif
       default:
         MOZ_ASSUME_NOT_REACHED("Invalid alloc kind");
-        return true;
     }
 }
 
 static inline Chunk *
 AllocChunk(JSRuntime *rt)
 {
     return static_cast<Chunk *>(MapAlignedPages(rt, ChunkSize, ChunkSize));
 }
@@ -721,17 +720,16 @@ Chunk::findDecommittedArenaOffset()
     /* Note: lastFreeArenaOffset can be past the end of the list. */
     for (unsigned i = info.lastDecommittedArenaOffset; i < ArenasPerChunk; i++)
         if (decommittedArenas.get(i))
             return i;
     for (unsigned i = 0; i < info.lastDecommittedArenaOffset; i++)
         if (decommittedArenas.get(i))
             return i;
     MOZ_ASSUME_NOT_REACHED("No decommitted arenas found.");
-    return -1;
 }
 
 ArenaHeader *
 Chunk::fetchNextDecommittedArena()
 {
     JS_ASSERT(info.numArenasFreeCommitted == 0);
     JS_ASSERT(info.numArenasFree > 0);
 
@@ -3506,17 +3504,16 @@ RemoveFromGrayList(JSObject *wrapper)
         if (next == wrapper) {
             obj->setCrossCompartmentSlot(slot, ObjectOrNullValue(tail));
             return true;
         }
         obj = next;
     }
 
     MOZ_ASSUME_NOT_REACHED("object not found in gray link list");
-    return false;
 }
 
 static void
 ResetGrayList(JSCompartment *comp)
 {
     JSObject *src = comp->gcIncomingGrayPointers;
     while (src)
         src = NextIncomingCrossCompartmentPointer(src, true);
--- a/js/src/jsgcinlines.h
+++ b/js/src/jsgcinlines.h
@@ -147,17 +147,16 @@ GetGCKindSlots(AllocKind thingKind)
       case FINALIZE_OBJECT12:
       case FINALIZE_OBJECT12_BACKGROUND:
         return 12;
       case FINALIZE_OBJECT16:
       case FINALIZE_OBJECT16_BACKGROUND:
         return 16;
       default:
         MOZ_ASSUME_NOT_REACHED("Bad object finalize kind");
-        return 0;
     }
 }
 
 static inline size_t
 GetGCKindSlots(AllocKind thingKind, Class *clasp)
 {
     size_t nslots = GetGCKindSlots(thingKind);
 
--- a/js/src/jsinfer.cpp
+++ b/js/src/jsinfer.cpp
@@ -186,17 +186,16 @@ types::TypeString(Type type)
           case JSVAL_TYPE_DOUBLE:
             return "float";
           case JSVAL_TYPE_STRING:
             return "string";
           case JSVAL_TYPE_MAGIC:
             return "lazyargs";
           default:
             MOZ_ASSUME_NOT_REACHED("Bad type");
-            return "";
         }
     }
     if (type.isUnknown())
         return "unknown";
     if (type.isAnyObject())
         return " object";
 
     static char bufs[4][40];
--- a/js/src/jsinferinlines.h
+++ b/js/src/jsinferinlines.h
@@ -109,17 +109,16 @@ CompilerOutput::ion() const
 #ifdef JS_ION
     JS_ASSERT(isValid());
     switch (kind()) {
       case Ion: return script->ionScript();
       case ParallelIon: return script->parallelIonScript();
     }
 #endif
     MOZ_ASSUME_NOT_REACHED("Invalid kind of CompilerOutput");
-    return NULL;
 }
 
 inline bool
 CompilerOutput::isValid() const
 {
     if (!script)
         return false;
 
@@ -219,17 +218,16 @@ PrimitiveTypeFlag(JSValueType type)
       case JSVAL_TYPE_DOUBLE:
         return TYPE_FLAG_DOUBLE;
       case JSVAL_TYPE_STRING:
         return TYPE_FLAG_STRING;
       case JSVAL_TYPE_MAGIC:
         return TYPE_FLAG_LAZYARGS;
       default:
         MOZ_ASSUME_NOT_REACHED("Bad type");
-        return 0;
     }
 }
 
 inline JSValueType
 TypeFlagPrimitive(TypeFlags flags)
 {
     switch (flags) {
       case TYPE_FLAG_UNDEFINED:
@@ -243,17 +241,16 @@ TypeFlagPrimitive(TypeFlags flags)
       case TYPE_FLAG_DOUBLE:
         return JSVAL_TYPE_DOUBLE;
       case TYPE_FLAG_STRING:
         return JSVAL_TYPE_STRING;
       case TYPE_FLAG_LAZYARGS:
         return JSVAL_TYPE_MAGIC;
       default:
         MOZ_ASSUME_NOT_REACHED("Bad type");
-        return (JSValueType) 0;
     }
 }
 
 /*
  * Get the canonical representation of an id to use when doing inference.  This
  * maintains the constraint that if two different jsids map to the same property
  * in JS (e.g. 3 and "3"), they have the same type representation.
  */
@@ -494,17 +491,16 @@ GetClassForProtoKey(JSProtoKey key)
       case JSProto_DataView:
         return &DataViewObject::class_;
 
       case JSProto_ParallelArray:
         return &ParallelArrayObject::class_;
 
       default:
         MOZ_ASSUME_NOT_REACHED("Bad proto key");
-        return NULL;
     }
 }
 
 /*
  * Get the default 'new' object for a given standard class, per the currently
  * active global.
  */
 inline TypeObject *
@@ -1587,17 +1583,16 @@ TypeObject::getProperty(JSContext *cx, j
              */
             unsigned count = getPropertyCount();
             for (unsigned i = 0; i < count; i++) {
                 if (Property *prop = getProperty(i))
                     return &prop->types;
             }
 
             MOZ_ASSUME_NOT_REACHED("Missing property");
-            return NULL;
         }
     }
 
     HeapTypeSet *types = &(*pprop)->types;
     if (own)
         types->setOwnProperty(cx, false);
 
     return types;
--- a/js/src/jsobjinlines.h
+++ b/js/src/jsobjinlines.h
@@ -1262,17 +1262,16 @@ ObjectClassIs(HandleObject obj, ESClassV
       case ESClass_Number: return obj->is<NumberObject>();
       case ESClass_String: return obj->is<StringObject>();
       case ESClass_Boolean: return obj->is<BooleanObject>();
       case ESClass_RegExp: return obj->is<RegExpObject>();
       case ESClass_ArrayBuffer: return obj->is<ArrayBufferObject>();
       case ESClass_Date: return obj->is<DateObject>();
     }
     MOZ_ASSUME_NOT_REACHED("bad classValue");
-    return false;
 }
 
 inline bool
 IsObjectWithClass(const Value &v, ESClassValue classValue, JSContext *cx)
 {
     if (!v.isObject())
         return false;
     RootedObject obj(cx, &v.toObject());
--- a/js/src/jsopcode.cpp
+++ b/js/src/jsopcode.cpp
@@ -113,17 +113,16 @@ js_GetVariableBytecodeLength(jsbytecode 
         int32_t low = GET_JUMP_OFFSET(pc);
         pc += JUMP_OFFSET_LEN;
         int32_t high = GET_JUMP_OFFSET(pc);
         unsigned ncases = unsigned(high - low + 1);
         return 1 + 3 * JUMP_OFFSET_LEN + ncases * JUMP_OFFSET_LEN;
       }
       default:
         MOZ_ASSUME_NOT_REACHED("Unexpected op");
-        return 0;
     }
 }
 
 static uint32_t
 NumBlockSlots(JSScript *script, jsbytecode *pc)
 {
     JS_ASSERT(*pc == JSOP_ENTERBLOCK || *pc == JSOP_ENTERLET0 || *pc == JSOP_ENTERLET1);
     JS_STATIC_ASSERT(JSOP_ENTERBLOCK_LENGTH == JSOP_ENTERLET0_LENGTH);
@@ -246,24 +245,22 @@ PCCounts::countName(JSOp op, size_t whic
     if (accessOp(op)) {
         if (which < ACCESS_LIMIT)
             return countAccessNames[which - BASE_LIMIT];
         if (elementOp(op))
             return countElementNames[which - ACCESS_LIMIT];
         if (propertyOp(op))
             return countPropertyNames[which - ACCESS_LIMIT];
         MOZ_ASSUME_NOT_REACHED("bad op");
-        return NULL;
     }
 
     if (arithOp(op))
         return countArithNames[which - BASE_LIMIT];
 
     MOZ_ASSUME_NOT_REACHED("bad op");
-    return NULL;
 }
 
 #ifdef DEBUG
 
 #ifdef JS_ION
 void
 js::DumpIonScriptCounts(Sprinter *sp, ion::IonScriptCounts *ionCounts)
 {
--- a/js/src/jsopcode.h
+++ b/js/src/jsopcode.h
@@ -511,17 +511,16 @@ GetBytecodeInteger(jsbytecode *pc)
       case JSOP_ZERO:   return 0;
       case JSOP_ONE:    return 1;
       case JSOP_UINT16: return GET_UINT16(pc);
       case JSOP_UINT24: return GET_UINT24(pc);
       case JSOP_INT8:   return GET_INT8(pc);
       case JSOP_INT32:  return GET_INT32(pc);
       default:
         MOZ_ASSUME_NOT_REACHED("Bad op");
-        return 0;
     }
 }
 
 /*
  * Counts accumulated for a single opcode in a script. The counts tracked vary
  * between opcodes, and this structure ensures that counts are accessed in a
  * coherent fashion.
  */
--- a/js/src/jsproxy.cpp
+++ b/js/src/jsproxy.cpp
@@ -304,42 +304,42 @@ BaseProxyHandler::iterate(JSContext *cx,
     }
 
     return EnumeratedIdVectorToIterator(cx, proxy, flags, props, vp);
 }
 
 bool
 BaseProxyHandler::call(JSContext *cx, HandleObject proxy, const CallArgs &args)
 {
-    MOZ_NOT_REACHED("callable proxies should implement call trap");
+    MOZ_ASSUME_NOT_REACHED("callable proxies should implement call trap");
 }
 
 bool
 BaseProxyHandler::construct(JSContext *cx, HandleObject proxy, const CallArgs &args)
 {
-    MOZ_NOT_REACHED("callable proxies should implement construct trap");
+    MOZ_ASSUME_NOT_REACHED("callable proxies should implement construct trap");
 }
 
 const char *
 BaseProxyHandler::className(JSContext *cx, HandleObject proxy)
 {
     return IsFunctionProxy(proxy) ? "Function" : "Object";
 }
 
 JSString *
 BaseProxyHandler::fun_toString(JSContext *cx, HandleObject proxy, unsigned indent)
 {
-    MOZ_NOT_REACHED("callable proxies should implement fun_toString trap");
+    MOZ_ASSUME_NOT_REACHED("callable proxies should implement fun_toString trap");
 }
 
 bool
 BaseProxyHandler::regexp_toShared(JSContext *cx, HandleObject proxy,
                                   RegExpGuard *g)
 {
-    MOZ_NOT_REACHED("This should have been a wrapped regexp");
+    MOZ_ASSUME_NOT_REACHED("This should have been a wrapped regexp");
 }
 
 bool
 BaseProxyHandler::defaultValue(JSContext *cx, HandleObject proxy, JSType hint,
                                MutableHandleValue vp)
 {
     return DefaultValue(cx, proxy, hint, vp);
 }
--- a/js/src/jsreflect.cpp
+++ b/js/src/jsreflect.cpp
@@ -109,17 +109,17 @@ typedef AutoValueVector NodeVector;
         if (!(expr)) {                                                                 \
             JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BAD_PARSE_NODE);  \
             return false;                                                              \
         }                                                                              \
     JS_END_MACRO
 
 #define LOCAL_NOT_REACHED(expr)                                                        \
     JS_BEGIN_MACRO                                                                     \
-        MOZ_ASSUME_NOT_REACHED(expr);                                                          \
+        MOZ_ASSERT(false);                                                             \
         JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_BAD_PARSE_NODE);      \
         return false;                                                                  \
     JS_END_MACRO
 
 /*
  * Builder class that constructs JavaScript AST node objects. See:
  *
  *     https://developer.mozilla.org/en/SpiderMonkey/Parser_API
--- a/js/src/jsscript.cpp
+++ b/js/src/jsscript.cpp
@@ -376,17 +376,16 @@ FindBlockIndex(JSScript *script, StaticB
     HeapPtrObject *vector = objects->vector;
     unsigned length = objects->length;
     for (unsigned i = 0; i < length; ++i) {
         if (vector[i] == &block)
             return i;
     }
 
     MOZ_ASSUME_NOT_REACHED("Block not found");
-    return UINT32_MAX;
 }
 
 template<XDRMode mode>
 bool
 js::XDRScript(XDRState<mode> *xdr, HandleObject enclosingScope, HandleScript enclosingScript,
               HandleFunction fun, MutableHandleScript scriptp)
 {
     /* NB: Keep this in sync with CloneScript. */
--- a/js/src/jstypedarray.cpp
+++ b/js/src/jstypedarray.cpp
@@ -2447,17 +2447,17 @@ class TypedArrayTemplate
           }
           case TypedArray::TYPE_FLOAT64: {
             double *src = static_cast<double*>(viewData(tarray));
             for (unsigned i = 0; i < srclen; ++i)
                 *dest++ = NativeType(*src++);
             break;
           }
           default:
-            MOZ_NOT_REACHED("copyFrom with a TypedArray of unknown type");
+            MOZ_ASSUME_NOT_REACHED("copyFrom with a TypedArray of unknown type");
         }
 
         return true;
     }
 
     static bool
     copyFromWithOverlap(JSContext *cx, JSObject *self, JSObject *tarray, uint32_t offset)
     {
@@ -2525,17 +2525,16 @@ class TypedArrayTemplate
           case TypedArray::TYPE_FLOAT64: {
             double *src = (double*) srcbuf;
             for (unsigned i = 0; i < length(tarray); ++i)
                 *dest++ = NativeType(*src++);
             break;
           }
           default:
             MOZ_ASSUME_NOT_REACHED("copyFromWithOverlap with a TypedArray of unknown type");
-            break;
         }
 
         js_free(srcbuf);
         return true;
     }
 
     static JSObject *
     createBufferWithSizeAndCount(JSContext *cx, uint32_t count)
@@ -3869,17 +3868,16 @@ js::IsTypedArrayConstructor(const Value 
       case TypedArray::TYPE_FLOAT32:
         return IsNativeFunction(v, Float32Array::class_constructor);
       case TypedArray::TYPE_FLOAT64:
         return IsNativeFunction(v, Float64Array::class_constructor);
       case TypedArray::TYPE_UINT8_CLAMPED:
         return IsNativeFunction(v, Uint8ClampedArray::class_constructor);
     }
     MOZ_ASSUME_NOT_REACHED("unexpected typed array type");
-    return false;
 }
 
 bool
 js::IsTypedArrayBuffer(const Value &v)
 {
     return v.isObject() && v.toObject().is<ArrayBufferObject>();
 }
 
@@ -4027,17 +4025,16 @@ JS_GetArrayBufferViewType(JSObject *obj)
     if (!obj)
         return ArrayBufferView::TYPE_MAX;
 
     if (obj->isTypedArray())
         return static_cast<JSArrayBufferViewType>(TypedArray::type(obj));
     else if (obj->is<DataViewObject>())
         return ArrayBufferView::TYPE_DATAVIEW;
     MOZ_ASSUME_NOT_REACHED("invalid ArrayBufferView type");
-    return ArrayBufferView::TYPE_MAX;
 }
 
 JS_FRIEND_API(int8_t *)
 JS_GetInt8ArrayData(JSObject *obj)
 {
     obj = CheckedUnwrap(obj);
     if (!obj)
         return NULL;
--- a/js/src/jstypedarray.h
+++ b/js/src/jstypedarray.h
@@ -333,17 +333,16 @@ TypedArrayShift(ArrayBufferView::ViewTyp
       case ArrayBufferView::TYPE_UINT32:
       case ArrayBufferView::TYPE_FLOAT32:
         return 2;
       case ArrayBufferView::TYPE_FLOAT64:
         return 3;
       default:;
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected array type");
-    return 0;
 }
 
 class DataViewObject : public JSObject, public BufferView
 {
 public:
     static Class class_;
 
 private:
--- a/js/src/jstypedarrayinlines.h
+++ b/js/src/jstypedarrayinlines.h
@@ -152,17 +152,16 @@ TypedArray::slotWidth(int atype) {
     case js::TypedArray::TYPE_INT32:
     case js::TypedArray::TYPE_UINT32:
     case js::TypedArray::TYPE_FLOAT32:
         return 4;
     case js::TypedArray::TYPE_FLOAT64:
         return 8;
     default:
         MOZ_ASSUME_NOT_REACHED("invalid typed array type");
-        return 0;
     }
 }
 
 inline int
 TypedArray::slotWidth(JSObject *obj) {
     return slotWidth(type(obj));
 }
 
--- a/js/src/jsversion.h
+++ b/js/src/jsversion.h
@@ -56,12 +56,12 @@
 
 /* A kill-switch for bug 586842.  Embedders shouldn't touch this! */
 #define USE_NEW_OBJECT_REPRESENTATION 0
 
 #if USE_NEW_OBJECT_REPRESENTATION
 #  define NEW_OBJECT_REPRESENTATION_ONLY() ((void)0)
 #else
 #  define NEW_OBJECT_REPRESENTATION_ONLY() \
-     MOZ_NOT_REACHED("don't call this!  to be used in the new object representation")
+     MOZ_ASSUME_NOT_REACHED("don't call this!  to be used in the new object representation")
 #endif
 
 #endif /* jsversion_h */
--- a/js/src/jsworkers.cpp
+++ b/js/src/jsworkers.cpp
@@ -439,23 +439,23 @@ WorkerThread::threadLoop()
     }
 }
 
 #else /* JS_PARALLEL_COMPILATION */
 
 bool
 js::StartOffThreadAsmJSCompile(JSContext *cx, AsmJSParallelTask *asmData)
 {
-    MOZ_NOT_REACHED("Off thread compilation not available in non-THREADSAFE builds");
+    MOZ_ASSUME_NOT_REACHED("Off thread compilation not available in non-THREADSAFE builds");
 }
 
 bool
 js::StartOffThreadIonCompile(JSContext *cx, ion::IonBuilder *builder)
 {
-    MOZ_NOT_REACHED("Off thread compilation not available in non-THREADSAFE builds");
+    MOZ_ASSUME_NOT_REACHED("Off thread compilation not available in non-THREADSAFE builds");
 }
 
 void
 js::CancelOffThreadIonCompile(JSCompartment *compartment, JSScript *script)
 {
 }
 
 #endif /* JS_PARALLEL_COMPILATION */
--- a/js/src/shell/jsoptparse.cpp
+++ b/js/src/shell/jsoptparse.cpp
@@ -305,17 +305,16 @@ OptionParser::handleOption(Option *opt, 
         char *value = NULL;
         if (Result r = extractValue(argc, argv, i, &value))
             return r;
         StringArg arg(value, *i);
         return opt->asMultiStringOption()->strings.append(arg) ? Okay : Fail;
       }
       default:
         MOZ_ASSUME_NOT_REACHED("unhandled option kind");
-        return Fail;
     }
 }
 
 OptionParser::Result
 OptionParser::handleArg(size_t argc, char **argv, size_t *i, bool *optionsAllowed)
 {
     if (nextArgument >= arguments.length())
         return error("Too many arguments provided");
@@ -333,17 +332,16 @@ OptionParser::handleArg(size_t argc, cha
       case OptionKindMultiString:
       {
         /* Don't advance the next argument -- there can only be one (final) variadic argument. */
         StringArg value(argv[*i], *i);
         return arg->asMultiStringOption()->strings.append(value) ? Okay : Fail;
       }
       default:
         MOZ_ASSUME_NOT_REACHED("unhandled argument kind");
-        return Fail;
     }
 }
 
 OptionParser::Result
 OptionParser::parseArgs(int inputArgc, char **argv)
 {
     JS_ASSERT(inputArgc >= 0);
     size_t argc = inputArgc;
--- a/js/src/vm/ForkJoin.cpp
+++ b/js/src/vm/ForkJoin.cpp
@@ -77,51 +77,51 @@ bool
 ForkJoinSlice::InitializeTLS()
 {
     return true;
 }
 
 JSRuntime *
 ForkJoinSlice::runtime()
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 bool
 ForkJoinSlice::check()
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 void
 ForkJoinSlice::requestGC(JS::gcreason::Reason reason)
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 void
 ForkJoinSlice::requestZoneGC(JS::Zone *zone, JS::gcreason::Reason reason)
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 void
 ParallelBailoutRecord::setCause(ParallelBailoutCause cause,
                                 JSScript *outermostScript,
                                 JSScript *currentScript,
                                 jsbytecode *currentPc)
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 void
 ParallelBailoutRecord::addTrace(JSScript *script,
                                 jsbytecode *pc)
 {
-    MOZ_NOT_REACHED("Not THREADSAFE build");
+    MOZ_ASSUME_NOT_REACHED("Not THREADSAFE build");
 }
 
 bool
 js::InSequentialOrExclusiveParallelSection()
 {
     return true;
 }
 
--- a/js/src/vm/ObjectImpl.cpp
+++ b/js/src/vm/ObjectImpl.cpp
@@ -381,17 +381,17 @@ DenseElementsHeader::getOwnElement(JSCon
 }
 
 bool
 SparseElementsHeader::getOwnElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index,
                                     unsigned resolveFlags, PropDesc *desc)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
 
-    MOZ_NOT_REACHED("NYI");
+    MOZ_ASSUME_NOT_REACHED("NYI");
 }
 
 template<typename T>
 static Value
 ElementToValue(const T &t)
 {
     return NumberValue(t);
 }
@@ -421,27 +421,27 @@ TypedElementsHeader<T>::getOwnElement(JS
 }
 
 bool
 ArrayBufferElementsHeader::getOwnElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index,
                                          unsigned resolveFlags, PropDesc *desc)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
 
-    MOZ_NOT_REACHED("NYI");
+    MOZ_ASSUME_NOT_REACHED("NYI");
 }
 
 bool
 SparseElementsHeader::defineElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index,
                                     const PropDesc &desc, bool shouldThrow, unsigned resolveFlags,
                                     bool *succeeded)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
 
-    MOZ_NOT_REACHED("NYI");
+    MOZ_ASSUME_NOT_REACHED("NYI");
 }
 
 bool
 DenseElementsHeader::defineElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index,
                                    const PropDesc &desc, bool shouldThrow, unsigned resolveFlags,
                                    bool *succeeded)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
@@ -562,17 +562,16 @@ js::GetOwnProperty(JSContext *cx, Handle
     NEW_OBJECT_REPRESENTATION_ONLY();
 
     JS_CHECK_RECURSION(cx, return false);
 
     Rooted<PropertyId> pid(cx, pid_);
 
     if (static_cast<JSObject *>(obj.get())->isProxy()) {
         MOZ_ASSUME_NOT_REACHED("NYI: proxy [[GetOwnProperty]]");
-        return false;
     }
 
     RootedShape shape(cx, obj->nativeLookup(cx, pid));
     if (!shape) {
         /* Not found: attempt to resolve it. */
         Class *clasp = obj->getClass();
         JSResolveOp resolve = clasp->resolve;
         if (resolve != JS_ResolveStub) {
@@ -605,17 +604,16 @@ js::GetOwnProperty(JSContext *cx, Handle
 
     if (shape->isAccessorDescriptor()) {
         *desc = PropDesc(shape->getterValue(), shape->setterValue(),
                          shape->enumerability(), shape->configurability());
         return true;
     }
 
     MOZ_ASSUME_NOT_REACHED("NYI: PropertyOp-based properties");
-    return false;
 }
 
 bool
 js::GetOwnElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index, unsigned resolveFlags,
                   PropDesc *desc)
 {
     ElementsHeader &header = obj->elementsHeader();
     switch (header.kind()) {
@@ -641,17 +639,16 @@ js::GetOwnElement(JSContext *cx, Handle<
         return header.asFloat32Elements().getOwnElement(cx, obj, index, resolveFlags, desc);
       case Float64Elements:
         return header.asFloat64Elements().getOwnElement(cx, obj, index, resolveFlags, desc);
       case ArrayBufferElements:
         return header.asArrayBufferElements().getOwnElement(cx, obj, index, resolveFlags, desc);
     }
 
     MOZ_ASSUME_NOT_REACHED("bad elements kind!");
-    return false;
 }
 
 bool
 js::GetProperty(JSContext *cx, Handle<ObjectImpl*> obj, Handle<ObjectImpl*> receiver,
                 Handle<PropertyId> pid, unsigned resolveFlags, MutableHandle<Value> vp)
 {
     NEW_OBJECT_REPRESENTATION_ONLY();
 
@@ -659,17 +656,16 @@ js::GetProperty(JSContext *cx, Handle<Ob
 
     Rooted<ObjectImpl*> current(cx, obj);
 
     do {
         MOZ_ASSERT(obj);
 
         if (Downcast(current)->isProxy()) {
             MOZ_ASSUME_NOT_REACHED("NYI: proxy [[GetP]]");
-            return false;
         }
 
         AutoPropDescRooter desc(cx);
         if (!GetOwnProperty(cx, current, pid, resolveFlags, &desc.getPropDesc()))
             return false;
 
         /* No property?  Recur or bottom out. */
         if (desc.isUndefined()) {
@@ -704,38 +700,35 @@ js::GetProperty(JSContext *cx, Handle<Ob
 
             bool ok = Invoke(cx, args);
             vp.set(args.rval());
             return ok;
         }
 
         /* Otherwise it's a PropertyOp-based property.  XXX handle this! */
         MOZ_ASSUME_NOT_REACHED("NYI: handle PropertyOp'd properties here");
-        return false;
     } while (false);
 
     MOZ_ASSUME_NOT_REACHED("buggy control flow");
-    return false;
 }
 
 bool
 js::GetElement(JSContext *cx, Handle<ObjectImpl*> obj, Handle<ObjectImpl*> receiver, uint32_t index,
                unsigned resolveFlags, Value *vp)
 {
     NEW_OBJECT_REPRESENTATION_ONLY();
 
     Rooted<ObjectImpl*> current(cx, obj);
 
     RootedValue getter(cx);
     do {
         MOZ_ASSERT(current);
 
         if (Downcast(current)->isProxy()) {
             MOZ_ASSUME_NOT_REACHED("NYI: proxy [[GetP]]");
-            return false;
         }
 
         PropDesc desc;
         if (!GetOwnElement(cx, current, index, resolveFlags, &desc))
             return false;
 
         /* No property?  Recur or bottom out. */
         if (desc.isUndefined()) {
@@ -771,37 +764,34 @@ js::GetElement(JSContext *cx, Handle<Obj
 
             bool ok = Invoke(cx, args);
             *vp = args.rval();
             return ok;
         }
 
         /* Otherwise it's a PropertyOp-based property.  XXX handle this! */
         MOZ_ASSUME_NOT_REACHED("NYI: handle PropertyOp'd properties here");
-        return false;
     } while (false);
 
     MOZ_ASSUME_NOT_REACHED("buggy control flow");
-    return false;
 }
 
 bool
 js::HasElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index, unsigned resolveFlags,
                bool *found)
 {
     NEW_OBJECT_REPRESENTATION_ONLY();
 
     Rooted<ObjectImpl*> current(cx, obj);
 
     do {
         MOZ_ASSERT(current);
 
         if (Downcast(current)->isProxy()) {
             MOZ_ASSUME_NOT_REACHED("NYI: proxy [[HasProperty]]");
-            return false;
         }
 
         PropDesc prop;
         if (!GetOwnElement(cx, current, index, resolveFlags, &prop))
             return false;
 
         if (!prop.isUndefined()) {
             *found = true;
@@ -812,17 +802,16 @@ js::HasElement(JSContext *cx, Handle<Obj
         if (current)
             continue;
 
         *found = false;
         return true;
     } while (false);
 
     MOZ_ASSUME_NOT_REACHED("buggy control flow");
-    return false;
 }
 
 bool
 js::DefineElement(JSContext *cx, Handle<ObjectImpl*> obj, uint32_t index, const PropDesc &desc,
                   bool shouldThrow, unsigned resolveFlags, bool *succeeded)
 {
     NEW_OBJECT_REPRESENTATION_ONLY();
 
@@ -862,37 +851,37 @@ js::DefineElement(JSContext *cx, Handle<
       case Float64Elements:
         return header.asFloat64Elements().defineElement(cx, obj, index, desc, shouldThrow,
                                                         resolveFlags, succeeded);
       case ArrayBufferElements:
         return header.asArrayBufferElements().defineElement(cx, obj, index, desc, shouldThrow,
                                                             resolveFlags, succeeded);
     }
 
-    MOZ_NOT_REACHED("bad elements kind!");
+    MOZ_ASSUME_NOT_REACHED("bad elements kind!");
 }
 
 bool
 SparseElementsHeader::setElement(JSContext *cx, Handle<ObjectImpl*> obj,
                                  Handle<ObjectImpl*> receiver, uint32_t index, const Value &v,
                                  unsigned resolveFlags, bool *succeeded)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
 
-    MOZ_NOT_REACHED("NYI");
+    MOZ_ASSUME_NOT_REACHED("NYI");
 }
 
 bool
 DenseElementsHeader::setElement(JSContext *cx, Handle<ObjectImpl*> obj,
                                 Handle<ObjectImpl*> receiver, uint32_t index, const Value &v,
                                 unsigned resolveFlags, bool *succeeded)
 {
     MOZ_ASSERT(this == &obj->elementsHeader());
 
-    MOZ_NOT_REACHED("NYI");
+    MOZ_ASSUME_NOT_REACHED("NYI");
 }
 
 template <typename T>
 bool
 TypedElementsHeader<T>::setElement(JSContext *cx, Handle<ObjectImpl*> obj,
                                    Handle<ObjectImpl*> receiver, uint32_t index, const Value &v,
                                    unsigned resolveFlags, bool *succeeded)
 {
@@ -957,17 +946,16 @@ js::SetElement(JSContext *cx, Handle<Obj
 
     MOZ_ASSERT(receiver);
 
     do {
         MOZ_ASSERT(current);
 
         if (Downcast(current)->isProxy()) {
             MOZ_ASSUME_NOT_REACHED("NYI: proxy [[SetP]]");
-            return false;
         }
 
         PropDesc ownDesc;
         if (!GetOwnElement(cx, current, index, resolveFlags, &ownDesc))
             return false;
 
         if (!ownDesc.isUndefined()) {
             if (ownDesc.isDataDescriptor()) {
@@ -1002,29 +990,27 @@ js::SetElement(JSContext *cx, Handle<Obj
                 args.setThis(ObjectValue(*current));
                 args[0] = v;
 
                 *succeeded = true;
                 return Invoke(cx, args);
             }
 
             MOZ_ASSUME_NOT_REACHED("NYI: setting PropertyOp-based property");
-            return false;
         }
 
         current = current->getProto();
         if (current)
             continue;
 
         PropDesc newDesc(v, PropDesc::Writable, PropDesc::Enumerable, PropDesc::Configurable);
         return DefineElement(cx, receiver, index, newDesc, false, resolveFlags, succeeded);
     } while (false);
 
     MOZ_ASSUME_NOT_REACHED("buggy control flow");
-    return false;
 }
 
 void
 AutoPropDescRooter::trace(JSTracer *trc)
 {
     gc::MarkValueRoot(trc, &propDesc.pd_, "AutoPropDescRooter pd");
     gc::MarkValueRoot(trc, &propDesc.value_, "AutoPropDescRooter value");
     gc::MarkValueRoot(trc, &propDesc.get_, "AutoPropDescRooter get");
--- a/js/src/vm/ObjectImpl.h
+++ b/js/src/vm/ObjectImpl.h
@@ -685,17 +685,17 @@ class TypedElementsHeader : public Eleme
   private:
     TypedElementsHeader(const TypedElementsHeader &other) MOZ_DELETE;
     void operator=(const TypedElementsHeader &other) MOZ_DELETE;
 };
 
 template<typename T> inline void
 TypedElementsHeader<T>::assign(uint32_t index, double d)
 {
-    MOZ_NOT_REACHED("didn't specialize for this element type");
+    MOZ_ASSUME_NOT_REACHED("didn't specialize for this element type");
 }
 
 template<> inline void
 TypedElementsHeader<uint8_clamped>::assign(uint32_t index, double d)
 {
     double i = ToInteger(d);
     uint8_t u = (i <= 0)
                 ? 0
@@ -1265,19 +1265,17 @@ class ObjectImpl : public gc::Cell
     }
     uint32_t getDenseCapacity() {
         JS_ASSERT(uninlinedIsNative());
         return getElementsHeader()->capacity;
     }
 
     bool makeElementsSparse(JSContext *cx) {
         NEW_OBJECT_REPRESENTATION_ONLY();
-
         MOZ_ASSUME_NOT_REACHED("NYI");
-        return false;
     }
 
     inline bool isProxy() const;
 
   protected:
 #ifdef DEBUG
     void checkShapeConsistency();
 #else
@@ -1394,19 +1392,17 @@ class ObjectImpl : public gc::Cell
         ConvertToSparse,
         Succeeded
     };
 
     DenseElementsResult ensureDenseElementsInitialized(JSContext *cx, uint32_t index,
                                                        uint32_t extra)
     {
         NEW_OBJECT_REPRESENTATION_ONLY();
-
         MOZ_ASSUME_NOT_REACHED("NYI");
-        return Failure;
     }
 
     /*
      * These functions are currently public for simplicity; in the long run
      * it may make sense to make at least some of them private.
      */
 
   public:
--- a/js/src/vm/RegExpObject.cpp
+++ b/js/src/vm/RegExpObject.cpp
@@ -400,17 +400,16 @@ RegExpShared::~RegExpShared()
 }
 
 void
 RegExpShared::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode error)
 {
     switch (error) {
       case JSC::Yarr::NoError:
         MOZ_ASSUME_NOT_REACHED("Called reportYarrError with value for no error");
-        return;
 #define COMPILE_EMSG(__code, __msg)                                                              \
       case JSC::Yarr::__code:                                                                    \
         if (ts)                                                                                  \
             ts->reportError(__msg);                                                              \
         else                                                                                     \
             JS_ReportErrorFlagsAndNumberUC(cx, JSREPORT_ERROR, js_GetErrorMessage, NULL, __msg); \
         return
       COMPILE_EMSG(PatternTooLarge, JSMSG_REGEXP_TOO_COMPLEX);
--- a/js/src/vm/Stack-inl.h
+++ b/js/src/vm/Stack-inl.h
@@ -606,17 +606,16 @@ AbstractFramePtr::isDebuggerFrame() cons
 {
     if (isStackFrame())
         return asStackFrame()->isDebuggerFrame();
 #ifdef JS_ION
     return asBaselineFrame()->isDebuggerFrame();
 #else
     MOZ_ASSUME_NOT_REACHED("Invalid frame");
 #endif
-    return false;
 }
 inline JSScript *
 AbstractFramePtr::script() const
 {
     if (isStackFrame())
         return asStackFrame()->script();
 #ifdef JS_ION
     return asBaselineFrame()->script();
--- a/js/src/vm/Stack.cpp
+++ b/js/src/vm/Stack.cpp
@@ -758,17 +758,16 @@ ScriptFrameIter::compartment() const
     switch (data_.state_) {
       case DONE:
         break;
       case SCRIPTED:
       case JIT:
         return data_.activations_.activation()->compartment();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NULL;
 }
 
 bool
 ScriptFrameIter::isFunctionFrame() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -780,17 +779,16 @@ ScriptFrameIter::isFunctionFrame() const
         if (data_.ionFrames_.isBaselineJS())
             return data_.ionFrames_.isFunctionFrame();
         return ionInlineFrames_.isFunctionFrame();
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 bool
 ScriptFrameIter::isGlobalFrame() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -802,17 +800,16 @@ ScriptFrameIter::isGlobalFrame() const
             return data_.ionFrames_.baselineFrame()->isGlobalFrame();
         JS_ASSERT(!script()->isForEval());
         return !script()->function();
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 bool
 ScriptFrameIter::isEvalFrame() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -824,48 +821,45 @@ ScriptFrameIter::isEvalFrame() const
             return data_.ionFrames_.baselineFrame()->isEvalFrame();
         JS_ASSERT(!script()->isForEval());
         return false;
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 bool
 ScriptFrameIter::isNonEvalFunctionFrame() const
 {
     JS_ASSERT(!done());
     switch (data_.state_) {
       case DONE:
         break;
       case SCRIPTED:
         return interpFrame()->isNonEvalFunctionFrame();
       case JIT:
         return !isEvalFrame() && isFunctionFrame();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 bool
 ScriptFrameIter::isGeneratorFrame() const
 {
     switch (data_.state_) {
       case DONE:
         break;
       case SCRIPTED:
         return interpFrame()->isGeneratorFrame();
       case JIT:
         return false;
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 bool
 ScriptFrameIter::isConstructing() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -877,17 +871,16 @@ ScriptFrameIter::isConstructing() const
         return data_.ionFrames_.isConstructing();
 #else
         break;
 #endif        
       case SCRIPTED:
         return interpFrame()->isConstructing();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 AbstractFramePtr
 ScriptFrameIter::abstractFramePtr() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -897,17 +890,16 @@ ScriptFrameIter::abstractFramePtr() cons
             return data_.ionFrames_.baselineFrame();
 #endif
         break;
       case SCRIPTED:
         JS_ASSERT(interpFrame());
         return AbstractFramePtr(interpFrame());
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NullFramePtr();
 }
 
 void
 ScriptFrameIter::updatePcQuadratic()
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -968,17 +960,16 @@ ScriptFrameIter::callee() const
             return data_.ionFrames_.callee();
         JS_ASSERT(data_.ionFrames_.isOptimizedJS());
         return ionInlineFrames_.callee();
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NULL;
 }
 
 Value
 ScriptFrameIter::calleev() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -988,17 +979,16 @@ ScriptFrameIter::calleev() const
       case JIT:
 #ifdef JS_ION
         return ObjectValue(*callee());
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return Value();
 }
 
 unsigned
 ScriptFrameIter::numActualArgs() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1012,17 +1002,16 @@ ScriptFrameIter::numActualArgs() const
 
         JS_ASSERT(data_.ionFrames_.isBaselineJS());
         return data_.ionFrames_.numActualArgs();
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return 0;
 }
 
 Value
 ScriptFrameIter::unaliasedActual(unsigned i, MaybeCheckAliasing checkAliasing) const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1032,17 +1021,16 @@ ScriptFrameIter::unaliasedActual(unsigne
 #ifdef JS_ION
         JS_ASSERT(data_.ionFrames_.isBaselineJS());
         return data_.ionFrames_.baselineFrame()->unaliasedActual(i, checkAliasing);
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NullValue();
 }
 
 JSObject *
 ScriptFrameIter::scopeChain() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1053,17 +1041,16 @@ ScriptFrameIter::scopeChain() const
         return data_.ionFrames_.baselineFrame()->scopeChain();
 #else
         break;
 #endif
       case SCRIPTED:
         return interpFrame()->scopeChain();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NULL;
 }
 
 CallObject &
 ScriptFrameIter::callObj() const
 {
     JS_ASSERT(callee()->isHeavyweight());
 
     JSObject *pobj = scopeChain();
@@ -1084,17 +1071,16 @@ ScriptFrameIter::hasArgsObj() const
 #ifdef JS_ION
         JS_ASSERT(data_.ionFrames_.isBaselineJS());
         return data_.ionFrames_.baselineFrame()->hasArgsObj();
 #else
         break;
 #endif
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return false;
 }
 
 ArgumentsObject &
 ScriptFrameIter::argsObj() const
 {
     JS_ASSERT(hasArgsObj());
 
     switch (data_.state_) {
@@ -1106,17 +1092,16 @@ ScriptFrameIter::argsObj() const
         return data_.ionFrames_.baselineFrame()->argsObj();
 #else
         break;
 #endif
       case SCRIPTED:
         return interpFrame()->argsObj();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return interpFrame()->argsObj();
 }
 
 bool
 ScriptFrameIter::computeThis() const
 {
     JS_ASSERT(!done());
     if (!isIon()) {
         JS_ASSERT(data_.cx_);
@@ -1138,17 +1123,16 @@ ScriptFrameIter::thisv() const
         return data_.ionFrames_.baselineFrame()->thisValue();
 #else
         break;
 #endif
       case SCRIPTED:
         return interpFrame()->thisValue();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NullValue();
 }
 
 Value
 ScriptFrameIter::returnValue() const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1157,17 +1141,16 @@ ScriptFrameIter::returnValue() const
         if (data_.ionFrames_.isBaselineJS())
             return *data_.ionFrames_.baselineFrame()->returnValue();
 #endif
         break;
       case SCRIPTED:
         return interpFrame()->returnValue();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NullValue();
 }
 
 void
 ScriptFrameIter::setReturnValue(const Value &v)
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1202,17 +1185,16 @@ ScriptFrameIter::numFrameSlots() const
         break;
 #endif
       }
       case SCRIPTED:
         JS_ASSERT(data_.interpFrames_.sp() >= interpFrame()->base());
         return data_.interpFrames_.sp() - interpFrame()->base();
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return 0;
 }
 
 Value
 ScriptFrameIter::frameSlotValue(size_t index) const
 {
     switch (data_.state_) {
       case DONE:
         break;
@@ -1228,17 +1210,16 @@ ScriptFrameIter::frameSlotValue(size_t i
         return *data_.ionFrames_.baselineFrame()->valueSlot(index);
 #else
         break;
 #endif
       case SCRIPTED:
           return interpFrame()->base()[index];
     }
     MOZ_ASSUME_NOT_REACHED("Unexpected state");
-    return NullValue();
 }
 
 #if defined(_MSC_VER)
 # pragma optimize("", on)
 #endif
 
 /*****************************************************************************/
 
@@ -1257,17 +1238,16 @@ bool
 AbstractFramePtr::hasPushedSPSFrame() const
 {
     if (isStackFrame())
         return asStackFrame()->hasPushedSPSFrame();
 #ifdef JS_ION
     return asBaselineFrame()->hasPushedSPSFrame();
 #else
     MOZ_ASSUME_NOT_REACHED("Invalid frame");
-    return false;
 #endif
 }
 
 #ifdef DEBUG
 void
 js::CheckLocalUnaliased(MaybeCheckAliasing checkAliasing, JSScript *script,
                         StaticBlockObject *maybeBlock, unsigned i)
 {
--- a/js/xpconnect/src/XPCJSRuntime.cpp
+++ b/js/xpconnect/src/XPCJSRuntime.cpp
@@ -288,17 +288,17 @@ bool CompartmentPrivate::TryParseLocatio
             return true;
 
         // Current chain item couldn't be parsed.
         // Don't forget whitespace in " -> "
         idx -= 1;
         // Strip current item and continue
         chain = Substring(chain, 0, idx);
     }
-    MOZ_NOT_REACHED("Chain parser loop does not terminate");
+    MOZ_ASSUME_NOT_REACHED("Chain parser loop does not terminate");
 }
 
 bool CompartmentPrivate::TryParseLocationURICandidate(const nsACString& uristr)
 {
     nsCOMPtr<nsIURI> uri;
     if (NS_FAILED(NS_NewURI(getter_AddRefs(uri), uristr)))
         return false;
 
--- a/js/xpconnect/wrappers/WrapperFactory.cpp
+++ b/js/xpconnect/wrappers/WrapperFactory.cpp
@@ -618,17 +618,17 @@ WrapperFactory::WrapForSameCompartmentXr
 
     // Select the appropriate proxy handler.
     Wrapper *wrapper = NULL;
     if (type == XrayForWrappedNative)
         wrapper = &SCPermissiveXrayXPCWN::singleton;
     else if (type == XrayForDOMObject)
         wrapper = &SCPermissiveXrayDOM::singleton;
     else
-        MOZ_NOT_REACHED("Bad Xray type");
+        MOZ_ASSUME_NOT_REACHED("Bad Xray type");
 
     // Make the Xray.
     JSObject *parent = JS_GetGlobalForObject(cx, obj);
     return Wrapper::New(cx, obj, NULL, parent, wrapper);
 }
 
 
 bool
--- a/js/xpconnect/wrappers/XrayWrapper.cpp
+++ b/js/xpconnect/wrappers/XrayWrapper.cpp
@@ -143,22 +143,22 @@ public:
     // properties.
     virtual bool resolveOwnProperty(JSContext *cx, Wrapper &jsWrapper,
                                     HandleObject wrapper, HandleObject holder,
                                     HandleId id, JSPropertyDescriptor *desc, unsigned flags);
 
     static bool call(JSContext *cx, HandleObject wrapper,
                      const JS::CallArgs &args, js::Wrapper& baseInstance)
     {
-        MOZ_NOT_REACHED("Call trap currently implemented only for XPCWNs");
+        MOZ_ASSUME_NOT_REACHED("Call trap currently implemented only for XPCWNs");
     }
     static bool construct(JSContext *cx, HandleObject wrapper,
                           const JS::CallArgs &args, js::Wrapper& baseInstance)
     {
-        MOZ_NOT_REACHED("Call trap currently implemented only for XPCWNs");
+        MOZ_ASSUME_NOT_REACHED("Call trap currently implemented only for XPCWNs");
     }
 
     virtual void preserveWrapper(JSObject *target) = 0;
 
     JSObject* getExpandoObject(JSContext *cx, HandleObject target,
                                HandleObject consumer);
     JSObject* ensureExpandoObject(JSContext *cx, HandleObject wrapper,
                                   HandleObject target);
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -9758,17 +9758,16 @@ nsCSSFrameConstructor::CreateNeededTable
         break;
       case eTypeTable:
         // Either colgroup or rowgroup, depending on what we're grouping.
         wrapperType = groupingParentType == eTypeColGroup ?
           eTypeColGroup : eTypeRowGroup;
         break;
       default:
         MOZ_CRASH("Colgroups should be suppresing non-col child items");
-        break;
     }
 
     const PseudoParentData& pseudoData = sPseudoParentData[wrapperType];
     nsIAtom* pseudoType = *pseudoData.mPseudoType;
     nsStyleContext* parentStyle = aParentFrame->StyleContext();
     nsIContent* parentContent = aParentFrame->GetContent();
 
     if (pseudoType == nsCSSAnonBoxes::table &&
--- a/layout/generic/nsFlexContainerFrame.cpp
+++ b/layout/generic/nsFlexContainerFrame.cpp
@@ -1896,18 +1896,16 @@ FlexboxAxisTracker::FlexboxAxisTracker(n
     case NS_STYLE_FLEX_DIRECTION_COLUMN:
       mMainAxis = blockDimension;
       break;
     case NS_STYLE_FLEX_DIRECTION_COLUMN_REVERSE:
       mMainAxis = GetReverseAxis(blockDimension);
       break;
     default:
       MOZ_CRASH("Unexpected computed value for 'flex-flow' property");
-      mMainAxis = inlineDimension;
-      break;
   }
 
   // Determine cross axis:
   // (This is set up so that a bogus |flexDirection| value will
   // give us blockDimension.
   if (flexDirection == NS_STYLE_FLEX_DIRECTION_COLUMN ||
       flexDirection == NS_STYLE_FLEX_DIRECTION_COLUMN_REVERSE) {
     mCrossAxis = inlineDimension;
--- a/modules/libjar/nsJARProtocolHandler.cpp
+++ b/modules/libjar/nsJARProtocolHandler.cpp
@@ -71,17 +71,16 @@ nsJARProtocolHandler::RemoteOpenFileInPr
                                            nsIRemoteOpenFileListener *aListener)
 {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(aRemoteFile);
     MOZ_ASSERT(aListener);
 
     if (IsMainProcess()) {
         MOZ_CRASH("Shouldn't be called in the main process!");
-        return false;
     }
 
     RemoteFileListenerArray *listeners;
     if (mRemoteFileListeners.Get(aRemoteFile, &listeners)) {
         listeners->AppendElement(aListener);
         return true;
     }
 
@@ -95,17 +94,16 @@ void
 nsJARProtocolHandler::RemoteOpenFileComplete(nsIHashable *aRemoteFile,
                                              nsresult aStatus)
 {
     MOZ_ASSERT(NS_IsMainThread());
     MOZ_ASSERT(aRemoteFile);
 
     if (IsMainProcess()) {
         MOZ_CRASH("Shouldn't be called in the main process!");
-        return;
     }
 
     RemoteFileListenerArray *tempListeners;
     if (!mRemoteFileListeners.Get(aRemoteFile, &tempListeners)) {
         return;
     }
 
     // Save the listeners in a stack array. The call to Remove() below will
--- a/modules/libpref/src/prefapi.cpp
+++ b/modules/libpref/src/prefapi.cpp
@@ -289,17 +289,16 @@ SetPrefValue(const char* aPrefName, cons
     case dom::PrefValue::Tint32_t:
         return PREF_SetIntPref(aPrefName, aValue.get_int32_t(),
                                setDefault);
     case dom::PrefValue::Tbool:
         return PREF_SetBoolPref(aPrefName, aValue.get_bool(),
                                 setDefault);
     default:
         MOZ_CRASH();
-        return NS_ERROR_FAILURE;
     }
 }
 
 nsresult
 pref_SetPref(const dom::PrefSetting& aPref)
 {
     const char* prefName = aPref.name().get();
     const dom::MaybePrefValue& defaultValue = aPref.defaultValue();
--- a/netwerk/ipc/RemoteOpenFileChild.cpp
+++ b/netwerk/ipc/RemoteOpenFileChild.cpp
@@ -199,20 +199,17 @@ void
 RemoteOpenFileChild::OnCachedFileDescriptor(const nsAString& aPath,
                                             const FileDescriptor& aFD)
 {
 #ifdef DEBUG
   if (!aPath.IsEmpty()) {
     MOZ_ASSERT(mFile);
 
     nsString path;
-    if (NS_FAILED(mFile->GetPath(path))) {
-      MOZ_CRASH("Couldn't get path from file!");
-    }
-
+    MOZ_ASSERT(NS_SUCCEEDED(mFile->GetPath(path)));
     MOZ_ASSERT(path == aPath, "Paths don't match!");
   }
 #endif
 
   HandleFileDescriptorAndNotifyListener(aFD, /* aFromRecvDelete */ false);
 }
 
 void
--- a/security/manager/ssl/src/ScopedNSSTypes.h
+++ b/security/manager/ssl/src/ScopedNSSTypes.h
@@ -48,17 +48,16 @@ uint8_t_ptr_cast(const char * p) { retur
 
 // IMPORTANT: This must be called immediately after the function that set the
 // error code. Prefer using MapSECStatus to this.
 inline nsresult
 PRErrorCode_to_nsresult(PRErrorCode error)
 {
   if (!error) {
     MOZ_CRASH("Function failed without calling PR_GetError");
-    return NS_ERROR_UNEXPECTED;
   }
 
   // From NSSErrorsService::GetXPCOMFromNSSError
   // XXX Don't make up nsresults, it's supposed to be an enum (bug 778113)
   return (nsresult)NS_ERROR_GENERATE_FAILURE(NS_ERROR_MODULE_SECURITY,
                                              -1 * error);
 }
 
--- a/security/manager/ssl/src/nsUsageArrayHelper.cpp
+++ b/security/manager/ssl/src/nsUsageArrayHelper.cpp
@@ -64,17 +64,16 @@ nsUsageArrayHelper::check(uint32_t previ
                           SECCertificateUsage aCertUsage,
                           PRTime time,
                           CertVerifier::Flags flags,
                           uint32_t &aCounter,
                           PRUnichar **outUsages)
 {
   if (!aCertUsage) {
     MOZ_CRASH("caller should have supplied non-zero aCertUsage");
-    return nsIX509Cert::NOT_VERIFIED_UNKNOWN;
   }
 
   if (isFatalError(previousCheckResult)) {
       return previousCheckResult;
   }
 
   nsAutoCString typestr;
   switch (aCertUsage) {
@@ -111,17 +110,16 @@ nsUsageArrayHelper::check(uint32_t previ
   case certificateUsageStatusResponder:
     typestr = "VerifyStatusResponder";
     break;
   case certificateUsageAnyCA:
     typestr = "VerifyAnyCA";
     break;
   default:
     MOZ_CRASH("unknown cert usage passed to check()");
-    return nsIX509Cert::NOT_VERIFIED_UNKNOWN;
   }
 
   SECStatus rv = certVerifier->VerifyCert(mCert, aCertUsage,
                          time, nullptr /*XXX:wincx*/, flags);
 
   if (rv == SECSuccess) {
     typestr.Append(suffix);
     nsAutoString verifyDesc;
--- a/toolkit/components/telemetry/Telemetry.cpp
+++ b/toolkit/components/telemetry/Telemetry.cpp
@@ -667,17 +667,16 @@ JSHistogram_Snapshot(JSContext *cx, unsi
   case REFLECT_CORRUPT:
     JS_ReportError(cx, "Histogram is corrupt");
     return JS_FALSE;
   case REFLECT_OK:
     JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(snapshot));
     return JS_TRUE;
   default:
     MOZ_CRASH("unhandled reflection status");
-    return JS_FALSE;
   }
 }
 
 JSBool
 JSHistogram_Clear(JSContext *cx, unsigned argc, JS::Value *vp)
 {
   JSObject *obj = JS_THIS_OBJECT(cx, vp);
   if (!obj) {
--- a/toolkit/identity/IdentityCryptoService.cpp
+++ b/toolkit/identity/IdentityCryptoService.cpp
@@ -352,21 +352,19 @@ GenerateKeyPair(PK11SlotInfo * slot,
                                      PR_FALSE /*isPerm*/,
                                      PR_TRUE /*isSensitive*/,
                                      NULL /*&pwdata*/);
   if (!*privateKey) {
     MOZ_ASSERT(!*publicKey);
     return PRErrorCode_to_nsresult(PR_GetError());
   }
   if (!*publicKey) {
-	SECKEY_DestroyPrivateKey(*privateKey);
-	*privateKey = NULL;
-    MOZ_CRASH("PK11_GnerateKeyPair returned private key without public "
-                    "key");
-    return NS_ERROR_UNEXPECTED;
+	  SECKEY_DestroyPrivateKey(*privateKey);
+	  *privateKey = NULL;
+    MOZ_CRASH("PK11_GnerateKeyPair returned private key without public key");
   }
 
   return NS_OK;
 }
 
 
 MOZ_WARN_UNUSED_RESULT nsresult
 GenerateRSAKeyPair(PK11SlotInfo * slot,
@@ -464,17 +462,16 @@ KeyGenRunnable::Run()
         case rsaKey:
           mRv = GenerateRSAKeyPair(slot, &privk, &pubk);
           break;
         case dsaKey:
           mRv = GenerateDSAKeyPair(slot, &privk, &pubk);
           break;
         default:
           MOZ_CRASH("unknown key type");
-          mRv = NS_ERROR_UNEXPECTED;
         }
 
         PK11_FreeSlot(slot);
 
         if (NS_SUCCEEDED(mRv)) {
           MOZ_ASSERT(privk);
           MOZ_ASSERT(pubk);
 		  // mKeyPair will take over ownership of privk and pubk
--- a/widget/gonk/nsWindow.cpp
+++ b/widget/gonk/nsWindow.cpp
@@ -170,17 +170,16 @@ nsWindow::nsWindow()
             break;
         case nsIScreen::ROTATION_180_DEG:
             sRotationMatrix.Translate(gfxPoint(gScreenBounds.width,
                                                gScreenBounds.height));
             sRotationMatrix.Rotate(M_PI);
             break;
         default:
             MOZ_CRASH("Unknown rotation");
-            break;
         }
         sVirtualBounds = gScreenBounds;
 
         sScreenInitialized = true;
 
         nsAppShell::NotifyScreenInitialized();
 
         // This is a hack to force initialization of the compositor
@@ -843,17 +842,16 @@ ComputeOrientation(uint32_t aRotation, c
     case nsIScreen::ROTATION_180_DEG:
         return (naturallyPortrait ? eScreenOrientation_PortraitSecondary : 
                 eScreenOrientation_LandscapeSecondary);
     case nsIScreen::ROTATION_270_DEG:
         return (naturallyPortrait ? eScreenOrientation_LandscapeSecondary : 
                 eScreenOrientation_PortraitSecondary);
     default:
         MOZ_CRASH("Gonk screen must always have a known rotation");
-        return eScreenOrientation_None;
     }
 }
 
 /*static*/ uint32_t
 nsScreenGonk::GetRotation()
 {
     return sScreenRotation;
 }
--- a/widget/gtk2/nsGtkKeyUtils.cpp
+++ b/widget/gtk2/nsGtkKeyUtils.cpp
@@ -492,17 +492,16 @@ KeymapWrapper::InitBySystemSettings()
             case INDEX_LEVEL3:
                 modifier = LEVEL3;
                 break;
             case INDEX_LEVEL5:
                 modifier = LEVEL5;
                 break;
             default:
                 MOZ_CRASH("All indexes must be handled here");
-                break;
         }
         for (uint32_t j = 0; j < ArrayLength(mod); j++) {
             if (modifier == mod[j]) {
                 mModifierMasks[i] |= 1 << (j + 3);
             }
         }
     }
 
--- a/widget/os2/nsWindow.cpp
+++ b/widget/os2/nsWindow.cpp
@@ -2522,17 +2522,16 @@ PlatformToNSAttr(uint8_t aAttr)
     case CP_ATTR_TARGET_NOTCONVERTED:
       return NS_TEXTRANGE_SELECTEDRAWTEXT;
 
     case CP_ATTR_TARGET_CONVERTED:
       return NS_TEXTRANGE_SELECTEDCONVERTEDTEXT;
 
     default:
       MOZ_CRASH("unknown attribute");
-      return NS_TEXTRANGE_RAWINPUT;
   }
 }
 
 bool nsWindow::ImeConversionString(HIMI himi)
 {
   ULONG ulBufLen;
   // Get a buffer size
   ulBufLen = 0;
--- a/widget/windows/KeyboardLayout.cpp
+++ b/widget/windows/KeyboardLayout.cpp
@@ -493,17 +493,16 @@ NativeKey::NativeKey(nsWindowBase* aWidg
             break;
           case VK_SHIFT:
             // Neither left shift nor right shift is not an extended key,
             // let's use VK_LSHIFT for invalid scan code.
             mVirtualKeyCode = VK_LSHIFT;
             break;
           default:
             MOZ_CRASH("Unsupported mOriginalVirtualKeyCode");
-            break;
         }
         break;
       }
 
       NS_ASSERTION(!mVirtualKeyCode,
                    "mVirtualKeyCode has been computed already");
 
       // Otherwise, compute the virtual keycode with MapVirtualKeyEx().
@@ -530,34 +529,32 @@ NativeKey::NativeKey(nsWindowBase* aWidg
           if (mVirtualKeyCode != VK_LSHIFT && mVirtualKeyCode != VK_RSHIFT) {
             // Neither left shift nor right shift is not an extended key,
             // let's use VK_LSHIFT for invalid scan code.
             mVirtualKeyCode = VK_LSHIFT;
           }
           break;
         default:
           MOZ_CRASH("Unsupported mOriginalVirtualKeyCode");
-          break;
       }
       break;
     }
     case WM_CHAR:
     case WM_UNICHAR:
     case WM_SYSCHAR:
       // We cannot compute the virtual key code from WM_CHAR message on WinXP
       // if it's caused by an extended key.
       if (!canComputeVirtualKeyCodeFromScanCode) {
         break;
       }
       mVirtualKeyCode = mOriginalVirtualKeyCode =
         ComputeVirtualKeyCodeFromScanCodeEx();
       break;
     default:
       MOZ_CRASH("Unsupported message");
-      break;
   }
 
   if (!mVirtualKeyCode) {
     mVirtualKeyCode = mOriginalVirtualKeyCode;
   }
 
   mDOMKeyCode =
     keyboardLayout->ConvertNativeKeyCodeToDOMKeyCode(mOriginalVirtualKeyCode);
@@ -733,17 +730,16 @@ NativeKey::InitKeyEvent(nsKeyEvent& aKey
       // state of IME.
       aKeyEvent.mFlags.mDefaultPrevented =
         (mOriginalVirtualKeyCode == VK_MENU && mMsg.message != WM_SYSKEYUP);
       break;
     case NS_KEY_PRESS:
       break;
     default:
       MOZ_CRASH("Invalid event message");
-      break;
   }
 
   aKeyEvent.mKeyNameIndex = mKeyNameIndex;
   aKeyEvent.location = GetKeyLocation();
   aModKeyState.InitInputEvent(aKeyEvent);
 }
 
 bool
@@ -1065,17 +1061,16 @@ NativeKey::RemoveFollowingCharMessage() 
   if (mIsFakeCharMsg) {
     return mCharMsg;
   }
 
   MSG msg;
   if (!WinUtils::GetMessage(&msg, mMsg.hwnd,
                             mCharMsg.message, mCharMsg.message)) {
     MOZ_CRASH("We lost the following char message");
-    return mCharMsg;
   }
 
   MOZ_ASSERT(mCharMsg.message == msg.message &&
              mCharMsg.wParam == msg.wParam &&
              mCharMsg.lParam == msg.lParam);
 
   return mCharMsg;
 }
--- a/widget/windows/nsTextStore.cpp
+++ b/widget/windows/nsTextStore.cpp
@@ -1020,17 +1020,16 @@ nsTextStore::FlushPendingActions()
           static_cast<uint32_t>(action.mSelectionStart);
         selectionSet.mLength =
           static_cast<uint32_t>(action.mSelectionLength);
         selectionSet.mReversed = action.mSelectionReversed;
         break;
       }
       default:
         MOZ_CRASH("unexpected action type");
-        break;
     }
 
     if (mWidget && !mWidget->Destroyed()) {
       continue;
     }
 
     mComposition.EnsureLayoutChangeTimerStopped();
 
--- a/widget/xpwidgets/WidgetUtils.cpp
+++ b/widget/xpwidgets/WidgetUtils.cpp
@@ -26,14 +26,13 @@ ComputeTransformForRotation(const nsIntR
         transform.Rotate(M_PI);
         break;
     case ROTATION_270:
         transform.Translate(gfxPoint(0, aBounds.height));
         transform.Rotate(M_PI * 3 / 2);
         break;
     default:
         MOZ_CRASH("Unknown rotation");
-        break;
     }
     return transform;
 }
 
 } // namespace mozilla
--- a/xpcom/ds/nsAtomTable.cpp
+++ b/xpcom/ds/nsAtomTable.cpp
@@ -479,17 +479,16 @@ NS_SizeOfAtomTablesIncludingThis(MallocS
 }
 
 #define ATOM_HASHTABLE_INITIAL_SIZE  4096
 
 static void HandleOOM()
 {
   fputs("Out of memory allocating atom hashtable.\n", stderr);
   MOZ_CRASH();
-  MOZ_CRASH();
 }
 
 static inline void
 EnsureTableExists()
 {
   if (!gAtomTable.ops &&
       !PL_DHashTableInit(&gAtomTable, &AtomTableOps, 0,
                          sizeof(AtomTableEntry), ATOM_HASHTABLE_INITIAL_SIZE)) {
--- a/xpcom/glue/nsISupportsImpl.h
+++ b/xpcom/glue/nsISupportsImpl.h
@@ -62,17 +62,17 @@ private:
 
 #define NS_DECL_OWNINGTHREAD            nsAutoOwningThread _mOwningThread;
 #define NS_ASSERT_OWNINGTHREAD(_class) \
   NS_CheckThreadSafe(_mOwningThread.GetThread(), #_class " not thread-safe")
 #define NS_ASSERT_OWNINGTHREAD_AND_NOT_CCTHREAD(_class) \
   do { \
     if (NS_IsCycleCollectorThread()) { \
       MOZ_CRASH("Changing refcount of " #_class " object during Traverse is " \
-                      "not permitted!"); \
+                "not permitted!"); \
     } \
     else { \
       NS_ASSERT_OWNINGTHREAD(_class); \
     } \
   } while (0)
 
 #else // !DEBUG
 
--- a/xpcom/glue/nsTArray.h
+++ b/xpcom/glue/nsTArray.h
@@ -260,17 +260,16 @@ struct nsTArrayInfallibleAllocator : nsT
   static void SizeTooBig() {
     HandleOOM();
   }
 
 private:
   static void HandleOOM() {
     fputs("Out of memory allocating nsTArray buffer.\n", stderr);
     MOZ_CRASH();
-    MOZ_CRASH();
   }
 };
 
 #endif
 
 // nsTArray_base stores elements into the space allocated beyond
 // sizeof(*this).  This is done to minimize the size of the nsTArray
 // object when it is empty.