diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsFlowFunction.java b/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsFlowFunction.java
index 32bcd22..17ec67e 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsFlowFunction.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsFlowFunction.java
@@ -18,6 +18,7 @@
 import com.google.gwt.dev.jjs.ast.JBooleanLiteral;
 import com.google.gwt.dev.jjs.ast.JExpression;
 import com.google.gwt.dev.jjs.ast.JLocal;
+import com.google.gwt.dev.jjs.ast.JNullLiteral;
 import com.google.gwt.dev.jjs.ast.JParameter;
 import com.google.gwt.dev.jjs.ast.JValueLiteral;
 import com.google.gwt.dev.jjs.ast.JVariable;
@@ -106,7 +107,14 @@
           if (expression != null) {
             JValueLiteral valueLiteral = 
               ExpressionEvaluator.evaluate(expression, assumption.unwrap());
-            assumption.set(var, valueLiteral);
+            if (valueLiteral != null && 
+                (valueLiteral.getType() == var.getType() || 
+                 valueLiteral instanceof JNullLiteral)) {
+              assumption.set(var, valueLiteral);
+            } else {
+              // Don't bother to try to get conversions right.
+              assumption.set(var, null);
+            }
           } else {
             assumption.set(var, null);
           }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/copy/CopyFlowFunction.java b/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/copy/CopyFlowFunction.java
index 4257b00..3c0be2b 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/copy/CopyFlowFunction.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/gflow/copy/CopyFlowFunction.java
@@ -66,7 +66,8 @@
         
         if (original != targetVariable) {
           result.kill(targetVariable);
-          if (isSupportedVar(original)) {
+          if (isSupportedVar(original) && 
+              original.getType() == targetVariable.getType()) {
             result.addCopy(original, targetVariable);
           }
         } else {
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/DataflowOptimizerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/DataflowOptimizerTest.java
index 26f11da..ef88dd3 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/DataflowOptimizerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/DataflowOptimizerTest.java
@@ -262,6 +262,20 @@
        );
   }
 
+  public void testImplicitConversion() throws Exception {
+    optimize("long", 
+        "int bar = 0x12345678;",
+        "bar = bar * 1234;",
+        "long lng = bar;",
+        "long lng8 = lng << 8;",
+        "return lng8;"
+        ).into(
+            "  int bar;", 
+            "  long lng = -1068970384;", 
+            "  long lng8 = lng << 8;", 
+            "  return lng8;");
+  }
+
   @Override
   protected boolean optimizeMethod(JProgram program, JMethod method) {
     return DataflowOptimizer.exec(program, method).didChange();
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsAnalysisTransformationTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsAnalysisTransformationTest.java
index 840e7de..6b7af48 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsAnalysisTransformationTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/constants/ConstantsAnalysisTransformationTest.java
@@ -134,6 +134,21 @@
     transform("boolean", "String s = baz(); if (s == null) return false; return s != null;").into(
         "String s = EntryPoint.baz();", "if (s == null)", "  return false;", "return s != null;");
   }
+  
+  public void testImplicitCasts() throws Exception {
+    transform("long", 
+        "int bar = 0x12345678;",
+        "bar = bar * 1234;",
+        "long lng = bar;",
+        "long lng8 = lng << 8;",
+        "return lng8;"
+        ).into(
+            "  int bar = 305419896;", 
+            "  bar = -1068970384;",
+            "  long lng = -1068970384;", 
+            "  long lng8 = lng << 8;", 
+            "  return lng8;");
+  }
 
   @Override
   protected IntegratedAnalysis<CfgNode<?>, CfgEdge, CfgTransformer, Cfg, 
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/copy/CopyAnalysisTransformationTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/copy/CopyAnalysisTransformationTest.java
index e9c3030..617ea5b 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/copy/CopyAnalysisTransformationTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/gflow/copy/CopyAnalysisTransformationTest.java
@@ -62,6 +62,21 @@
         "return i;");
   }
 
+  public void testImplicitConversion() throws Exception {
+    transform("long", 
+        "int bar = 0x12345678;",
+        "bar = bar * 1234;",
+        "long lng = bar;",
+        "long lng8 = lng << 8;",
+        "return lng8;"
+        ).into(
+            "  int bar = 305419896;", 
+            "  bar = bar * 1234;",
+            "  long lng = bar;", 
+            "  long lng8 = lng << 8;", 
+            "  return lng8;");
+  }
+
   @Override
   protected IntegratedAnalysis<CfgNode<?>, CfgEdge, CfgTransformer, Cfg, CopyAssumption> createIntegratedAnalysis() {
     return new CopyAnalysis();
