diff --git a/src/main/java/com/android/tools/r8/graph/CachedHashValueDexItem.java b/src/main/java/com/android/tools/r8/graph/CachedHashValueDexItem.java
index 749ce04..eda8647 100644
--- a/src/main/java/com/android/tools/r8/graph/CachedHashValueDexItem.java
+++ b/src/main/java/com/android/tools/r8/graph/CachedHashValueDexItem.java
@@ -26,11 +26,20 @@
       }
       hash = cache;
     }
-    assert cache == computeHashCode()
-        : "Hash code for " + this + " has changed from " + hash + " to " + computeHashCode();
+    assert verifyHashCodeConsistent(cache);
     return cache;
   }
 
+  private boolean verifyHashCodeConsistent(int computedValue) {
+    int newComputedValue = computeHashCode();
+    if (newComputedValue == NOT_COMPUTED_HASH_VALUE) {
+      newComputedValue = SENTINEL_HASH_VALUE;
+    }
+    assert computedValue == newComputedValue
+        : "Hash code for " + this + " has changed from " + hash + " to " + newComputedValue;
+    return true;
+  }
+
   @Override
   public void flushCachedValues() {
     super.flushCachedValues();
diff --git a/src/test/java/com/android/tools/r8/regress/b152973695/CompileToInvalidFileTest.java b/src/test/java/com/android/tools/r8/regress/b152973695/CompileToInvalidFileTest.java
index 36972c4..4f617ac 100644
--- a/src/test/java/com/android/tools/r8/regress/b152973695/CompileToInvalidFileTest.java
+++ b/src/test/java/com/android/tools/r8/regress/b152973695/CompileToInvalidFileTest.java
@@ -9,41 +9,46 @@
 
 import com.android.tools.r8.ClassFileConsumer;
 import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.ProgramConsumer;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.BooleanUtils;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 @RunWith(Parameterized.class)
 public class CompileToInvalidFileTest extends TestBase {
+
   private static final Path INVALID_FILE = Paths.get("!@#/\\INVALID_FILE");
 
-  private final TestParameters parameters;
+  private final boolean classFileConsumer;
 
-  @Parameterized.Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withNoneRuntime().build();
+  @Parameterized.Parameters(name = "{0}, classfileConsumer: {1}")
+  public static List<Object[]> data() {
+    return buildParameters(getTestParameters().withNoneRuntime().build(), BooleanUtils.values());
   }
 
-  public CompileToInvalidFileTest(TestParameters parameters) {
-    this.parameters = parameters;
+  public CompileToInvalidFileTest(TestParameters parameters, boolean classFileConsumer) {
+    this.classFileConsumer = classFileConsumer;
   }
 
   @Test
   public void testCompileToInvalidFileD8() {
     ensureInvalidFileIsInvalid();
+    ProgramConsumer programConsumer =
+        classFileConsumer
+            ? new ClassFileConsumer.ArchiveConsumer(INVALID_FILE)
+            : new ArchiveConsumer(INVALID_FILE);
     try {
-      testForD8()
-          .addProgramClasses(Main.class)
-          .setProgramConsumer(new ClassFileConsumer.ArchiveConsumer(INVALID_FILE))
-          .compile();
+      testForD8().addProgramClasses(Main.class).setProgramConsumer(programConsumer).compile();
       fail("Expected a CompilationFailedException but the code succeeded");
     } catch (CompilationFailedException ex) {
       assertInvalidFileNotFound(ex);
@@ -55,11 +60,15 @@
   @Test
   public void testCompileToInvalidFileR8() {
     ensureInvalidFileIsInvalid();
+    ProgramConsumer programConsumer =
+        classFileConsumer
+            ? new ClassFileConsumer.ArchiveConsumer(INVALID_FILE)
+            : new ArchiveConsumer(INVALID_FILE);
     try {
-      testForR8(Backend.CF)
+      testForR8(classFileConsumer ? Backend.CF : Backend.DEX)
           .addProgramClasses(Main.class)
           .addKeepMainRule(Main.class)
-          .setProgramConsumer(new ClassFileConsumer.ArchiveConsumer(INVALID_FILE))
+          .setProgramConsumer(programConsumer)
           .compile();
       fail("Expected a CompilationFailedException but the code succeeded");
     } catch (CompilationFailedException ex) {
diff --git a/tools/golem.py b/tools/golem.py
index 586ac5e..27f0035 100755
--- a/tools/golem.py
+++ b/tools/golem.py
@@ -22,7 +22,7 @@
     'proguardsettings',
     'r8',
     'remapper',
-    'retrace_benchmarks',
+    'retrace_benchmark',
     'sample_libraries',
     'youtube',
 ]
