diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Exceptions.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Exceptions.java
index b2a0d0b..b316f5c 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Exceptions.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Exceptions.java
@@ -43,7 +43,12 @@
     var jse = e.__gwt$exception;
     if (!jse) {
       jse = @com.google.gwt.core.client.JavaScriptException::new(Ljava/lang/Object;)(e);
-      e.__gwt$exception = jse;
+      try {
+        // See https://code.google.com/p/google-web-toolkit/issues/detail?id=8449
+        e.__gwt$exception = jse;
+      } catch (e) {
+        // The exception is not cachable
+      }
     }
     return jse;
   }-*/;
diff --git a/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java b/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
index 093396e..67d89fa 100644
--- a/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
+++ b/user/test/com/google/gwt/core/client/JavaScriptExceptionTest.java
@@ -54,8 +54,16 @@
     throw e;
   }-*/;
 
-  private static native void throwTypeError(Object e) /*-{
-    e.notExistsWillThrowTypeError();
+  private static native void throwTypeError() /*-{
+    "dummy".notExistsWillThrowTypeError();
+  }-*/;
+
+  private static native void throwSvgError() /*-{
+    // In Firefox, this throws an object (not Error):
+    $doc.createElementNS("http://www.w3.org/2000/svg", "text").getBBox();
+
+    // For other browsers, make sure an exception is thrown to keep the test simple
+    throw new Error;
   }-*/;
 
   private static void throwSandwichJava(Object e) {
@@ -312,7 +320,7 @@
   @DoNotRunWith(Platform.HtmlUnitUnknown)
   public void testTypeError() {
     try {
-      throwTypeError("myobj");
+      throwTypeError();
       fail();
     } catch (JavaScriptException e) {
       assertTypeError(e);
@@ -321,6 +329,17 @@
     }
   }
 
+  public void testSvgError() {
+    try {
+      throwSvgError();
+      fail();
+    } catch (JavaScriptException e) {
+      assertTrue(e.isThrownSet());
+      e = (JavaScriptException) javaNativeJavaSandwich(e);
+      assertTrue(e.isThrownSet());
+    }
+  }
+
   private static void assertTypeError(JavaScriptException e) {
     assertEquals("TypeError", e.getName());
     assertTrue(e.getDescription().contains("notExistsWillThrowTypeError"));
