diff --git a/src/main/java/com/android/tools/r8/graph/FieldResolution.java b/src/main/java/com/android/tools/r8/graph/FieldResolution.java
index 3dcd872..ce7cbd3 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldResolution.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldResolution.java
@@ -28,35 +28,40 @@
     definitionFor
         .contextIndependentDefinitionForWithResolutionResult(type)
         .forEachClassResolutionResult(
-            clazz -> builder.addResolutionResult(resolveFieldOn(clazz, field)));
+            clazz -> resolveFieldOn(clazz, field, clazz, SetUtils.newIdentityHashSet(8), builder));
     return builder.buildOrIfEmpty(FieldResolutionResult.failure());
   }
 
   public FieldResolutionResult resolveFieldOn(DexClass holder, DexField field) {
     assert holder != null;
-    return resolveFieldOn(holder, field, holder, SetUtils.newIdentityHashSet(8));
+    FieldResolutionResult.Builder builder = FieldResolutionResult.builder();
+    resolveFieldOn(holder, field, holder, SetUtils.newIdentityHashSet(8), builder);
+    return builder.buildOrIfEmpty(FieldResolutionResult.failure());
   }
 
-  private FieldResolutionResult resolveFieldOn(
+  private void resolveFieldOn(
       DexClass holder,
       DexField field,
       DexClass initialResolutionHolder,
-      Set<DexType> visitedInterfaces) {
+      Set<DexType> visitedInterfaces,
+      FieldResolutionResult.Builder builder) {
     assert holder != null;
     // Step 1: Class declares the field.
     DexEncodedField definition = holder.lookupField(field);
     if (definition != null) {
-      return createSingleFieldResolutionResult(initialResolutionHolder, holder, definition);
+      builder.addResolutionResult(
+          createSingleFieldResolutionResult(initialResolutionHolder, holder, definition));
+      return;
     }
     // Step 2: Apply recursively to direct superinterfaces. First match succeeds.
     FieldResolutionResult result =
         resolveFieldOnDirectInterfaces(initialResolutionHolder, holder, field, visitedInterfaces);
     if (result != null) {
-      return result;
+      builder.addResolutionResult(result);
+      return;
     }
     // Step 3: Apply recursively to superclass.
     if (holder.superType != null) {
-      FieldResolutionResult.Builder builder = FieldResolutionResult.builder();
       definitionFor
           .contextIndependentDefinitionForWithResolutionResult(holder.superType)
           .forEachClassResolutionResult(
@@ -66,12 +71,12 @@
                 if (holder.isLibraryClass() && !superClass.isLibraryClass()) {
                   return;
                 }
-                builder.addResolutionResult(
-                    resolveFieldOn(superClass, field, initialResolutionHolder, visitedInterfaces));
+                resolveFieldOn(
+                    superClass, field, initialResolutionHolder, visitedInterfaces, builder);
               });
-      return builder.buildOrIfEmpty(null);
+    } else {
+      builder.addResolutionResult(FieldResolutionResult.failure());
     }
-    return FieldResolutionResult.failure();
   }
 
   private FieldResolutionResult resolveFieldOnDirectInterfaces(
@@ -91,9 +96,12 @@
                   if (clazz.isLibraryClass() && !ifaceClass.isLibraryClass()) {
                     return;
                   }
-                  builder.addResolutionResult(
+                  FieldResolutionResult otherResult =
                       resolveFieldOnInterface(
-                          initialResolutionHolder, ifaceClass, field, visitedInterfaces));
+                          initialResolutionHolder, ifaceClass, field, visitedInterfaces);
+                  if (otherResult != null) {
+                    builder.addResolutionResult(otherResult);
+                  }
                 });
         FieldResolutionResult fieldResolutionResult = builder.buildOrIfEmpty(null);
         if (fieldResolutionResult != null) {
diff --git a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
index 029b8e4..196864a 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
@@ -504,6 +504,7 @@
     private Builder() {}
 
     public void addResolutionResult(FieldResolutionResult otherResult) {
+      assert otherResult != null;
       if (currentResult == null) {
         currentResult = otherResult;
         return;
