diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 30871c9..1af471f 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -749,10 +749,10 @@
       timing.end();
 
       // Perform repackaging.
-      if (options.isRepackagingEnabled()) {
-        new Repackaging(appView.withLiveness()).run(executorService, timing);
-      }
       if (appView.hasLiveness()) {
+        if (options.isRepackagingEnabled()) {
+          new Repackaging(appView.withLiveness()).run(executorService, timing);
+        }
         assert Repackaging.verifyIdentityRepackaging(appView.withLiveness(), executorService);
       }
 
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithoutAnyOptimizationTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithoutAnyOptimizationTest.java
index 2dbc058..4d9ce90 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithoutAnyOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithoutAnyOptimizationTest.java
@@ -3,10 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.repackage;
 
-import static org.junit.Assert.assertThrows;
-import static org.junit.Assert.assertTrue;
 
-import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -28,20 +25,15 @@
 
   @Test
   public void testR8() throws Exception {
-    Throwable t =
-        assertThrows(
-            CompilationFailedException.class,
-            () ->
-                testForR8(parameters.getBackend())
-                    .addInnerClasses(getClass())
-                    .setMinApi(parameters.getApiLevel())
-                    .addKeepMainRule(TestClass.class)
-                    .addDontOptimize()
-                    .addDontObfuscate()
-                    .addDontShrink()
-                    .addKeepRules("-repackageclasses")
-                    .compile());
-    assertTrue(t.getCause() instanceof ClassCastException);
+    testForR8(parameters.getBackend())
+        .addInnerClasses(getClass())
+        .setMinApi(parameters.getApiLevel())
+        .addKeepMainRule(TestClass.class)
+        .addDontOptimize()
+        .addDontObfuscate()
+        .addDontShrink()
+        .addKeepRules("-repackageclasses")
+        .compile();
   }
 
   static class TestClass {
