Use initialMissingTypes after final round of tracing

Bug: 155911406
Change-Id: I3c2fae11d9e884d4a70cec26662a8bcf6ed01921
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 3288a39..bb5b89a 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2836,7 +2836,11 @@
         new AppInfoWithLiveness(
             app,
             SetUtils.mapIdentityHashSet(deadProtoTypeCandidates, DexProgramClass::getType),
-            missingTypes,
+            // TODO(b/155959821): We should be able to assert that missing types is a subset of
+            //   initialMissingTypes + synthesized types.
+            mode.isFinalTreeShaking()
+                ? Sets.union(initialMissingTypes, missingTypes)
+                : missingTypes,
             SetUtils.mapIdentityHashSet(liveTypes.getItems(), DexProgramClass::getType),
             Collections.unmodifiableSet(instantiatedAppServices),
             Enqueuer.toSortedDescriptorSet(targetedMethods.getItems()),