Do not map into pruned external synthetics in synthetic finalization

Fixes: b/326850124
Change-Id: Ia2cc6ec72e8180b97fb5bd02162d755267e5f9cc
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index 7c1b22f..abd4a13 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -636,11 +636,13 @@
                         externalSyntheticTypePrefix,
                         generators,
                         appView,
-                        candidateType ->
-                            equivalences.containsKey(candidateType)
-                                || appView
-                                    .horizontallyMergedClasses()
-                                    .isMergeSource(candidateType));
+                        candidateType -> {
+                          if (appView.hasLiveness()
+                              && appView.appInfoWithLiveness().wasPruned(candidateType)) {
+                            return true;
+                          }
+                          return equivalences.containsKey(candidateType);
+                        });
             equivalences.put(representativeType, group);
           }
         });
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index a6ee92f..35b4218 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -121,8 +121,6 @@
     prunedEntries.forEach(
         entry -> {
           DexType holder = entry.getKey();
-          assert appView.appInfo().definitionForWithoutExistenceAssert(holder) == null
-              || !appView.appInfo().definitionForWithoutExistenceAssert(holder).isProgramClass();
           String typeName = holder.toSourceString();
           String sourceFile = entry.getValue();
           // We have to pick a right-hand side destination that does not overlap with an existing
@@ -413,14 +411,12 @@
 
         MappedRange lastMappedRange =
             getMappedRangesForPosition(
-                appView,
                 getOriginalMethodSignature,
                 getBuilder(),
                 firstPosition,
                 residualSignature,
                 obfuscatedRange,
                 originalRange,
-                prunedInlinedClasses,
                 cardinalRangeCache,
                 canStripOuterFrame);
         // firstPosition will contain a potential outline caller.
@@ -450,7 +446,6 @@
                   positionMap.put((int) line, placeHolderLineToBeFixed);
                   MappedRange lastRange =
                       getMappedRangesForPosition(
-                          appView,
                           getOriginalMethodSignature,
                           getBuilder(),
                           position,
@@ -458,7 +453,6 @@
                           nonCardinalRangeCache.get(
                               placeHolderLineToBeFixed, placeHolderLineToBeFixed),
                           nonCardinalRangeCache.get(position.getLine(), position.getLine()),
-                          prunedInlinedClasses,
                           cardinalRangeCache,
                           canStripOuterFrame);
                   maxPc.set(lastRange.minifiedRange.to);
@@ -533,14 +527,12 @@
     }
 
     private MappedRange getMappedRangesForPosition(
-        AppView<?> appView,
         Function<DexMethod, MethodSignature> getOriginalMethodSignature,
         ClassNaming.Builder classNamingBuilder,
         Position position,
         MethodSignature residualSignature,
         Range obfuscatedRange,
         Range originalLine,
-        Map<DexType, String> prunedInlineHolder,
         CardinalPositionRangeAllocator cardinalRangeCache,
         boolean canStripOuterFrame) {
       MappedRange lastMappedRange = null;
@@ -555,7 +547,12 @@
         DexType holderType = position.getMethod().getHolderType();
         String prunedClassSourceFileInfo = appView.getPrunedClassSourceFileInfo(holderType);
         if (prunedClassSourceFileInfo != null) {
-          String originalValue = prunedInlineHolder.put(holderType, prunedClassSourceFileInfo);
+          assert appView.appInfo().definitionForWithoutExistenceAssert(holderType) == null
+              || !appView
+                  .appInfo()
+                  .definitionForWithoutExistenceAssert(holderType)
+                  .isProgramClass();
+          String originalValue = prunedInlinedClasses.put(holderType, prunedClassSourceFileInfo);
           assert originalValue == null || originalValue.equals(prunedClassSourceFileInfo);
         }
         lastMappedRange =