Insert missing barrier in ApplicationWriter.

Bug: 66327890
Change-Id: I772839d8a2cd06f693200247904a98d3ac596eee
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 972c988..752c66b 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -4,7 +4,6 @@
 package com.android.tools.r8.dex;
 
 import com.android.tools.r8.ApiLevelException;
-import com.android.tools.r8.errors.CompilationError;
 import com.android.tools.r8.errors.DexOverflowException;
 import com.android.tools.r8.graph.AppInfo;
 import com.android.tools.r8.graph.DexAnnotation;
@@ -27,6 +26,7 @@
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.OutputMode;
+import com.android.tools.r8.utils.ThreadUtils;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.PrintStream;
@@ -169,6 +169,10 @@
         }
       }
 
+      // Wait for all spawned futures to terminate to ensure jumbo string writing is complete.
+      // TODO(66327890): Implement a test for this.
+      ThreadUtils.awaitFutures(offsetMappingFutures.values());
+
       // Generate the dex file contents.
       LinkedHashMap<VirtualFile, Future<byte[]>> dexDataFutures = new LinkedHashMap<>();
       for (VirtualFile newFile : offsetMappingFutures.keySet()) {
diff --git a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
index 06a87aa..0eaf1ad 100644
--- a/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ThreadUtils.java
@@ -4,6 +4,7 @@
 package com.android.tools.r8.utils;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -12,7 +13,7 @@
 
 public class ThreadUtils {
 
-  public static <T> List<T> awaitFutures(List<? extends Future<? extends T>> futures)
+  public static <T> List<T> awaitFutures(Collection<? extends Future<? extends T>> futures)
       throws ExecutionException {
     ArrayList<T> result = new ArrayList<>(futures.size());
     for (Future<? extends T> f : futures) {