Fix bad assert checking 16-bits value

Bug: 65007724
Change-Id: Id594b684c4908fef9a25a56ed901a5eb319834a3
diff --git a/src/main/java/com/android/tools/r8/dex/FileWriter.java b/src/main/java/com/android/tools/r8/dex/FileWriter.java
index 38e292c..f4fa365 100644
--- a/src/main/java/com/android/tools/r8/dex/FileWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/FileWriter.java
@@ -445,10 +445,10 @@
 
   private void writeFieldItem(DexField field) {
     int classIdx = mapping.getOffsetFor(field.clazz);
-    assert (short) classIdx == classIdx;
+    assert (classIdx & 0xFFFF) == classIdx;
     dest.putShort((short) classIdx);
     int typeIdx = mapping.getOffsetFor(field.type);
-    assert (short) typeIdx == typeIdx;
+    assert (typeIdx & 0xFFFF) == typeIdx;
     dest.putShort((short) typeIdx);
     DexString name = namingLens.lookupName(field);
     dest.putInt(mapping.getOffsetFor(name));
@@ -456,10 +456,10 @@
 
   private void writeMethodItem(DexMethod method) {
     int classIdx = mapping.getOffsetFor(method.holder);
-    assert (short) classIdx == classIdx;
+    assert (classIdx & 0xFFFF) == classIdx;
     dest.putShort((short) classIdx);
     int protoIdx = mapping.getOffsetFor(method.proto);
-    assert (short) protoIdx == protoIdx;
+    assert (protoIdx & 0xFFFF) == protoIdx;
     dest.putShort((short) protoIdx);
     DexString name = namingLens.lookupName(method);
     dest.putInt(mapping.getOffsetFor(name));
@@ -694,7 +694,7 @@
       assert methodHandle.isFieldHandle();
       fieldOrMethodIdx = mapping.getOffsetFor(methodHandle.asField());
     }
-    assert (short) fieldOrMethodIdx == fieldOrMethodIdx;
+    assert (fieldOrMethodIdx & 0xFFFF) == fieldOrMethodIdx;
     dest.putShort((short) fieldOrMethodIdx);
     dest.putShort((short) 0); // unused
   }
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress65007724.java b/src/test/java/com/android/tools/r8/jasmin/Regress65007724.java
new file mode 100644
index 0000000..1eb0586
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress65007724.java
@@ -0,0 +1,35 @@
+// Copyright (c) 2017, 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.jasmin;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class Regress65007724 extends JasminTestBase {
+  @Test
+  public void testThat16BitsIndexAreAllowed() throws Exception {
+    JasminBuilder builder = new JasminBuilder();
+
+    for (int i = 0; i < 35000; i++) {
+      builder.addClass("C" + i);
+    }
+
+    JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
+
+    clazz.addStaticField("f", "LC34000;", null);
+
+    clazz.addMainMethod(
+        ".limit stack 2",
+        ".limit locals 1",
+        "getstatic java/lang/System/out Ljava/io/PrintStream;",
+        "ldc \"Hello World!\"",
+        "invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
+        "return");
+
+    String expected = runOnJava(builder, clazz.name);
+    String artResult = runOnArtD8(builder, clazz.name);
+    assertEquals(expected, artResult);
+  }
+}