Improvement primitive cast optimizations.

Change-Id: I023de40e620a80ae40ff757c504d13553529c342
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
index 8c3de56..390b828 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java
@@ -51,7 +51,11 @@
 
   @Override
   public boolean hasSideEffects() {
-    // Any live cast operations might throw a ClassCastException
+    if (castType.isPrimitiveType()) {
+      // Primitive casts do not throw and only have side effects if the expression has side effects.
+      return expr.hasSideEffects();
+    }
+    // Any live non-primitive cast operations might throw a ClassCastException
     //
     // TODO: revisit this when we support the concept of whether something
     // can/must complete normally!
diff --git a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
index c4d14cc..5d27b57 100644
--- a/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
+++ b/user/test/com/google/gwt/dev/jjs/optimized/CastOptimizationTest.java
@@ -62,6 +62,7 @@
   }
 
   private static Object field;
+  private static double doubleField = new Random().nextDouble();
 
   private static int randomNumber = new Random().nextInt(42);
 
@@ -123,6 +124,10 @@
     return ((NativeNumber) field);
   }
 
+  public static void castInt() {
+    int num = ((int) doubleField);
+  }
+
   private static native String getGeneratedCastFunctionDefinition() /*-{
     return function() {
       @CastOptimizationTest::castOp()();
@@ -134,6 +139,7 @@
       @CastOptimizationTest::castNativeNumber()();
       @CastOptimizationTest::castNativeArray()();
       @CastOptimizationTest::castNativeObject()();
+      @CastOptimizationTest::castInt()();
     }.toString();
   }-*/;