Merge "Update gradle in third-party to 3.5.1."
diff --git a/src/main/java/com/android/tools/r8/dex/VirtualFile.java b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
index 0e89d4a..f336a3d 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -67,7 +67,7 @@
     // TODO(sgjesse): Does "minimal main dex" combined with "leave space for growth" make sense?
   }
 
-  private static final int MAX_ENTRIES = (Short.MAX_VALUE << 1) + 1;
+  private static final int MAX_ENTRIES = Constants.U16BIT_MAX + 1;
   /**
    * When distributing classes across files we aim to leave some space. The amount of space left is
    * driven by this constant.
diff --git a/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java b/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
index 7dab70a..74a0800 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectToOffsetMapping.java
@@ -88,7 +88,7 @@
   private void setIndexes(IndexedDexItem[] items) {
     int index = 0;
     for (IndexedDexItem item : items) {
-      item.assignVirtualFileIndex(virtualFileId, index++);
+      item.assignVirtualFileIndex(virtualFileId, index);
       // For strings collect the first jumbo string (if any).
       if (index > Constants.MAX_NON_JUMBO_INDEX) {
         assert item instanceof DexString;
@@ -96,6 +96,7 @@
           firstJumboString = (DexString) item;
         }
       }
+      index++;
     }
   }
 
diff --git a/src/test/java/com/android/tools/r8/compatdx/CompatDxTests.java b/src/test/java/com/android/tools/r8/compatdx/CompatDxTests.java
index b3d31c5..5af5c0c 100644
--- a/src/test/java/com/android/tools/r8/compatdx/CompatDxTests.java
+++ b/src/test/java/com/android/tools/r8/compatdx/CompatDxTests.java
@@ -100,10 +100,21 @@
   }
 
   @Test
+  public void singleDexProgramFull() throws IOException, ExecutionException {
+    // Generate an application that fills the whole dex file.
+    AndroidApp generated =
+        MainDexListTests.generateApplication(
+            ImmutableList.of("A"), Constants.ANDROID_L_API, Constants.U16BIT_MAX + 1);
+    Path applicationJar = temp.newFile("application.jar").toPath();
+    generated.write(applicationJar, OutputMode.Indexed);
+    runDexer(applicationJar.toString());
+  }
+
+  @Test
   public void singleDexProgramIsTooLarge() throws IOException, ExecutionException {
     // Generate an application that will not fit into a single dex file.
     AndroidApp generated = MainDexListTests.generateApplication(
-        ImmutableList.of("A", "B"), Constants.ANDROID_L_API, Constants.U16BIT_MAX / 2 + 1);
+        ImmutableList.of("A", "B"), Constants.ANDROID_L_API, Constants.U16BIT_MAX / 2 + 2);
     Path applicationJar = temp.newFile("application.jar").toPath();
     generated.write(applicationJar, OutputMode.Indexed);
     thrown.expect(CompilationError.class);