Don't use JUnit fail(...) in test classes.

Bug: 139795497
Change-Id: If24beb236b9e774052b6d91b448f32daa108bce2
diff --git a/src/test/java/com/android/tools/r8/invalid/DuplicateProgramTypesTest.java b/src/test/java/com/android/tools/r8/invalid/DuplicateProgramTypesTest.java
index 12867ba..e8c8d39 100644
--- a/src/test/java/com/android/tools/r8/invalid/DuplicateProgramTypesTest.java
+++ b/src/test/java/com/android/tools/r8/invalid/DuplicateProgramTypesTest.java
@@ -21,7 +21,6 @@
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.references.Reference;
-import com.android.tools.r8.utils.StringUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -29,8 +28,6 @@
 @RunWith(Parameterized.class)
 public class DuplicateProgramTypesTest extends TestBase {
 
-  static final String EXPECTED = StringUtils.lines("Hello, world");
-
   private final TestParameters parameters;
 
   @Parameterized.Parameters(name = "{0}")
@@ -63,6 +60,7 @@
     try {
       byte[] bytes = ToolHelper.getClassAsBytes(TestClass.class);
       testForD8()
+          .setMinApi(parameters.getRuntime())
           .apply(
               b -> {
                 b.getBuilder().addClassProgramData(bytes, originA);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/AlwaysThrowNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/AlwaysThrowNullTest.java
index ec441a0..a46524a 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/AlwaysThrowNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/AlwaysThrowNullTest.java
@@ -7,7 +7,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -60,7 +59,7 @@
     try {
       arg.dead = new Object();
     } catch (IllegalArgumentException e) {
-      fail("Unexpected exception kind");
+      throw new AssertionError("Unexpected exception kind");
     }
   }
 
@@ -110,34 +109,34 @@
     try {
       uninstantiatedInstancePutWithNPEGuard(null);
     } catch (NullPointerException npe) {
-      fail("Unexpected NPE");
+      throw new AssertionError("Unexpected NPE");
     }
     try {
       uninstantiatedInstancePutWithOtherGuard(null);
-      fail("Expected NullPointerException");
+      throw new AssertionError("Expected NullPointerException");
     } catch (NullPointerException npe) {
       System.out.println("Expected NPE");
     }
     try {
       uninstantiatedInstanceInvoke(null);
-      fail("Expected NullPointerException");
+      throw new AssertionError("Expected NullPointerException");
     } catch (NullPointerException npe) {
       System.out.println("Expected NPE");
     }
     try {
       nullReferenceInvoke();
     } catch (NullPointerException npe) {
-      fail("Unexpected NPE");
+      throw new AssertionError("Unexpected NPE");
     }
     try {
       uninstantiatedInstancePut(null);
-      fail("Expected NullPointerException");
+      throw new AssertionError("Expected NullPointerException");
     } catch (NullPointerException npe) {
       System.out.println("Expected NPE");
     }
     try {
       uninstantiatedInstanceGet(null);
-      fail("Expected NullPointerException");
+      throw new AssertionError("Expected NullPointerException");
     } catch (NullPointerException npe) {
       System.out.println("Expected NPE");
     }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/ObjectsRequireNonNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/ObjectsRequireNonNullTest.java
index 7cd6dc0..7db31b4 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/ObjectsRequireNonNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/ObjectsRequireNonNullTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -30,68 +29,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-class ObjectsRequireNonNullTestMain {
-
-  static class Uninitialized {
-    void noWayToCall() {
-      System.out.println("Uninitialized, hence no way to call this.");
-    }
-  }
-
-  @NeverPropagateValue
-  @NeverInline
-  static void consumeUninitialized(Uninitialized arg) {
-    Uninitialized nonNullArg = Objects.requireNonNull(arg);
-    // Dead code.
-    nonNullArg.noWayToCall();
-  }
-
-  static class Foo {
-    @NeverInline
-    void bar() {
-      System.out.println("Foo::bar");
-    }
-
-    @NeverInline
-    @Override
-    public String toString() {
-      return "Foo::toString";
-    }
-  }
-
-  @NeverInline
-  static void unknownArg(Foo foo) {
-    // It's unclear the argument is definitely null or not null.
-    Foo checked = Objects.requireNonNull(foo);
-    checked.bar();
-  }
-
-  public static void main(String[] args) {
-    Foo instance = new Foo();
-    // Not removable in debug mode.
-    Object nonNull = Objects.requireNonNull(instance);
-    System.out.println(nonNull);
-    // Removable because associated locals are changed while type casting.
-    Foo checked = Objects.requireNonNull(instance);
-    checked.bar();
-
-    unknownArg(instance);
-    try {
-      unknownArg(null);
-      fail("Expected NullPointerException");
-    } catch (NullPointerException npe) {
-      System.out.println("Expected NPE");
-    }
-
-    try {
-      consumeUninitialized(null);
-      fail("Expected NullPointerException");
-    } catch (NullPointerException npe) {
-      System.out.println("Expected NPE");
-    }
-  }
-}
-
 @RunWith(Parameterized.class)
 public class ObjectsRequireNonNullTest extends TestBase {
   private static final String JAVA_OUTPUT = StringUtils.lines(
@@ -204,4 +141,66 @@
             .assertSuccessWithOutput(JAVA_OUTPUT);
     test(result, 0, 0);
   }
+
+  static class ObjectsRequireNonNullTestMain {
+
+    static class Uninitialized {
+      void noWayToCall() {
+        System.out.println("Uninitialized, hence no way to call this.");
+      }
+    }
+
+    @NeverPropagateValue
+    @NeverInline
+    static void consumeUninitialized(Uninitialized arg) {
+      Uninitialized nonNullArg = Objects.requireNonNull(arg);
+      // Dead code.
+      nonNullArg.noWayToCall();
+    }
+
+    static class Foo {
+      @NeverInline
+      void bar() {
+        System.out.println("Foo::bar");
+      }
+
+      @NeverInline
+      @Override
+      public String toString() {
+        return "Foo::toString";
+      }
+    }
+
+    @NeverInline
+    static void unknownArg(Foo foo) {
+      // It's unclear the argument is definitely null or not null.
+      Foo checked = Objects.requireNonNull(foo);
+      checked.bar();
+    }
+
+    public static void main(String[] args) {
+      Foo instance = new Foo();
+      // Not removable in debug mode.
+      Object nonNull = Objects.requireNonNull(instance);
+      System.out.println(nonNull);
+      // Removable because associated locals are changed while type casting.
+      Foo checked = Objects.requireNonNull(instance);
+      checked.bar();
+
+      unknownArg(instance);
+      try {
+        unknownArg(null);
+        throw new AssertionError("Expected NullPointerException");
+      } catch (NullPointerException npe) {
+        System.out.println("Expected NPE");
+      }
+
+      try {
+        consumeUninitialized(null);
+        throw new AssertionError("Expected NullPointerException");
+      } catch (NullPointerException npe) {
+        System.out.println("Expected NPE");
+      }
+    }
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/ForNameTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/ForNameTest.java
index 149c374..14cd360 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/ForNameTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/ForNameTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -46,7 +45,7 @@
       try {
         // Not found, hence kept.
         Class<?> c = Class.forName("UnknownClass");
-        fail("Should preserve ClassNotFoundException.");
+        throw new AssertionError("Should preserve ClassNotFoundException.");
       } catch (ClassNotFoundException e) {
         // Expected
         System.out.println("Unknown");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
index 1b9c22f..893e20d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/reflection/GetClassTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -86,7 +85,7 @@
       System.out.println(getMainClass(instance));
 
       System.out.println(getMainClass(null));
-      fail("Should preserve NPE.");
+      throw new AssertionError("Should preserve NPE.");
     } catch (NullPointerException e) {
       // Expected
     }
@@ -99,7 +98,7 @@
         // Can be rewritten to const-class after inlining.
         System.out.println(r.call());
       } catch (Throwable e) {
-        fail("Not expected any exceptions.");
+        throw new AssertionError("Not expected any exceptions.");
       }
     }
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringContentCheckTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringContentCheckTest.java
index 528b267..babfa89 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringContentCheckTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringContentCheckTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.NeverInline;
@@ -252,7 +251,7 @@
         System.out.println(argCouldBeNull("prefix-CONST-suffix"));
         try {
           argCouldBeNull(null);
-          fail("Should raise NullPointerException");
+          throw new AssertionError("Should raise NullPointerException");
         } catch (NullPointerException npe) {
           // expected
         }
@@ -261,7 +260,7 @@
       {
         try {
           System.out.println("qwerty".substring(8));
-          fail("Should raise StringIndexOutOfBoundsException");
+          throw new AssertionError("Should raise StringIndexOutOfBoundsException");
         } catch (StringIndexOutOfBoundsException e) {
           // expected
         }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringHashCodeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringHashCodeTest.java
index 23840f2..2f2ab15 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringHashCodeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringHashCodeTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -143,7 +142,7 @@
 
       try {
         npe();
-        fail("Expect to raise NPE");
+        throw new AssertionError("Expect to raise NPE");
       } catch (NullPointerException npe) {
         // expected
       }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
index 500db35..8869a01 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringIsEmptyTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -121,7 +120,7 @@
       System.out.println(wrapper("non-null"));
       try {
         wrapper(null);
-        fail("Should raise NullPointerException");
+        throw new AssertionError("Should raise NullPointerException");
       } catch (NullPointerException npe) {
         // expected
       }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
index 6ef9f5e..c13b942 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringLengthTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -169,7 +168,7 @@
 
       try {
         npe();
-        fail("Expect to raise NPE");
+        throw new AssertionError("Expect to raise NPE");
       } catch (NullPointerException npe) {
         // expected
       }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringToStringTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringToStringTest.java
index f90f356..0740b43 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringToStringTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringToStringTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.D8TestRunResult;
@@ -131,7 +130,7 @@
       System.out.println(builder.toString());
       try {
         System.out.println(hideNPE(null));
-        fail("Expected NullPointerException");
+        throw new AssertionError("Expected NullPointerException");
       } catch (NullPointerException npe) {
         // Expected
       }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
index 1007ce8..e92d393 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/string/StringValueOfTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.ForceInline;
@@ -216,12 +215,12 @@
       try {
         System.out.println(hideNPE(null));
       } catch (NullPointerException npe) {
-        fail("Not expected: " + npe);
+        throw new AssertionError("Not expected: " + npe);
       }
       try {
         System.out.println(consumeUninitialized(null));
       } catch (NullPointerException npe) {
-        fail("Not expected: " + npe);
+        throw new AssertionError("Not expected: " + npe);
       }
 
       // No matter what we pass, that function will return null.
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index 0ae0da6..a3cde5c 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestBase.Backend;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.TestDescriptionWatcher;
@@ -31,7 +32,6 @@
 import java.util.concurrent.ExecutionException;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
-import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Rule;
@@ -312,8 +312,7 @@
         case N:
           return Paths.get(ToolHelper.EXAMPLES_ANDROID_N_BUILD_DIR);
         default:
-          Assert.fail();
-          return null;
+          throw new Unreachable();
       }
     }
 
@@ -324,8 +323,7 @@
         case N:
           return AndroidApiLevel.N.getLevel();
         default:
-          Assert.fail();
-          return -1;
+          throw new Unreachable();
       }
     }
 
diff --git a/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java b/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
index 957bc1d..b264ef5 100644
--- a/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
+++ b/src/test/java/com/android/tools/r8/naming/GenericSignatureParserTest.java
@@ -71,7 +71,7 @@
       GenericSignatureParser<String> parser =
           new GenericSignatureParser<>(new ReGenerateGenericSignatureRewriter());
       parse.accept(parser, signature);
-      fail("Succesfully parsed " + signature);
+      fail("Successfully parsed " + signature);
     } catch (GenericSignatureFormatError e) {
       errorChecker.accept(e);
     }
@@ -101,7 +101,7 @@
       try {
         if (validPrefixes == null || !validPrefixes.contains(i)) {
           parser.accept(signature.substring(0, i));
-          fail("Succesfully parsed " + signature.substring(0, i) + " (position " + i +")");
+          fail("Successfully parsed " + signature.substring(0, i) + " (position " + i +")");
         }
       } catch (GenericSignatureFormatError e) {
         assertTrue(e.getMessage().contains("at position " + (i + 1)));
diff --git a/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java b/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
index ac5fc0d..0b37f73 100644
--- a/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
+++ b/src/test/java/com/android/tools/r8/naming/applymapping/shared/NameClashTest.java
@@ -4,7 +4,7 @@
 package com.android.tools.r8.naming.applymapping.shared;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.fail;
 
 import com.android.tools.r8.CompilationFailedException;
diff --git a/src/test/java/com/android/tools/r8/proguard/configuration/InheritanceClauseWithDisjunctionTest.java b/src/test/java/com/android/tools/r8/proguard/configuration/InheritanceClauseWithDisjunctionTest.java
index 6a26c3b..68e9e16 100644
--- a/src/test/java/com/android/tools/r8/proguard/configuration/InheritanceClauseWithDisjunctionTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/configuration/InheritanceClauseWithDisjunctionTest.java
@@ -6,8 +6,8 @@
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
 import com.android.tools.r8.CompilationFailedException;
diff --git a/src/test/java/com/android/tools/r8/proguard/configuration/RepackagingCompatibilityTest.java b/src/test/java/com/android/tools/r8/proguard/configuration/RepackagingCompatibilityTest.java
index afaf999..39b47f6 100644
--- a/src/test/java/com/android/tools/r8/proguard/configuration/RepackagingCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/proguard/configuration/RepackagingCompatibilityTest.java
@@ -8,7 +8,7 @@
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.startsWith;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeFalse;
 
diff --git a/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java b/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
index 4b24afc..085ad52 100644
--- a/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/array/DeadArrayLengthTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeTrue;
 
 import com.android.tools.r8.NeverPropagateValue;
@@ -117,14 +116,14 @@
       System.out.println(clearlyNonNull(args.length));
       try {
         System.out.println(isNullable(null));
-        fail("Expect to see NPE");
+        throw new AssertionError("Expect to see NPE");
       } catch (NullPointerException npe) {
         System.out.println("Expected NPE");
       }
       try {
         System.out.println(afterNullCheck(null));
       } catch (NullPointerException npe) {
-        fail("Not expect to see NPE");
+        throw new AssertionError("Not expect to see NPE");
       }
     }
   }
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index ce1fd33..fb0785e 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -5,7 +5,6 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import com.android.tools.r8.code.Const4;
 import com.android.tools.r8.code.DivIntLit8;
@@ -13,6 +12,7 @@
 import com.android.tools.r8.code.RemIntLit8;
 import com.android.tools.r8.code.Return;
 import com.android.tools.r8.code.ReturnWide;
+import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.DexCode;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.ir.code.Cmp.Bias;
@@ -365,7 +365,7 @@
           break;
         default:
           this.expected = 0;
-          fail("Unsupported logical binop " + op);
+          throw new Unreachable("Unsupported logical binop " + op);
       }
     }
   }
@@ -445,7 +445,7 @@
           v0 = v0 >>> v3;
           break;
         default:
-          fail("Unsupported shift " + op);
+          throw new Unreachable("Unsupported shift " + op);
       }
 
       this.expected = v0;
@@ -528,7 +528,7 @@
           v0 = v0 >>> v6;
           break;
         default:
-          fail("Unsupported shift " + op);
+          throw new Unreachable("Unsupported shift " + op);
       }
 
       this.expected = v0;