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 =
