Add extra number conversion check in StringBuilder optimization

Change-Id: I2592378000ca2f35d18bb3931c6d7585ca8e7215
diff --git a/src/main/java/com/android/tools/r8/ir/code/NumberConversion.java b/src/main/java/com/android/tools/r8/ir/code/NumberConversion.java
index 72e5bc1..c039248 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NumberConversion.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NumberConversion.java
@@ -38,6 +38,7 @@
     super(dest, source);
     this.from = from;
     this.to = to;
+    assert isValid();
   }
 
   @Override
@@ -173,4 +174,50 @@
   public boolean outTypeKnownToBeBoolean(Set<Phi> seen) {
     return to == NumericType.BYTE && source().knownToBeBoolean(seen);
   }
+
+  public boolean isValid() {
+    switch (from) {
+      case INT:
+        switch (to) {
+          case BYTE:
+          case CHAR:
+          case SHORT:
+          case LONG:
+          case FLOAT:
+          case DOUBLE:
+            return true;
+          default:
+            return false;
+        }
+      case LONG:
+        switch (to) {
+          case INT:
+          case FLOAT:
+          case DOUBLE:
+            return true;
+          default:
+            return false;
+        }
+      case FLOAT:
+        switch (to) {
+          case INT:
+          case LONG:
+          case DOUBLE:
+            return true;
+          default:
+            return false;
+        }
+      case DOUBLE:
+        switch (to) {
+          case INT:
+          case LONG:
+          case FLOAT:
+            return true;
+          default:
+            return false;
+        }
+      default:
+        return false;
+    }
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
index d341de9..7fa1447 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
@@ -101,6 +101,9 @@
     } else if (arg.definition.isNumberConversion()) {
       NumberConversion conversion = arg.definition.asNumberConversion();
       assert conversion.inValues().size() == 1;
+      if (!conversion.isValid()) {
+        return null;
+      }
       Number temp = extractConstantNumber(factory, conversion.inValues().get(0));
       if (temp == null) {
         return null;