diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 2e7a4ab..a49bad9 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
 
   // This field is accessed from release scripts using simple pattern matching.
   // Therefore, changing this field could break our release scripts.
-  public static final String LABEL = "1.5.64";
+  public static final String LABEL = "1.5.65";
 
   private Version() {
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index 2243641..4ad2015 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -97,12 +97,12 @@
         }
         break;
       case LONG:
-        if (typeLattice.isWide()) {
+        if (typeLattice.isWide() && !typeLattice.isDouble()) {
           return TypeLatticeElement.LONG;
         }
         break;
       case DOUBLE:
-        if (typeLattice.isWide()) {
+        if (typeLattice.isWide() && !typeLattice.isLong()) {
           return TypeLatticeElement.DOUBLE;
         }
         break;
diff --git a/src/test/java/com/android/tools/r8/SwitchDebugLocalsConflictTest.java b/src/test/java/com/android/tools/r8/SwitchDebugLocalsConflictTest.java
new file mode 100644
index 0000000..6e86fe6
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/SwitchDebugLocalsConflictTest.java
@@ -0,0 +1,672 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+@RunWith(Parameterized.class)
+public class SwitchDebugLocalsConflictTest extends TestBase {
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withNoneRuntime().build();
+  }
+
+  public SwitchDebugLocalsConflictTest(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void testNewFrontend() throws Exception {
+    runTest(true);
+  }
+
+  @Test
+  public void testOldFrontend() throws Exception {
+    runTest(false);
+  }
+
+  private void runTest(boolean newFrontend) throws CompilationFailedException {
+    testForD8()
+        .addProgramClassFileData(Dump.dump())
+        .noDesugaring()
+        .addOptionsModification(options -> options.enableCfFrontend = newFrontend)
+        .compile();
+  }
+
+  // Dump of class file from b/138952302, which is produced with Java 7 and contains too large a
+  // local scope for the local variable 'valueDiv'. The larger scope causes a debug read of an
+  // uninitialized value, thus the value can be of either type long or of type double depending on
+  // which execution path leads up to the local start. More recent javac compilers emit the smaller
+  // correct scope for the local variable.
+  public static class Dump implements Opcodes {
+
+    public static byte[] dump() {
+
+      ClassWriter cw = new ClassWriter(0);
+      FieldVisitor fv;
+      MethodVisitor mv;
+      cw.visit(V1_7, ACC_PUBLIC | ACC_SUPER, "TestClass", null, "java/lang/Object", null);
+      cw.visitSource("TestClass.java", null);
+      {
+        fv = cw.visitField(ACC_PUBLIC | ACC_STATIC, "DEFAULT_VALUE", "J", null, null);
+        fv.visitEnd();
+      }
+      {
+        mv =
+            cw.visitMethod(
+                ACC_PUBLIC | ACC_STATIC,
+                "foo",
+                "([Ljava/lang/Object;I)Ljava/lang/Object;",
+                null,
+                null);
+        mv.visitCode();
+        Label label0 = new Label();
+        Label label1 = new Label();
+        Label label2 = new Label();
+        mv.visitTryCatchBlock(label0, label1, label2, "java/lang/Throwable");
+        Label label3 = new Label();
+        Label label4 = new Label();
+        mv.visitTryCatchBlock(label3, label4, label2, "java/lang/Throwable");
+        Label label5 = new Label();
+        Label label6 = new Label();
+        mv.visitTryCatchBlock(label5, label6, label2, "java/lang/Throwable");
+        Label label7 = new Label();
+        Label label8 = new Label();
+        mv.visitTryCatchBlock(label7, label8, label2, "java/lang/Throwable");
+        Label label9 = new Label();
+        Label label10 = new Label();
+        mv.visitTryCatchBlock(label9, label10, label2, "java/lang/Throwable");
+        Label label11 = new Label();
+        Label label12 = new Label();
+        mv.visitTryCatchBlock(label11, label12, label2, "java/lang/Throwable");
+        Label label13 = new Label();
+        Label label14 = new Label();
+        mv.visitTryCatchBlock(label13, label14, label2, "java/lang/Throwable");
+        Label label15 = new Label();
+        Label label16 = new Label();
+        mv.visitTryCatchBlock(label15, label16, label2, "java/lang/Throwable");
+        mv.visitLabel(label0);
+        mv.visitLineNumber(23, label0);
+        mv.visitVarInsn(ALOAD, 0);
+        Label label17 = new Label();
+        mv.visitJumpInsn(IFNULL, label17);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitInsn(ARRAYLENGTH);
+        mv.visitJumpInsn(IFNE, label3);
+        mv.visitLabel(label17);
+        mv.visitLineNumber(24, label17);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label1);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label3);
+        mv.visitLineNumber(26, label3);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitInsn(ARRAYLENGTH);
+        mv.visitVarInsn(ISTORE, 2);
+        Label label18 = new Label();
+        mv.visitLabel(label18);
+        mv.visitLineNumber(27, label18);
+        mv.visitInsn(ICONST_0);
+        mv.visitVarInsn(ISTORE, 3);
+        Label label19 = new Label();
+        mv.visitLabel(label19);
+        mv.visitLineNumber(28, label19);
+        mv.visitInsn(ICONST_0);
+        mv.visitVarInsn(ISTORE, 4);
+        Label label20 = new Label();
+        mv.visitLabel(label20);
+        mv.visitLineNumber(29, label20);
+        mv.visitInsn(DCONST_0);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label21 = new Label();
+        mv.visitLabel(label21);
+        mv.visitLineNumber(30, label21);
+        mv.visitInsn(LCONST_0);
+        mv.visitVarInsn(LSTORE, 7);
+        Label label22 = new Label();
+        mv.visitLabel(label22);
+        mv.visitLineNumber(31, label22);
+        mv.visitFrame(
+            Opcodes.F_FULL,
+            7,
+            new Object[] {
+              "[Ljava/lang/Object;",
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.DOUBLE,
+              Opcodes.LONG
+            },
+            0,
+            new Object[] {});
+        mv.visitVarInsn(ILOAD, 3);
+        mv.visitVarInsn(ILOAD, 2);
+        Label label23 = new Label();
+        mv.visitJumpInsn(IF_ICMPGE, label23);
+        Label label24 = new Label();
+        mv.visitLabel(label24);
+        mv.visitLineNumber(32, label24);
+        mv.visitVarInsn(ALOAD, 0);
+        mv.visitVarInsn(ILOAD, 3);
+        mv.visitInsn(AALOAD);
+        mv.visitVarInsn(ASTORE, 9);
+        Label label25 = new Label();
+        mv.visitLabel(label25);
+        mv.visitLineNumber(33, label25);
+        mv.visitInsn(DCONST_0);
+        mv.visitVarInsn(DSTORE, 10);
+        Label label26 = new Label();
+        mv.visitLabel(label26);
+        mv.visitLineNumber(34, label26);
+        mv.visitInsn(LCONST_0);
+        mv.visitVarInsn(LSTORE, 12);
+        Label label27 = new Label();
+        mv.visitLabel(label27);
+        mv.visitLineNumber(36, label27);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(INSTANCEOF, "java/lang/String");
+        Label label28 = new Label();
+        mv.visitJumpInsn(IFEQ, label28);
+        Label label29 = new Label();
+        mv.visitLabel(label29);
+        mv.visitLineNumber(37, label29);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(CHECKCAST, "java/lang/String");
+        mv.visitVarInsn(ASTORE, 14);
+        Label label30 = new Label();
+        mv.visitLabel(label30);
+        mv.visitLineNumber(38, label30);
+        mv.visitVarInsn(ILOAD, 4);
+        Label label31 = new Label();
+        mv.visitJumpInsn(IFNE, label31);
+        mv.visitVarInsn(ALOAD, 14);
+        mv.visitMethodInsn(
+            INVOKESTATIC,
+            "NumberUtil",
+            "hasDigit",
+            "(Ljava/lang/String;)Z",
+            false);
+        Label label32 = new Label();
+        mv.visitJumpInsn(IFEQ, label32);
+        mv.visitLabel(label31);
+        mv.visitLineNumber(39, label31);
+        mv.visitFrame(
+            Opcodes.F_FULL,
+            11,
+            new Object[] {
+              "[Ljava/lang/Object;",
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.INTEGER,
+              Opcodes.DOUBLE,
+              Opcodes.LONG,
+              "java/lang/Object",
+              Opcodes.DOUBLE,
+              Opcodes.LONG,
+              "java/lang/String"
+            },
+            0,
+            new Object[] {});
+        mv.visitVarInsn(ALOAD, 14);
+        mv.visitMethodInsn(
+            INVOKESTATIC,
+            "NumberUtil",
+            "parseDouble",
+            "(Ljava/lang/String;)D",
+            false);
+        mv.visitVarInsn(DSTORE, 10);
+        Label label33 = new Label();
+        mv.visitLabel(label33);
+        mv.visitLineNumber(40, label33);
+        mv.visitInsn(ICONST_1);
+        mv.visitVarInsn(ISTORE, 4);
+        Label label34 = new Label();
+        mv.visitJumpInsn(GOTO, label34);
+        mv.visitLabel(label32);
+        mv.visitLineNumber(42, label32);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ALOAD, 14);
+        mv.visitMethodInsn(
+            INVOKESTATIC,
+            "NumberUtil",
+            "parseLong",
+            "(Ljava/lang/String;)J",
+            false);
+        mv.visitVarInsn(LSTORE, 12);
+        mv.visitLabel(label34);
+        mv.visitLineNumber(44, label34);
+        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
+        Label label35 = new Label();
+        mv.visitJumpInsn(GOTO, label35);
+        mv.visitLabel(label28);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 4);
+        Label label36 = new Label();
+        mv.visitJumpInsn(IFNE, label36);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitMethodInsn(
+            INVOKESTATIC,
+            "NumberUtil",
+            "isFloatPointNum",
+            "(Ljava/lang/Object;)Z",
+            false);
+        Label label37 = new Label();
+        mv.visitJumpInsn(IFEQ, label37);
+        mv.visitLabel(label36);
+        mv.visitLineNumber(45, label36);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(CHECKCAST, "java/lang/Number");
+        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Number", "doubleValue", "()D", false);
+        mv.visitVarInsn(DSTORE, 10);
+        Label label38 = new Label();
+        mv.visitLabel(label38);
+        mv.visitLineNumber(46, label38);
+        mv.visitInsn(ICONST_1);
+        mv.visitVarInsn(ISTORE, 4);
+        mv.visitJumpInsn(GOTO, label35);
+        mv.visitLabel(label37);
+        mv.visitLineNumber(47, label37);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(INSTANCEOF, "java/lang/Integer");
+        Label label39 = new Label();
+        mv.visitJumpInsn(IFNE, label39);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(INSTANCEOF, "java/lang/Long");
+        Label label40 = new Label();
+        mv.visitJumpInsn(IFEQ, label40);
+        mv.visitLabel(label39);
+        mv.visitLineNumber(48, label39);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ALOAD, 9);
+        mv.visitTypeInsn(CHECKCAST, "java/lang/Number");
+        mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Number", "longValue", "()J", false);
+        mv.visitVarInsn(LSTORE, 12);
+        mv.visitJumpInsn(GOTO, label35);
+        mv.visitLabel(label40);
+        mv.visitLineNumber(50, label40);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitVarInsn(LSTORE, 12);
+        mv.visitLabel(label35);
+        mv.visitLineNumber(53, label35);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 4);
+        Label label41 = new Label();
+        mv.visitJumpInsn(IFEQ, label41);
+        Label label42 = new Label();
+        mv.visitLabel(label42);
+        mv.visitLineNumber(54, label42);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitInsn(LCONST_0);
+        mv.visitInsn(LCMP);
+        Label label43 = new Label();
+        mv.visitJumpInsn(IFEQ, label43);
+        Label label44 = new Label();
+        mv.visitLabel(label44);
+        mv.visitLineNumber(55, label44);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitInsn(L2D);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label45 = new Label();
+        mv.visitLabel(label45);
+        mv.visitLineNumber(56, label45);
+        mv.visitInsn(LCONST_0);
+        mv.visitVarInsn(LSTORE, 7);
+        mv.visitLabel(label43);
+        mv.visitLineNumber(58, label43);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 3);
+        Label label46 = new Label();
+        mv.visitJumpInsn(IFNE, label46);
+        Label label47 = new Label();
+        mv.visitLabel(label47);
+        mv.visitLineNumber(59, label47);
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label48 = new Label();
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label46);
+        mv.visitLineNumber(61, label46);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 1);
+        Label label49 = new Label();
+        Label label50 = new Label();
+        Label label51 = new Label();
+        Label label52 = new Label();
+        Label label53 = new Label();
+        Label label54 = new Label();
+        mv.visitTableSwitchInsn(
+            1, 5, label54, new Label[] {label49, label50, label51, label52, label53});
+        mv.visitLabel(label49);
+        mv.visitLineNumber(63, label49);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitInsn(DADD);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label55 = new Label();
+        mv.visitLabel(label55);
+        mv.visitLineNumber(64, label55);
+        mv.visitJumpInsn(GOTO, label54);
+        mv.visitLabel(label50);
+        mv.visitLineNumber(66, label50);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitInsn(DSUB);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label56 = new Label();
+        mv.visitLabel(label56);
+        mv.visitLineNumber(67, label56);
+        mv.visitJumpInsn(GOTO, label54);
+        mv.visitLabel(label51);
+        mv.visitLineNumber(69, label51);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitInsn(DMUL);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label57 = new Label();
+        mv.visitLabel(label57);
+        mv.visitLineNumber(70, label57);
+        mv.visitJumpInsn(GOTO, label54);
+        mv.visitLabel(label52);
+        mv.visitLineNumber(72, label52);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitVarInsn(DSTORE, 14);
+        Label label58 = new Label();
+        mv.visitLabel(label58);
+        mv.visitLineNumber(73, label58);
+        // start of 'valueDiv' ====================================
+        mv.visitVarInsn(DLOAD, 14);
+        mv.visitInsn(DCONST_0);
+        mv.visitInsn(DCMPL);
+        mv.visitJumpInsn(IFNE, label5);
+        Label label59 = new Label();
+        mv.visitLabel(label59);
+        mv.visitLineNumber(74, label59);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label4);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label5);
+        mv.visitLineNumber(76, label5);
+        mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] {Opcodes.DOUBLE}, 0, null);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitVarInsn(DLOAD, 14);
+        mv.visitInsn(DDIV);
+        mv.visitVarInsn(DSTORE, 5);
+        Label label60 = new Label();
+        mv.visitLabel(label60);
+        mv.visitLineNumber(77, label60);
+        mv.visitJumpInsn(GOTO, label54);
+        mv.visitLabel(label53);
+        mv.visitLineNumber(79, label53);
+        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
+        // **********************
+        // Entry to switch case for which 'valueDiv' has not been initialized.
+        // Reading slot 14 at this point will create a phi with operands of type long and double.
+        // **********************
+        mv.visitVarInsn(DLOAD, 10);
+        mv.visitVarInsn(DSTORE, 16);
+        Label label61 = new Label();
+        mv.visitLabel(label61);
+        mv.visitLineNumber(80, label61);
+        mv.visitVarInsn(DLOAD, 16);
+        mv.visitInsn(DCONST_0);
+        mv.visitInsn(DCMPL);
+        mv.visitJumpInsn(IFNE, label7);
+        Label label62 = new Label();
+        mv.visitLabel(label62);
+        mv.visitLineNumber(81, label62);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label6);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label7);
+        mv.visitLineNumber(83, label7);
+        mv.visitFrame(
+            Opcodes.F_APPEND, 3, new Object[] {Opcodes.TOP, Opcodes.TOP, Opcodes.DOUBLE}, 0, null);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitVarInsn(DLOAD, 16);
+        mv.visitInsn(DREM);
+        mv.visitVarInsn(DSTORE, 5);
+        // end of local 'valueDiv' ====================================
+        mv.visitLabel(label54);
+        mv.visitLineNumber(85, label54);
+        mv.visitFrame(Opcodes.F_CHOP, 3, null, 0, null);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label41);
+        mv.visitLineNumber(89, label41);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 3);
+        Label label63 = new Label();
+        mv.visitJumpInsn(IFNE, label63);
+        Label label64 = new Label();
+        mv.visitLabel(label64);
+        mv.visitLineNumber(90, label64);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitVarInsn(LSTORE, 7);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label63);
+        mv.visitLineNumber(92, label63);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(ILOAD, 1);
+        Label label65 = new Label();
+        Label label66 = new Label();
+        Label label67 = new Label();
+        Label label68 = new Label();
+        Label label69 = new Label();
+        mv.visitTableSwitchInsn(
+            1, 5, label48, new Label[] {label65, label66, label67, label68, label69});
+        mv.visitLabel(label65);
+        mv.visitLineNumber(94, label65);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitInsn(LADD);
+        mv.visitVarInsn(LSTORE, 7);
+        Label label70 = new Label();
+        mv.visitLabel(label70);
+        mv.visitLineNumber(95, label70);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label66);
+        mv.visitLineNumber(97, label66);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitInsn(LSUB);
+        mv.visitVarInsn(LSTORE, 7);
+        Label label71 = new Label();
+        mv.visitLabel(label71);
+        mv.visitLineNumber(98, label71);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label67);
+        mv.visitLineNumber(100, label67);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitInsn(LMUL);
+        mv.visitVarInsn(LSTORE, 7);
+        Label label72 = new Label();
+        mv.visitLabel(label72);
+        mv.visitLineNumber(101, label72);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label68);
+        mv.visitLineNumber(103, label68);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitInsn(LCONST_0);
+        mv.visitInsn(LCMP);
+        mv.visitJumpInsn(IFNE, label9);
+        Label label73 = new Label();
+        mv.visitLabel(label73);
+        mv.visitLineNumber(104, label73);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label8);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label9);
+        mv.visitLineNumber(106, label9);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitInsn(LDIV);
+        mv.visitVarInsn(LSTORE, 7);
+        Label label74 = new Label();
+        mv.visitLabel(label74);
+        mv.visitLineNumber(107, label74);
+        mv.visitJumpInsn(GOTO, label48);
+        mv.visitLabel(label69);
+        mv.visitLineNumber(109, label69);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 12);
+        mv.visitVarInsn(LSTORE, 14);
+        Label label75 = new Label();
+        mv.visitLabel(label75);
+        mv.visitLineNumber(110, label75);
+        mv.visitVarInsn(LLOAD, 14);
+        mv.visitInsn(LCONST_0);
+        mv.visitInsn(LCMP);
+        mv.visitJumpInsn(IFNE, label11);
+        Label label76 = new Label();
+        mv.visitLabel(label76);
+        mv.visitLineNumber(111, label76);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label10);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label11);
+        mv.visitLineNumber(113, label11);
+        mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] {Opcodes.LONG}, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitVarInsn(LLOAD, 14);
+        mv.visitInsn(LREM);
+        mv.visitVarInsn(LSTORE, 7);
+        mv.visitLabel(label48);
+        mv.visitLineNumber(118, label48);
+        mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
+        mv.visitVarInsn(ILOAD, 4);
+        mv.visitJumpInsn(IFEQ, label13);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitLdcInsn(new Double("Infinity"));
+        mv.visitInsn(DCMPL);
+        Label label77 = new Label();
+        mv.visitJumpInsn(IFEQ, label77);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitLdcInsn(new Double("-Infinity"));
+        mv.visitInsn(DCMPL);
+        mv.visitJumpInsn(IFEQ, label77);
+        mv.visitLdcInsn(new Double("NaN"));
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitInsn(DCMPL);
+        mv.visitJumpInsn(IFNE, label13);
+        mv.visitLabel(label77);
+        mv.visitLineNumber(120, label77);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitInsn(DCONST_0);
+        mv.visitMethodInsn(
+            INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
+        mv.visitLabel(label12);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label13);
+        mv.visitLineNumber(122, label13);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitIincInsn(3, 1);
+        Label label78 = new Label();
+        mv.visitLabel(label78);
+        mv.visitLineNumber(123, label78);
+        mv.visitJumpInsn(GOTO, label22);
+        mv.visitLabel(label23);
+        mv.visitLineNumber(125, label23);
+        mv.visitFrame(Opcodes.F_CHOP, 3, null, 0, null);
+        mv.visitVarInsn(ILOAD, 4);
+        mv.visitJumpInsn(IFEQ, label15);
+        Label label79 = new Label();
+        mv.visitLabel(label79);
+        mv.visitLineNumber(126, label79);
+        mv.visitVarInsn(DLOAD, 5);
+        mv.visitMethodInsn(
+            INVOKESTATIC, "java/lang/Double", "valueOf", "(D)Ljava/lang/Double;", false);
+        mv.visitLabel(label14);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label15);
+        mv.visitLineNumber(128, label15);
+        mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
+        mv.visitVarInsn(LLOAD, 7);
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitLabel(label16);
+        mv.visitInsn(ARETURN);
+        mv.visitLabel(label2);
+        mv.visitLineNumber(130, label2);
+        mv.visitFrame(
+            Opcodes.F_FULL,
+            2,
+            new Object[] {"[Ljava/lang/Object;", Opcodes.INTEGER},
+            1,
+            new Object[] {"java/lang/Throwable"});
+        mv.visitVarInsn(ASTORE, 2);
+        Label label80 = new Label();
+        mv.visitLabel(label80);
+        mv.visitLineNumber(132, label80);
+        mv.visitFieldInsn(GETSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitMethodInsn(INVOKESTATIC, "java/lang/Long", "valueOf", "(J)Ljava/lang/Long;", false);
+        mv.visitInsn(ARETURN);
+        Label label81 = new Label();
+        mv.visitLabel(label81);
+        mv.visitLocalVariable("numStr", "Ljava/lang/String;", null, label30, label34, 14);
+        mv.visitLocalVariable("valueMod", "D", null, label61, label54, 16);
+        mv.visitLocalVariable("valueDiv", "D", null, label58, label54, 14);
+        mv.visitLocalVariable("valueMod", "J", null, label75, label48, 14);
+        mv.visitLocalVariable("num", "Ljava/lang/Object;", null, label25, label78, 9);
+        mv.visitLocalVariable("dTmp", "D", null, label26, label78, 10);
+        mv.visitLocalVariable("lTmp", "J", null, label27, label78, 12);
+        mv.visitLocalVariable("len", "I", null, label18, label2, 2);
+        mv.visitLocalVariable("i", "I", null, label19, label2, 3);
+        mv.visitLocalVariable("needDouble", "Z", null, label20, label2, 4);
+        mv.visitLocalVariable("douRet", "D", null, label21, label2, 5);
+        mv.visitLocalVariable("lonRet", "J", null, label22, label2, 7);
+        mv.visitLocalVariable("e", "Ljava/lang/Throwable;", null, label80, label80, 2);
+        mv.visitLocalVariable("operationList", "[Ljava/lang/Object;", null, label0, label81, 0);
+        mv.visitLocalVariable("type", "I", null, label0, label81, 1);
+        mv.visitMaxs(4, 18);
+        mv.visitEnd();
+      }
+      {
+        mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
+        mv.visitCode();
+        Label label0 = new Label();
+        mv.visitLabel(label0);
+        mv.visitLineNumber(19, label0);
+        mv.visitInsn(LCONST_0);
+        mv.visitFieldInsn(PUTSTATIC, "TestClass", "DEFAULT_VALUE", "J");
+        mv.visitInsn(RETURN);
+        mv.visitMaxs(2, 0);
+        mv.visitEnd();
+      }
+      cw.visitEnd();
+      return cw.toByteArray();
+    }
+  }
+}
