diff --git a/src/main/java/com/android/tools/r8/R8Partial.java b/src/main/java/com/android/tools/r8/R8Partial.java
index e874dc8..56b1730 100644
--- a/src/main/java/com/android/tools/r8/R8Partial.java
+++ b/src/main/java/com/android/tools/r8/R8Partial.java
@@ -120,7 +120,8 @@
     InternalOptions d8Options = d8Command.getInternalOptions();
     options.partialCompilationConfiguration.d8DexOptionsConsumer.accept(d8Options);
     R8PartialD8SubCompilationConfiguration subCompilationConfiguration =
-        new R8PartialD8SubCompilationConfiguration(input.getD8Types(), input.getR8Types(), timing);
+        new R8PartialD8SubCompilationConfiguration(
+            input.getD8Types(), input.getR8Types(), options.getLibraryDesugaringOptions(), timing);
     d8Options.setArtProfileOptions(
         new ArtProfileOptions(d8Options, options.getArtProfileOptions()));
     d8Options.setFeatureSplitConfiguration(options.getFeatureSplitConfiguration());
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
index 1ff5fe1..6399485 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BackportedMethodRewriter.java
@@ -1,7 +1,6 @@
 // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-
 package com.android.tools.r8.ir.desugar;
 
 import com.android.tools.r8.androidapi.ComputedApiLevel;
@@ -94,11 +93,13 @@
 public final class BackportedMethodRewriter implements CfInstructionDesugaring {
 
   private final AppView<?> appView;
+  private final LibraryDesugaringOptions libraryDesugaringOptions;
   private final RewritableMethods rewritableMethods;
 
   public BackportedMethodRewriter(AppView<?> appView) {
     assert appView.options().desugarState.isOn();
     this.appView = appView;
+    this.libraryDesugaringOptions = appView.options().getSubCompilationLibraryDesugaringOptions();
     this.rewritableMethods = new RewritableMethods(appView);
   }
 
@@ -217,8 +218,7 @@
     AppInfo appInfo =
         AppInfo.createInitialAppInfo(app, GlobalSyntheticsStrategy.forNonSynthesizing());
     AppView<?> appView = AppView.createForD8(appInfo, Timing.empty());
-    BackportedMethodRewriter.RewritableMethods rewritableMethods =
-        new BackportedMethodRewriter.RewritableMethods(appView);
+    RewritableMethods rewritableMethods = new RewritableMethods(appView);
     rewritableMethods.visit(methods);
     new DesugaredLibraryRetargeterHelper(appView).visit(methods);
     new AutoCloseableRetargeterHelper(options.getMinApiLevel(), options.dexItemFactory())
@@ -241,13 +241,9 @@
     // maintained for legacy only, recent desugared library should not be shipped with
     // pre-desugared code.
     Map<DexType, DexType> legacyBackport =
-        appView
-            .options()
-            .getLibraryDesugaringOptions()
-            .getMachineDesugaredLibrarySpecification()
-            .getLegacyBackport();
+        libraryDesugaringOptions.getMachineDesugaredLibrarySpecification().getLegacyBackport();
     if (provider == null
-        && appView.options().getLibraryDesugaringOptions().isDesugaredLibraryCompilation()
+        && libraryDesugaringOptions.isDesugaredLibraryCompilation()
         && legacyBackport.containsKey(method.holder)) {
       DexType newHolder = legacyBackport.get(method.holder);
       DexMethod backportedMethod =
@@ -277,8 +273,7 @@
   }
 
   private MethodProvider<DexField> getProviderOrNull(DexField field) {
-    MethodProvider<DexField> provider = rewritableMethods.getProvider(field);
-    return provider;
+    return rewritableMethods.getProvider(field);
   }
 
   private static final class RewritableMethods {
@@ -286,6 +281,7 @@
     private final Map<DexType, AndroidApiLevel> typeMinApi;
 
     private final AppView<?> appView;
+    private final LibraryDesugaringOptions libraryDesugaringOptions;
 
     // Map backported field or method to a provider for creating the actual target method
     // (with code).
@@ -298,6 +294,7 @@
       InternalOptions options = appView.options();
       DexItemFactory factory = options.dexItemFactory();
       this.appView = appView;
+      this.libraryDesugaringOptions = options.getSubCompilationLibraryDesugaringOptions();
       this.typeMinApi = initializeTypeMinApi(factory);
       if (!options.enableBackportedMethodRewriting()) {
         return;
@@ -410,8 +407,6 @@
     }
 
     private boolean typeIsInDesugaredLibrary(DexType type) {
-      LibraryDesugaringOptions libraryDesugaringOptions =
-          appView.options().getLibraryDesugaringOptions();
       return libraryDesugaringOptions.getTypeRewriter().hasRewrittenType(type)
           || libraryDesugaringOptions
               .getMachineDesugaredLibrarySpecification()
@@ -436,9 +431,7 @@
       if (typeIsInDesugaredLibrary(type)) {
         // Desugared library is enabled, the methods are present if desugared library specifies it.
         return methodsMinAPI.isGreaterThan(AndroidApiLevel.N)
-            && !appView
-                .options()
-                .getLibraryDesugaringOptions()
+            && !libraryDesugaringOptions
                 .getMachineDesugaredLibrarySpecification()
                 .includesJDK11Methods();
       }
@@ -2224,8 +2217,7 @@
         BackportedMethodDesugaringEventConsumer eventConsumer,
         MethodProcessingContext methodProcessingContext,
         LocalStackAllocator localStackAllocator) {
-      return rewriter.rewrite(
-          instruction.asStaticFieldGet(), appView.dexItemFactory(), localStackAllocator);
+      return rewriter.rewrite(instruction.asStaticFieldGet(), appView.dexItemFactory());
     }
   }
 
@@ -2530,10 +2522,7 @@
     CfInstruction rewriteSingle(CfStaticFieldRead staticGet, DexItemFactory factory);
 
     // Convenience wrapper since most rewrites are to a single instruction.
-    default Collection<CfInstruction> rewrite(
-        CfStaticFieldRead staticGet,
-        DexItemFactory factory,
-        LocalStackAllocator localStackAllocator) {
+    default Collection<CfInstruction> rewrite(CfStaticFieldRead staticGet, DexItemFactory factory) {
       return ImmutableList.of(rewriteSingle(staticGet, factory));
     }
   }
diff --git a/src/main/java/com/android/tools/r8/partial/R8PartialSubCompilationConfiguration.java b/src/main/java/com/android/tools/r8/partial/R8PartialSubCompilationConfiguration.java
index 5e82a63..a5cd867 100644
--- a/src/main/java/com/android/tools/r8/partial/R8PartialSubCompilationConfiguration.java
+++ b/src/main/java/com/android/tools/r8/partial/R8PartialSubCompilationConfiguration.java
@@ -18,6 +18,7 @@
 import com.android.tools.r8.graph.ProgramDefinition;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions;
 import com.android.tools.r8.ir.conversion.MethodConversionOptions.Target;
+import com.android.tools.r8.ir.desugar.desugaredlibrary.LibraryDesugaringOptions;
 import com.android.tools.r8.keepanno.ast.KeepDeclaration;
 import com.android.tools.r8.profile.art.ArtProfile;
 import com.android.tools.r8.profile.art.ArtProfileCollection;
@@ -65,6 +66,7 @@
 
     private final Set<DexType> d8Types;
     private final Set<DexType> r8Types;
+    private final LibraryDesugaringOptions libraryDesugaringOptions;
 
     private ArtProfileCollection artProfiles;
     private ClassToFeatureSplitMap classToFeatureSplitMap;
@@ -75,10 +77,14 @@
     private StartupProfile startupProfile;
 
     public R8PartialD8SubCompilationConfiguration(
-        Set<DexType> d8Types, Set<DexType> r8Types, Timing timing) {
+        Set<DexType> d8Types,
+        Set<DexType> r8Types,
+        LibraryDesugaringOptions libraryDesugaringOptions,
+        Timing timing) {
       super(timing);
       this.d8Types = d8Types;
       this.r8Types = r8Types;
+      this.libraryDesugaringOptions = libraryDesugaringOptions;
     }
 
     public ArtProfileCollection getArtProfiles() {
@@ -100,6 +106,10 @@
       return desugaredOutputClasses;
     }
 
+    public LibraryDesugaringOptions getLibraryDesugaringOptions() {
+      return libraryDesugaringOptions;
+    }
+
     public Collection<DexClasspathClass> getOutputClasspathClasses() {
       assert outputClasspathClasses != null;
       return outputClasspathClasses;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 74b8fd1..dd600b2 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1082,6 +1082,18 @@
     return libraryDesugaringOptions;
   }
 
+  /**
+   * Similar to {@link #getLibraryDesugaringOptions()}, except for the D8 compilation in R8 partial,
+   * where this deliberately returns the library desugaring options of the outer R8 partial
+   * compilation.
+   */
+  public LibraryDesugaringOptions getSubCompilationLibraryDesugaringOptions() {
+    if (partialSubCompilationConfiguration != null && partialSubCompilationConfiguration.isD8()) {
+      return partialSubCompilationConfiguration.asD8().getLibraryDesugaringOptions();
+    }
+    return getLibraryDesugaringOptions();
+  }
+
   public SingleCallerInlinerOptions getSingleCallerInlinerOptions() {
     return singleCallerInlinerOptions;
   }
