Revert "Enable new argument propagation"

This reverts commit be44fc3a0865ebe9902eda5711d0f9b1e413b368.

Reason for revert: Possible nondeterminism

Change-Id: I44f6ba518897a68f0d70d8b9f0c0ffe658de150a
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 4a6a664..2a44d85 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -1219,7 +1219,7 @@
 
     // TODO(b/69963623): enable if everything is ready, including signature rewriting at call sites.
     private boolean enableLegacyConstantPropagation = false;
-    private boolean enableExperimentalArgumentPropagation = true;
+    private boolean enableExperimentalArgumentPropagation = false;
     private boolean enableDynamicTypePropagation = true;
 
     public void disableOptimization() {
@@ -1255,7 +1255,7 @@
     }
 
     public CallSiteOptimizationOptions setEnableLegacyConstantPropagation() {
-      assert !enableLegacyConstantPropagation;
+      assert !isConstantPropagationEnabled();
       enableLegacyConstantPropagation = true;
       return this;
     }
diff --git a/src/test/examples/shaking14/KeepConstantArguments.java b/src/test/examples/shaking14/KeepConstantArguments.java
deleted file mode 100644
index 0ff3910..0000000
--- a/src/test/examples/shaking14/KeepConstantArguments.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2021, 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 shaking14;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.CLASS)
-@Target({ElementType.METHOD})
-public @interface KeepConstantArguments {}
diff --git a/src/test/examples/shaking14/Subclass.java b/src/test/examples/shaking14/Subclass.java
index 2cb520a..31dd650 100644
--- a/src/test/examples/shaking14/Subclass.java
+++ b/src/test/examples/shaking14/Subclass.java
@@ -4,13 +4,10 @@
 package shaking14;
 
 public class Subclass extends Superclass {
-
-  @KeepConstantArguments
   static int aMethod(int value) {
     return value + 42;
   }
 
-  @KeepConstantArguments
   static double anotherMethod(double value) {
     return value + 42;
   }
diff --git a/src/test/examples/shaking14/keep-rules.txt b/src/test/examples/shaking14/keep-rules.txt
index 594e244..94682a3 100644
--- a/src/test/examples/shaking14/keep-rules.txt
+++ b/src/test/examples/shaking14/keep-rules.txt
@@ -10,4 +10,3 @@
 
 # allow access modification to enable minifcation
 -allowaccessmodification
--keepconstantarguments class * { @shaking14.KeepConstantArguments *; }
diff --git a/src/test/java/com/android/tools/r8/KeepConstantArguments.java b/src/test/java/com/android/tools/r8/KeepConstantArguments.java
index 132b92d..87edb4f 100644
--- a/src/test/java/com/android/tools/r8/KeepConstantArguments.java
+++ b/src/test/java/com/android/tools/r8/KeepConstantArguments.java
@@ -4,10 +4,7 @@
 package com.android.tools.r8;
 
 import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-@Retention(RetentionPolicy.CLASS)
-@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
+@Target({ElementType.METHOD})
 public @interface KeepConstantArguments {}
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 188f23f..c81cdfc 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -1287,16 +1287,8 @@
 
   private static Map<String, List<String>> keepRules =
       ImmutableMap.of(
-          "021-string2",
-          ImmutableList.of("-dontwarn junit.framework.**"),
-          "082-inline-execute",
-          ImmutableList.of("-dontwarn junit.framework.**"),
-          // Constructor MakeBoundType.<init>(int) is called using reflection.
-          "476-checker-ctor-fence-redun-elim",
-          ImmutableList.of(
-              "-keep class TestDontOptimizeAcrossEscape$MakeBoundTypeTest$MakeBoundType {",
-              "  void <init>(int);",
-              "}"));
+          "021-string2", ImmutableList.of("-dontwarn junit.framework.**"),
+          "082-inline-execute", ImmutableList.of("-dontwarn junit.framework.**"));
 
   private static Map<String, Consumer<InternalOptions>> configurations =
       ImmutableMap.of(
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
index 08dd682..fb37493 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
@@ -120,7 +120,7 @@
         .withOptionConsumer(opts -> opts.enableClassInlining = false)
         .withBuilderTransformation(
             b -> b.addProguardConfiguration(PROGUARD_OPTIONS, Origin.unknown()))
-        .withDexCheck(inspector -> checkLambdaCount(inspector, 9, "lambdadesugaring"))
+        .withDexCheck(inspector -> checkLambdaCount(inspector, 10, "lambdadesugaring"))
         .run();
 
     test("lambdadesugaring", "lambdadesugaring", "LambdaDesugaring")
@@ -159,7 +159,7 @@
         .withOptionConsumer(opts -> opts.enableClassInlining = false)
         .withBuilderTransformation(
             b -> b.addProguardConfiguration(PROGUARD_OPTIONS, Origin.unknown()))
-        .withDexCheck(inspector -> checkLambdaCount(inspector, 9, "lambdadesugaring"))
+        .withDexCheck(inspector -> checkLambdaCount(inspector, 10, "lambdadesugaring"))
         .run();
 
     test("lambdadesugaring", "lambdadesugaring", "LambdaDesugaring")
@@ -204,7 +204,7 @@
             b ->
                 b.addProguardConfiguration(
                     getProguardOptionsNPlus(enableProguardCompatibilityMode), Origin.unknown()))
-        .withDexCheck(inspector -> checkLambdaCount(inspector, 3, "lambdadesugaringnplus"))
+        .withDexCheck(inspector -> checkLambdaCount(inspector, 2, "lambdadesugaringnplus"))
         .run();
   }
 
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
index 6bf8cf9..8cd7860 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
@@ -78,7 +78,6 @@
     R8TestRunResult result =
         testForR8(parameters.getBackend())
             .addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
-            .enableConstantArgumentAnnotations()
             .enableInliningAnnotations()
             .enableNoHorizontalClassMergingAnnotations()
             .enableMemberValuePropagationAnnotations()
@@ -163,7 +162,6 @@
             .addProgramFiles(ToolHelper.getClassFilesForTestPackage(mainClass.getPackage()))
             .addKeepMainRule(mainClass)
             .addOptionsModification(o -> o.enableVerticalClassMerging = enableVerticalClassMerging)
-            .enableConstantArgumentAnnotations()
             .enableNeverClassInliningAnnotations()
             .enableInliningAnnotations()
             .enableMemberValuePropagationAnnotations()
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
index 7974306..c832fe7 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub1.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
@@ -17,7 +16,6 @@
     return "Sub1::foo1()";
   }
 
-  @KeepConstantArguments
   @NeverInline
   private String bar1(int i) {
     return "Sub1::bar1(" + i + ")";
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
index 6e8d5f7..ffdeec6 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privateinstance/Sub2.java
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.accessrelaxation.privateinstance;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
@@ -17,7 +16,6 @@
     return "Sub2::foo2()";
   }
 
-  @KeepConstantArguments
   @NeverInline
   private String bar1(int i) {
     return "Sub2::bar1(" + i + ")";
@@ -27,7 +25,6 @@
     return bar1(1);
   }
 
-  @KeepConstantArguments
   @NeverInline
   private String bar2(int i) {
     return "Sub2::bar2(" + i + ")";
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
index a0c3330..a05f41f 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/A.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.accessrelaxation.privatestatic;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
 
@@ -43,7 +42,6 @@
     return bar(1);
   }
 
-  @KeepConstantArguments
   @NeverInline
   @NeverPropagateValue
   private static String blah(int i) {
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
index d458af8..a6c40ff 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/privatestatic/BB.java
@@ -4,15 +4,12 @@
 
 package com.android.tools.r8.accessrelaxation.privatestatic;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
 import com.android.tools.r8.NoHorizontalClassMerging;
 
 @NoHorizontalClassMerging
 public class BB extends A {
-
-  @KeepConstantArguments
   @NeverInline
   @NeverPropagateValue
   private static String blah(int i) {
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
index bdaf09d..602f4a1 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfHigherApiLevelInterfaceTest.java
@@ -7,7 +7,6 @@
 import static com.android.tools.r8.apimodel.ApiModelingTestHelper.setMockApiLevelForMethod;
 import static com.android.tools.r8.apimodel.ApiModelingTestHelper.verifyThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestBase;
@@ -45,7 +44,6 @@
         .addDefaultRuntimeLibrary(parameters)
         .setMinApi(parameters.getApiLevel())
         .addKeepMainRule(Main.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .apply(setMockApiLevelForMethod(apiMethod, AndroidApiLevel.L_MR1))
@@ -65,7 +63,6 @@
   @NoHorizontalClassMerging
   public static class ApiCaller {
 
-    @KeepConstantArguments
     public static void callInterfaceMethod(Api api) {
       System.out.println("ApiCaller::callInterfaceMethod");
       if (api != null) {
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
index 1790724..07ad8f0 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -94,7 +93,6 @@
     ClassBuilder cls1 = jasminBuilder.addClass("Cls1", absCls.name, itf1.name);
     // Mimic Kotlin's "internal" class
     cls1.setAccess("");
-    cls1.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
     cls1.addBridgeMethod("foo", ImmutableList.of("Ljava/lang/String;"), "V",
         ".limit stack 2",
         ".limit locals 2",
@@ -145,7 +143,6 @@
         .addProgramClassFileData(jasminBuilder.buildClasses())
         .addKeepMainRule(mainClass.name)
         .addOptionsModification(this::configure)
-        .enableConstantArgumentAnnotations()
         .noHorizontalClassMerging(cls2Class.name)
         .noMinification()
         .setMinApi(parameters.getApiLevel())
@@ -242,7 +239,6 @@
         "return");
 
     ClassBuilder cls2 = jasminBuilder.addClass("DerivedString", baseCls.name);
-    cls2.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
     cls2.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
         ".limit stack 2",
         ".limit locals 2",
@@ -276,7 +272,6 @@
         .addProgramClassFileData(jasminBuilder.buildClasses())
         .addKeepMainRule(mainClass.name)
         .addOptionsModification(this::configure)
-        .enableConstantArgumentAnnotations()
         .noHorizontalClassMerging(derivedIntegerClass.name)
         .noMinification()
         .setMinApi(parameters.getApiLevel())
@@ -352,7 +347,6 @@
         "return");
 
     ClassBuilder subCls = jasminBuilder.addClass("DerivedString", baseCls.name);
-    subCls.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
     subCls.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
         ".limit stack 2",
         ".limit locals 2",
@@ -387,7 +381,6 @@
         .addProgramClassFileData(jasminBuilder.buildClasses())
         .addKeepMainRule(mainClass.name)
         .addOptionsModification(this::configure)
-        .enableConstantArgumentAnnotations()
         .noMinification()
         .setMinApi(parameters.getApiLevel())
         .compile()
@@ -440,7 +433,6 @@
         "aload_1",
         "invokevirtual java/io/PrintStream/print(Ljava/lang/Object;)V",
         "return");
-    cls.addRuntimeInvisibleAnnotation(KeepConstantArguments.class.getTypeName());
     cls.addVirtualMethod("bar", ImmutableList.of("Ljava/lang/String;"), "V",
         ".limit stack 2",
         ".limit locals 2",
@@ -475,7 +467,6 @@
         .addProgramClassFileData(jasminBuilder.buildClasses())
         .addKeepMainRule(mainClass.name)
         .addOptionsModification(this::configure)
-        .enableConstantArgumentAnnotations()
         .noMinification()
         .setMinApi(parameters.getApiLevel())
         .compile()
@@ -504,6 +495,7 @@
     // Callees are invoked with a simple constant, e.g., "Bar". Propagating it into the callees
     // bothers what the tests want to check, such as exact instructions in the body that include
     // invocation kinds, like virtual call to a bridge.
+    assert !options.callSiteOptimizationOptions().isConstantPropagationEnabled();
     // Disable inlining to avoid the (short) tested method from being inlined and then removed.
     options.enableInlining = false;
   }
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
index 45855d8..81c5c04 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeHoistingAccessibilityTest.java
@@ -6,7 +6,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -72,7 +71,6 @@
                         int.class))
                 .transform())
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -121,7 +119,6 @@
 
     // This bridge cannot be hoisted to A, since it would then become inaccessible to the call site
     // in TestClass.main().
-    @KeepConstantArguments
     @NeverInline
     /*bridge*/ String bridgeB(Object o) {
       return (String) m((String) o);
@@ -134,7 +131,6 @@
     // This bridge is invoked from another package. However, this does not prevent us from hoisting
     // the bridge to B, although B is not public, since users from outside this package can still
     // access bridgeC() via class C. From B, the bridge can be hoisted again to A.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String bridgeC(Object o) {
       return (String) m((String) o);
@@ -146,7 +142,6 @@
 
     // This bridge cannot be hoisted to A, since it would then become inaccessible to the call site
     // in TestClass.main().
-    @KeepConstantArguments
     @NeverInline
     /*bridge*/ String bridgeB(Object o, int a, int b, int c, int d, int e) {
       return (String) m((String) o, a, b, c, d, e);
@@ -159,7 +154,6 @@
     // This bridge is invoked from another package. However, this does not prevent us from hoisting
     // the bridge to B, although B is not public, since users from outside this package can still
     // access bridgeC() via class C. From B, the bridge can be hoisted again to A.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String bridgeC(Object o, int a, int b, int c, int d, int e) {
       return (String) m((String) o, a, b, c, d, e);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
index bf958f8..de2e041 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/FinalBridgeHoistingTest.java
@@ -7,7 +7,6 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
@@ -43,7 +42,6 @@
                 .transform())
         .addKeepMainRule(TestClass.class)
         .addKeepClassAndMembersRules(B1.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
@@ -87,7 +85,6 @@
   @NeverClassInline
   static class B1 extends A {
 
-    @KeepConstantArguments
     public String virtualBridge(Object o) {
       return (String) m((String) o);
     }
@@ -96,7 +93,6 @@
   @NeverClassInline
   static class B2 extends A {
 
-    @KeepConstantArguments
     @NeverInline
     public final /*bridge*/ String virtualBridge(Object o) {
       return (String) m((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
index e987a43..f2a91a8 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/NonSuperclassBridgeHoistingTest.java
@@ -7,7 +7,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -43,7 +42,6 @@
                 .setBridge(B.class.getDeclaredMethod("bridge", Object.class))
                 .transform())
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNoVerticalClassMergingAnnotations()
         .enableNeverClassInliningAnnotations()
@@ -78,7 +76,6 @@
   @NeverClassInline
   static class B extends A {
 
-    @KeepConstantArguments
     @NeverInline
     public Object m(String arg) {
       return System.currentTimeMillis() >= 0 ? arg : null;
@@ -86,7 +83,6 @@
 
     // This bridge cannot be hoisted to A, since it targets a method on the enclosing class.
     // Hoisting the bridge to A would lead to a NoSuchMethodError.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String bridge(Object o) {
       return (String) m((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
index ae77a45..dbdb906 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/PositiveBridgeHoistingTest.java
@@ -7,7 +7,6 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
@@ -52,7 +51,6 @@
                 .setBridge(B5.class.getDeclaredMethod("virtualBridge", Object.class))
                 .transform())
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableNoHorizontalClassMergingAnnotations()
@@ -108,7 +106,6 @@
 
   static class A {
 
-    @KeepConstantArguments
     @NeverInline
     public Object m(String arg) {
       return System.currentTimeMillis() >= 0 ? arg : null;
@@ -125,14 +122,12 @@
 
     // This bridge can be hoisted to A if the invoke-super instruction is rewritten to an
     // invoke-virtual instruction.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String superBridge(Object o) {
       return (String) super.m((String) o);
     }
 
     // This bridge can be hoisted to A.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String virtualBridge(Object o) {
       return (String) m((String) o);
@@ -144,14 +139,12 @@
   static class B2 extends A {
 
     // By hoisting B1.superBridge() to A this method bridge redundant.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String superBridge(Object o) {
       return (String) super.m((String) o);
     }
 
     // By hoisting B1.virtualBridge() to A this method bridge redundant.
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String virtualBridge(Object o) {
       return (String) m((String) o);
@@ -178,13 +171,11 @@
   @NoHorizontalClassMerging
   static class B4 extends A {
 
-    @KeepConstantArguments
     @NeverInline
     public String superBridge(Object o) {
       return System.currentTimeMillis() >= 0 ? ((String) o) : null;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public String virtualBridge(Object o) {
       return System.currentTimeMillis() >= 0 ? ((String) o) : null;
@@ -197,13 +188,11 @@
   @NoHorizontalClassMerging
   static class B5 extends A {
 
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String superBridge(Object o) {
       return (String) super.m2((String) o);
     }
 
-    @KeepConstantArguments
     @NeverInline
     public /*bridge*/ String virtualBridge(Object o) {
       return (String) m2((String) o);
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
index 64c19e5..e7d430f 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/testclasses/BridgeHoistingAccessibilityTestClasses.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.bridgeremoval.hoisting.testclasses;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -34,7 +33,6 @@
   @NoVerticalClassMerging
   public static class AWithRangedInvoke {
 
-    @KeepConstantArguments
     @NeverInline
     public Object m(String arg, int a, int b, int c, int d, int e) {
       return System.currentTimeMillis() > 0 ? arg + a + b + c + d + e : null;
diff --git a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
index 3f887af..fadf934 100644
--- a/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/StatefulSingletonClassesMergingTest.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.classmerging;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
@@ -36,7 +35,6 @@
         .addKeepMainRule(Main.class)
         .addHorizontallyMergedClassesInspector(
             inspector -> inspector.assertIsCompleteMergeGroup(A.class, B.class))
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .enableNeverClassInliningAnnotations()
@@ -60,9 +58,6 @@
 
     @NeverPropagateValue private final String data;
 
-    // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
-    //  which prevents merging in the final round of horizontal class merging.
-    @KeepConstantArguments
     A(String data) {
       this.data = data;
     }
@@ -80,9 +75,6 @@
 
     @NeverPropagateValue private final String data;
 
-    // TODO(b/198758663): With argument propagation the constructors end up not being equivalent,
-    //  which prevents merging in the final round of horizontal class merging.
-    @KeepConstantArguments
     B(String data) {
       this.data = data;
     }
diff --git a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
index 667c261..3858a1e 100644
--- a/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/horizontal/NoClassesOrMembersWithAnnotationsTest.java
@@ -9,7 +9,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.onlyIf;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestParameters;
@@ -53,13 +52,18 @@
               } else {
                 inspector.assertIsCompleteMergeGroup(A.class, B.class, C.class);
               }
-              inspector.assertNoOtherClassesMerged();
             })
-        .enableConstantArgumentAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
-        .compile()
+        .run(parameters.getRuntime(), Main.class)
+        .applyIf(
+            enableProguardCompatibilityMode,
+            result ->
+                result.assertSuccessWithOutputLines(
+                    "a", "b", "c", "foo", "null", "annotation 2", "annotation 1", "annotation 2"),
+            result ->
+                result.assertSuccessWithOutputLines("a", "b", "c", "foo", "null", "annotation 2"))
         .inspect(
             codeInspector -> {
               assertThat(codeInspector.clazz(TypeAnnotation.class), isPresent());
@@ -69,15 +73,7 @@
                   codeInspector.clazz(B.class),
                   onlyIf(enableProguardCompatibilityMode, isPresent()));
               assertThat(codeInspector.clazz(C.class), isAbsent());
-            })
-        .run(parameters.getRuntime(), Main.class)
-        .applyIf(
-            enableProguardCompatibilityMode,
-            result ->
-                result.assertSuccessWithOutputLines(
-                    "a", "b", "c", "foo", "null", "annotation 2", "annotation 1", "annotation 2"),
-            result ->
-                result.assertSuccessWithOutputLines("a", "b", "c", "foo", "null", "annotation 2"));
+            });
   }
 
   @Retention(RetentionPolicy.RUNTIME)
@@ -118,7 +114,6 @@
   }
 
   static class Main {
-    @KeepConstantArguments
     @NeverInline
     public static void foo(TypeAnnotation annotation) {
       System.out.println(annotation);
@@ -129,7 +124,7 @@
       System.out.println(annotation.toString().replaceFirst(".*@.*", "annotation 2"));
     }
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws NoSuchMethodException {
       A a = new A();
       B b = new B("b");
       C c = new C("c");
diff --git a/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java b/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
index 352186b..aab82f0 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/reflection/ReflectionTest.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.TestBase;
@@ -157,7 +156,6 @@
     nonConstArraySize(0);
   }
 
-  @KeepConstantArguments
   @NeverInline
   static void nonConstArraySize(int argumentTypesSize) {
     try {
@@ -487,23 +485,28 @@
 
   @Test
   public void testNonConstArraySize() throws Exception {
-    testForR8(backend)
-        .addProgramClasses(MainNonConstArraySize.class, A.class)
-        .addKeepMainRule(MainNonConstArraySize.class)
-        .enableConstantArgumentAnnotations()
-        .enableInliningAnnotations()
-        .run(MainNonConstArraySize.class)
-        .inspect(
-            inspector -> {
-              assertThat(
-                  inspector.clazz(A.class).method("void", "method0", ImmutableList.of()),
-                  isPresentAndRenamed());
-            })
-        // The reference run on the Java VM will succeed, whereas the run on the R8 output will fail
-        // as in this test we fail to recognize the reflective call. To compare the output of the
-        // successful reference run append "java.lang.NoSuchMethodException" to it.
-        .assertSuccessWithOutput(
-            runOnJava(MainNonConstArraySize.class) + "java.lang.NoSuchMethodException");
+    Class<?> mainClass = MainNonConstArraySize.class;
+    R8Command.Builder builder =
+        ToolHelper.prepareR8CommandBuilder(
+                readClasses(A.class, mainClass, NeverInline.class), emptyConsumer(backend))
+            .addLibraryFiles(runtimeJar(backend));
+    builder.addProguardConfiguration(
+        ImmutableList.of(keepMainProguardConfigurationWithInliningAnnotation(mainClass)),
+        Origin.unknown());
+    ToolHelper.allowTestProguardOptions(builder);
+    AndroidApp output = ToolHelper.runR8(builder.build());
+    CodeInspector inspector = new CodeInspector(output);
+
+    assertThat(
+        inspector.clazz(A.class).method("void", "method0", ImmutableList.of()),
+        isPresentAndRenamed());
+
+    // The reference run on the Java VM will succeed, whereas the run on the R8 output will fail
+    // as in this test we fail to recognize the reflective call. To compare the output of the
+    // successful reference run append "java.lang.NoSuchMethodException" to it.
+    assertEquals(
+        runOnJava(mainClass) + "java.lang.NoSuchMethodException",
+        runOnVM(output, mainClass, backend));
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
index 2e0481d..0ac3687 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/JavaUtilFunctionTest.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
@@ -90,7 +89,6 @@
         .addKeepMainRule(TestClass.class)
         .addInnerClasses(JavaUtilFunctionTest.class)
         .setMinApi(parameters.getApiLevel())
-        .enableConstantArgumentAnnotations()
         .enableCoreLibraryDesugaring(parameters.getApiLevel(), keepRuleConsumer)
         .compile()
         .inspect(this::checkRewrittenArguments)
@@ -105,7 +103,6 @@
 
   static class TestClass {
 
-    @KeepConstantArguments
     @NeverInline
     private static String applyFunction(Function<String, String> f) {
       return f.apply("Hello, world");
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
index 093f902..4c69310 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/VirtualMethodOverrideEnumUnboxingTest.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertFalse;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoVerticalClassMerging;
@@ -46,7 +45,6 @@
         .addInnerClasses(getClass())
         .addKeepMainRule(TestClass.class)
         .addKeepRules(enumKeepRules.getKeepRules())
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableNoVerticalClassMergingAnnotations()
@@ -91,13 +89,11 @@
   @NeverClassInline
   static class B extends A {
 
-    @KeepConstantArguments
     @NeverInline
     void m(int x, MyEnum y) {
       System.out.println("B.m(" + x + " : int, " + y.toString() + " : MyEnum)");
     }
 
-    @KeepConstantArguments
     @NeverInline
     @Override
     void m(MyEnum x, int y) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
index f392b1d..3c7307c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/callsites/WithStaticizerTest.java
@@ -4,9 +4,9 @@
 package com.android.tools.r8.ir.optimize.callsites;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static junit.framework.TestCase.assertTrue;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
index cb494cb..9cb52da 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
@@ -240,7 +240,7 @@
     SingleTestRunResult<?> result =
         testForR8(parameters.getBackend())
             .addProgramClasses(classes)
-            .enableConstantArgumentAnnotations()
+            .enableProguardTestOptions()
             .enableInliningAnnotations()
             .enableNoHorizontalClassMergingAnnotations()
             .addKeepMainRule(main)
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
index d9785fe..2b29cea 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/invalidroot/InvalidRootsTestClass.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.ir.optimize.classinliner.invalidroot;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 
@@ -73,7 +72,6 @@
     }
   }
 
-  @KeepConstantArguments
   private void neverReturnsNormallyExtra(String prefix, NeverReturnsNormally a) {
     throw new RuntimeException("neverReturnsNormallyExtra(" +
         prefix + ", " + (a == null ? "null" : a.foo()) + "): " + next());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
index dcc572b..3295203 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/NopInliningConstraintTest.java
@@ -40,8 +40,6 @@
         .addKeepMainRule(Main.class)
         .enableAlwaysInliningAnnotations()
         .enableInliningAnnotations()
-        // TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
-        .noMinification()
         .setMinApi(parameters.getApiLevel())
         .compile()
         .inspect(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
index f75c4c8..c5073c5 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfNullOrNotNullInliningTest.java
@@ -10,7 +10,6 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverSingleCallerInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -52,7 +51,6 @@
         .addProgramClasses(mainClass, TestMethods.class)
         .addKeepMainRule(mainClass)
         .apply(this::configure)
-        .enableConstantArgumentAnnotations()
         .enableNeverSingleCallerInlineAnnotations()
         .compile()
         .inspect(this::inspect)
@@ -118,7 +116,6 @@
 
   static class TestMethods {
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfNullTest(Object o) {
       if (o == null) {
@@ -138,7 +135,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfBothNullTest(Object o1, Object o2) {
       if (o1 == null && o2 == null) {
@@ -158,7 +154,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfNotNullTest(Object o) {
       if (o != null) {
@@ -178,7 +173,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfBothNotNullTest(Object o1, Object o2) {
       if (o1 != null && o2 != null) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
index 180b971..b7a7186 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/conditionalsimpleinlining/SimpleIfTrueOrFalseInliningTest.java
@@ -10,7 +10,6 @@
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverSingleCallerInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -52,7 +51,6 @@
         .addProgramClasses(mainClass, TestMethods.class)
         .addKeepMainRule(mainClass)
         .apply(this::configure)
-        .enableConstantArgumentAnnotations()
         .enableNeverSingleCallerInlineAnnotations()
         .compile()
         .inspect(this::inspect)
@@ -116,7 +114,6 @@
 
   static class TestMethods {
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfTrueTest(boolean b) {
       if (b) {
@@ -136,7 +133,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfBothTrueTest(boolean b1, boolean b2) {
       if (b1 && b2) {
@@ -156,7 +152,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfFalseTest(boolean b) {
       if (!b) {
@@ -176,7 +171,6 @@
       System.out.println("!");
     }
 
-    @KeepConstantArguments
     @NeverSingleCallerInline
     static void simpleIfBothFalseTest(boolean b1, boolean b2) {
       if (!b1 && !b2) {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
index 09aef4c..791bbae 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/instanceofremoval/InstanceOfRemovalTest.java
@@ -177,6 +177,6 @@
     MethodSubject barMethodSubject = testClass.uniqueMethodWithName("bar");
     Iterator<InstructionSubject> barInstructionIterator =
         barMethodSubject.iterateInstructions(InstructionSubject::isInstanceOf);
-    assertEquals(2, Streams.stream(barInstructionIterator).count());
+    assertEquals(4, Streams.stream(barInstructionIterator).count());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
index 3a0b304..29de662 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/classtypes/B134462736.java
@@ -7,7 +7,6 @@
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
@@ -65,7 +64,6 @@
         .enableInliningAnnotations()
         .addInnerClasses(B134462736.class)
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .setMinApi(parameters.getApiLevel())
         .noMinification()
         .addOptionsModification(
@@ -80,14 +78,11 @@
   }
 
   public static class TestClass {
-
-    @KeepConstantArguments
     @NeverInline
     public void consumer(String arg1, String arg2) {
       System.out.println(arg1 + " " + arg2);
     }
 
-    @KeepConstantArguments
     @NeverInline
     public void method1(StringBuilder builder, String arg1, String arg2) {
       builder.append(arg1);
@@ -95,7 +90,6 @@
       consumer(builder.toString(), null);
     }
 
-    @KeepConstantArguments
     @NeverInline
     public void method2(StringBuilder builder, String arg1, String arg2) {
       builder.append(arg1);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
index 8cc3b8c..e384d9b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/outliner/primitivetypes/PrimitiveTypesTest.java
@@ -5,23 +5,20 @@
 package com.android.tools.r8.ir.optimize.outliner.primitivetypes;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static junit.framework.TestCase.assertEquals;
 import static org.hamcrest.MatcherAssert.assertThat;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.synthesis.SyntheticItemsTestUtils;
-import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import com.android.tools.r8.utils.codeinspector.CodeMatchers;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.ImmutableList;
-import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -29,30 +26,18 @@
 @RunWith(Parameterized.class)
 public class PrimitiveTypesTest extends TestBase {
 
-  private final boolean enableArgumentPropagation;
   private final TestParameters parameters;
 
-  @Parameterized.Parameters(name = "{1}, argument propagation: {0}")
-  public static List<Object[]> data() {
-    return buildParameters(
-        BooleanUtils.values(), getTestParameters().withAllRuntimesAndApiLevels().build());
+  @Parameterized.Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withAllRuntimesAndApiLevels().build();
   }
 
-  public PrimitiveTypesTest(boolean keepConstantArguments, TestParameters parameters) {
-    this.enableArgumentPropagation = keepConstantArguments;
+  public PrimitiveTypesTest(TestParameters parameters) {
     this.parameters = parameters;
   }
 
   private void validateOutlining(CodeInspector inspector, Class<?> testClass, String argumentType) {
-    boolean isStringBuilderOptimized =
-        enableArgumentPropagation
-            && parameters.isDexRuntime()
-            && (argumentType.equals("char") || argumentType.equals("boolean"));
-    if (isStringBuilderOptimized) {
-      assertEquals(1, inspector.allClasses().size());
-      return;
-    }
-
     ClassSubject outlineClass =
         inspector.clazz(SyntheticItemsTestUtils.syntheticOutlineClass(testClass, 0));
     MethodSubject outline0Method =
@@ -71,8 +56,6 @@
   public void runTest(Class<?> testClass, String argumentType, String expectedOutput)
       throws Exception {
     testForR8(parameters.getBackend())
-        .addConstantArgumentAnnotations()
-        .enableConstantArgumentAnnotations(!enableArgumentPropagation)
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .addProgramClasses(testClass)
@@ -137,7 +120,6 @@
 
   static class TestClassBoolean {
 
-    @KeepConstantArguments
     @NeverInline
     public static String method1(boolean b) {
       StringBuilder sb = new StringBuilder();
@@ -146,7 +128,6 @@
       return sb.toString();
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static String method2(boolean b) {
       StringBuilder sb = new StringBuilder();
@@ -163,7 +144,6 @@
 
   static class TestClassByte {
 
-    @KeepConstantArguments
     @NeverInline
     public static String method1(byte b) {
       MyStringBuilder sb = new MyStringBuilder();
@@ -172,7 +152,6 @@
       return sb.toString();
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static String method2(byte b) {
       MyStringBuilder sb = new MyStringBuilder();
@@ -189,7 +168,6 @@
 
   static class TestClassShort {
 
-    @KeepConstantArguments
     @NeverInline
     public static String method1(short s) {
       MyStringBuilder sb = new MyStringBuilder();
@@ -198,7 +176,6 @@
       return sb.toString();
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static String method2(short s) {
       MyStringBuilder sb = new MyStringBuilder();
@@ -215,7 +192,6 @@
 
   static class TestClassChar {
 
-    @KeepConstantArguments
     @NeverInline
     public static String method1(char c) {
       StringBuilder sb = new StringBuilder();
@@ -224,7 +200,6 @@
       return sb.toString();
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static String method2(char c) {
       StringBuilder sb = new StringBuilder();
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
index a1b6f08..5a60806 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/ClassStaticizerTest.java
@@ -410,7 +410,6 @@
     R8TestRunResult result =
         testForR8(parameters.getBackend())
             .addProgramClasses(classes)
-            .enableConstantArgumentAnnotations()
             .enableInliningAnnotations()
             .addKeepMainRule(main)
             .allowAccessModification()
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
index 4733ab3..9ccd630 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/staticizer/dualcallinline/Candidate.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.ir.optimize.staticizer.dualcallinline;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 
 public class Candidate {
@@ -13,7 +12,6 @@
     return bar("Candidate::foo()");
   }
 
-  @KeepConstantArguments
   @NeverInline
   public String bar(String other) {
     return "Candidate::bar(" + other + ")";
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 6c47b03..5c9c9a3 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
@@ -58,6 +58,7 @@
     // This test wants to check if compile-time computation is not applied to non-null,
     // non-constant value. In a simple test setting, call-site optimization knows the argument is
     // always a non-null, specific constant, but that is beyond the scope of this test.
+    assert !options.callSiteOptimizationOptions().isConstantPropagationEnabled();
   }
 
   private void test(SingleTestRunResult result, int expectedStringIsEmptyCount) throws Exception {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
index ee595ce..0125189 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/ParameterRewritingTest.java
@@ -11,8 +11,7 @@
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NoHorizontalClassMerging;
 import com.android.tools.r8.TestBase;
-import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.graph.DexMethod;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -26,15 +25,15 @@
 @RunWith(Parameterized.class)
 public class ParameterRewritingTest extends TestBase {
 
-  private final TestParameters parameters;
+  private final Backend backend;
 
-  @Parameters(name = "{0}")
-  public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+  @Parameters(name = "Backend: {0}")
+  public static Backend[] data() {
+    return ToolHelper.getBackends();
   }
 
-  public ParameterRewritingTest(TestParameters parameters) {
-    this.parameters = parameters;
+  public ParameterRewritingTest(Backend backend) {
+    this.backend = backend;
   }
 
   @Test
@@ -50,15 +49,14 @@
     testForJvm().addTestClasspath().run(TestClass.class).assertSuccessWithOutput(expected);
 
     CodeInspector inspector =
-        testForR8(parameters.getBackend())
+        testForR8(backend)
             .addInnerClasses(ParameterRewritingTest.class)
             .addKeepMainRule(TestClass.class)
             .enableInliningAnnotations()
             .enableNoHorizontalClassMergingAnnotations()
             .addOptionsModification(options -> options.enableClassInlining = false)
             .noMinification()
-            .setMinApi(parameters.getApiLevel())
-            .run(parameters.getRuntime(), TestClass.class)
+            .run(TestClass.class)
             .assertSuccessWithOutput(expected)
             .inspector();
 
@@ -66,7 +64,7 @@
     MethodSubject createStaticMethodSubject =
         factoryClassSubject.uniqueMethodWithName("createStatic");
     assertThat(createStaticMethodSubject, isPresent());
-    assertEquals(1, createStaticMethodSubject.getMethod().getParameters().size());
+    assertEquals(1, createStaticMethodSubject.getMethod().getReference().proto.parameters.size());
 
     for (int i = 1; i <= 3; ++i) {
       String createStaticWithUnusedMethodName = "createStaticWithUnused" + i;
@@ -75,8 +73,8 @@
       assertThat(createStaticWithUnusedMethodSubject, isPresent());
 
       DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
-      assertEquals(1, method.getParameters().size());
-      assertEquals("java.lang.String", method.getParameters().toString());
+      assertEquals(1, method.proto.parameters.size());
+      assertEquals("java.lang.String", method.proto.parameters.toString());
     }
 
     MethodSubject createStaticWithUnusedMethodSubject =
@@ -84,9 +82,9 @@
     assertThat(createStaticWithUnusedMethodSubject, isPresent());
 
     DexMethod method = createStaticWithUnusedMethodSubject.getMethod().getReference();
-    assertEquals(3, method.getParameters().size());
+    assertEquals(3, method.proto.parameters.size());
     assertEquals(
-        "java.lang.String java.lang.String java.lang.String", method.getParameters().toString());
+        "java.lang.String java.lang.String java.lang.String", method.proto.parameters.toString());
 
     assertThat(inspector.clazz(Uninstantiated.class), not(isPresent()));
   }
@@ -94,39 +92,26 @@
   static class TestClass {
 
     public static void main(String[] args) {
-      Object obj1 = Factory.createStatic(null, asNonConstantString("Factory.createStatic()"));
+      Object obj1 = Factory.createStatic(null, "Factory.createStatic()");
       System.out.println(" -> " + obj1);
 
       Object obj2 =
-          Factory.createStaticWithUnused1(
-              new Object(), null, asNonConstantString("Factory.createStaticWithUnused1()"));
+          Factory.createStaticWithUnused1(new Object(), null, "Factory.createStaticWithUnused1()");
       System.out.println(" -> " + obj2);
 
       Object obj3 =
-          Factory.createStaticWithUnused2(
-              null, new Object(), asNonConstantString("Factory.createStaticWithUnused2()"));
+          Factory.createStaticWithUnused2(null, new Object(), "Factory.createStaticWithUnused2()");
       System.out.println(" -> " + obj3);
 
       Object obj4 =
-          Factory.createStaticWithUnused3(
-              null, asNonConstantString("Factory.createStaticWithUnused3()"), new Object());
+          Factory.createStaticWithUnused3(null, "Factory.createStaticWithUnused3()", new Object());
       System.out.println(" -> " + obj4);
 
       Object obj5 =
           Factory.createStaticWithUnused4(
-              asNonConstantString("Factory"),
-              new Object(),
-              null,
-              asNonConstantString("."),
-              new Object(),
-              null,
-              asNonConstantString("createStaticWithUnused4()"));
+              "Factory", new Object(), null, ".", new Object(), null, "createStaticWithUnused4()");
       System.out.println(" -> " + obj5);
     }
-
-    public static String asNonConstantString(String string) {
-      return System.currentTimeMillis() > 0 ? string : null;
-    }
   }
 
   @NoHorizontalClassMerging
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
index 663bcf6..339bbbc 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/uninstantiatedtypes/UninstantiatedAnnotatedArgumentsTest.java
@@ -158,14 +158,12 @@
   static class TestClass {
 
     public static void main(String[] args) {
-      String hello = System.currentTimeMillis() > 0 ? "Hello" : null;
-      String world = System.currentTimeMillis() > 0 ? " world!" : null;
-      testRemoveStaticFromStart(null, hello, world);
-      testRemoveStaticFromMiddle(hello, null, world);
-      testRemoveStaticFromEnd(hello, world, null);
-      new TestClass().testRemoveVirtualFromStart(null, hello, world);
-      new TestClass().testRemoveVirtualFromMiddle(hello, null, world);
-      new TestClass().testRemoveVirtualFromEnd(hello, world, null);
+      testRemoveStaticFromStart(null, "Hello", " world!");
+      testRemoveStaticFromMiddle("Hello", null, " world!");
+      testRemoveStaticFromEnd("Hello", " world!", null);
+      new TestClass().testRemoveVirtualFromStart(null, "Hello", " world!");
+      new TestClass().testRemoveVirtualFromMiddle("Hello", null, " world!");
+      new TestClass().testRemoveVirtualFromEnd("Hello", " world!", null);
     }
 
     @KeepConstantArguments
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
index ed2d01d..b7ddd9e 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/PrivateInstanceMethodCollisionTest.java
@@ -8,7 +8,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
@@ -61,7 +60,6 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(PrivateInstanceMethodCollisionTest.class)
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .minification(minification)
@@ -111,13 +109,11 @@
 
   @NeverClassInline
   static class A {
-    @KeepConstantArguments
     @NeverInline
     private void foo(String used) {
       System.out.println("A#foo(" + used + ")");
     }
 
-    @KeepConstantArguments
     @NeverInline
     void foo(String used, Object unused) {
       System.out.println("A#foo(" + used + ", Object)");
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
index 2f3e14f..7cf6193 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedAnnotatedArgumentsTest.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.KeepUnusedArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
@@ -67,7 +66,6 @@
         .addKeepAttributes("RuntimeVisibleParameterAnnotations")
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
-        .enableConstantArgumentAnnotations()
         .enableUnusedArgumentAnnotations(keepUnusedArguments)
         // TODO(b/123060011): Mapping not working in presence of unused argument removal.
         .minification(keepUnusedArguments)
@@ -154,7 +152,6 @@
       new TestClass().testRemoveVirtualFromEnd("Hello", " world!", null);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     static void testRemoveStaticFromStart(
@@ -162,7 +159,6 @@
       System.out.println(used + otherUsed);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     static void testRemoveStaticFromMiddle(
@@ -170,7 +166,6 @@
       System.out.println(used + otherUsed);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     static void testRemoveStaticFromEnd(
@@ -178,7 +173,6 @@
       System.out.println(used + otherUsed);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     void testRemoveVirtualFromStart(
@@ -186,7 +180,6 @@
       System.out.println(used + otherUsed);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     void testRemoveVirtualFromMiddle(
@@ -194,7 +187,6 @@
       System.out.println(used + otherUsed);
     }
 
-    @KeepConstantArguments
     @KeepUnusedArguments
     @NeverInline
     void testRemoveVirtualFromEnd(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
index 7d9a941..d8a7d6b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsCollisionMappingTest.java
@@ -10,7 +10,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestRunResult;
 import com.android.tools.r8.TestBase;
@@ -51,7 +50,6 @@
             .addProgramClasses(Main.class)
             .setMinApi(parameters.getApiLevel())
             .addKeepMainRule(Main.class)
-            .enableConstantArgumentAnnotations()
             .enableInliningAnnotations()
             .addKeepAttributeLineNumberTable()
             .run(parameters.getRuntime(), Main.class)
@@ -94,7 +92,6 @@
       System.out.println("test with unused");
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static void test(String used, String unused) {
       System.out.println("test with used: " + used);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
index 282371b..95d571d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsDoubleTest.java
@@ -6,9 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import java.util.Collection;
 import org.junit.Assert;
@@ -29,19 +27,16 @@
   }
 
   static class TestClass {
-    @KeepConstantArguments
     @NeverInline
     public static double a(double a) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static double a(double a, double b) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static double a(double a, double b, double c) {
       return a;
@@ -55,12 +50,6 @@
   }
 
   @Override
-  public void configure(R8FullTestBuilder builder) {
-    super.configure(builder);
-    builder.enableConstantArgumentAnnotations();
-  }
-
-  @Override
   public Class<?> getTestClass() {
     return TestClass.class;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
index 80309b2..06f665d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsIntTest.java
@@ -6,9 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.google.common.collect.ImmutableSet;
 import java.util.Collection;
@@ -33,26 +31,22 @@
 
   static class TestClass {
 
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, int b) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static int iinc(int a, int b) {
       b++;
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, int b, int c) {
       return a;
@@ -67,12 +61,6 @@
   }
 
   @Override
-  public void configure(R8FullTestBuilder builder) {
-    super.configure(builder);
-    builder.enableConstantArgumentAnnotations();
-  }
-
-  @Override
   public Class<?> getTestClass() {
     return TestClass.class;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
index 0dba75b..6f44c8d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsLongTest.java
@@ -6,9 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import java.util.Collection;
 import org.junit.Assert;
@@ -29,20 +27,16 @@
   }
 
   static class TestClass {
-
-    @KeepConstantArguments
     @NeverInline
     public static long a(long a) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static long a(long a, long b) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static long a(long a, long b, long c) {
       return a;
@@ -56,12 +50,6 @@
   }
 
   @Override
-  public void configure(R8FullTestBuilder builder) {
-    super.configure(builder);
-    builder.enableConstantArgumentAnnotations();
-  }
-
-  @Override
   public Class<?> getTestClass() {
     return TestClass.class;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
index dd63e78..717adac 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedTest.java
@@ -6,9 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import java.util.Collection;
 import org.junit.Assert;
@@ -29,8 +27,6 @@
   }
 
   static class TestClass {
-
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, Object b) {
       return a;
@@ -41,7 +37,6 @@
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, Object b, int c) {
       return c;
@@ -61,12 +56,6 @@
   }
 
   @Override
-  public void configure(R8FullTestBuilder builder) {
-    super.configure(builder);
-    builder.enableConstantArgumentAnnotations();
-  }
-
-  @Override
   public Class<?> getTestClass() {
     return TestClass.class;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
index 7ed9021..e10793d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedarguments/UnusedArgumentsMixedWidthTest.java
@@ -6,9 +6,7 @@
 
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import java.util.Collection;
 import org.junit.Assert;
@@ -29,26 +27,21 @@
   }
 
   static class TestClass {
-
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, long b) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static long a(long a, int b) {
       return a;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static int a(int a, long b, int c) {
       return c;
     }
 
-    @KeepConstantArguments
     @NeverInline
     public static long a(long a, int b, long c) {
       return c;
@@ -63,12 +56,6 @@
   }
 
   @Override
-  public void configure(R8FullTestBuilder builder) {
-    super.configure(builder);
-    builder.enableConstantArgumentAnnotations();
-  }
-
-  @Override
   public Class<?> getTestClass() {
     return TestClass.class;
   }
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
index beb87b8..7f41f05 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
@@ -95,8 +95,6 @@
     private boolean isInterface = false;
     private String access = "public";
 
-    private final List<String> pendingAnnotations = new ArrayList<>();
-
     private ClassBuilder(String name) {
       this(name, "java/lang/Object");
     }
@@ -126,13 +124,6 @@
       return addMethod("public abstract", name, argumentTypes, returnType);
     }
 
-    public void addRuntimeInvisibleAnnotation(String typeName) {
-      pendingAnnotations.add(
-          StringUtils.lines(
-              ".annotation invisible " + DescriptorUtils.javaTypeToDescriptor(typeName),
-              ".end annotation"));
-    }
-
     public MethodSignature addFinalMethod(
         String name,
         List<String> argumentTypes,
@@ -230,10 +221,6 @@
           .append(StringUtils.join("", argumentTypes, BraceType.PARENS))
           .append(returnType)
           .append("\n");
-      if (!pendingAnnotations.isEmpty()) {
-        pendingAnnotations.forEach(builder::append);
-        pendingAnnotations.clear();
-      }
       for (String line : lines) {
         builder.append(line).append("\n");
       }
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index 2516b74..495eae6 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -262,7 +262,7 @@
     }
   }
 
-  protected void checkMethodPresenceInInput(
+  private void checkMethodPresenceInInput(
       String className, MethodSignature methodSignature, boolean isPresent) {
     boolean foundMethod = AsmUtils.doesMethodExist(classpath, className,
         methodSignature.name, methodSignature.toDescriptor());
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 46adea0..3d872c4 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -14,7 +14,6 @@
 import com.android.tools.r8.R8TestBuilder;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.ToolHelper.KotlinTargetVersion;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.jasmin.JasminBuilder;
 import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
@@ -29,6 +28,7 @@
 import java.util.Collection;
 import java.util.Collections;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -111,7 +111,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(outerClass, getterAccessor);
-                checkMethodIsRemoved(outerClass, setterAccessor);
+                checkMethodIsKept(outerClass, setterAccessor);
               }
             });
   }
@@ -146,7 +146,7 @@
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
 
                 checkMethodIsKept(outerClass, getterAccessor);
-                checkMethodIsRemoved(outerClass, setterAccessor);
+                checkMethodIsKept(outerClass, setterAccessor);
               }
             });
   }
@@ -180,7 +180,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(outerClass, getterAccessor);
-                checkMethodIsRemoved(outerClass, setterAccessor);
+                checkMethodIsKept(outerClass, setterAccessor);
               }
             });
   }
@@ -214,7 +214,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(outerClass, getterAccessor);
-                checkMethodIsRemoved(outerClass, setterAccessor);
+                checkMethodIsKept(outerClass, setterAccessor);
               }
             });
   }
@@ -247,7 +247,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(outerClass, getterAccessor);
-                checkMethodIsRemoved(outerClass, setterAccessor);
+                checkMethodIsKept(outerClass, setterAccessor);
               }
             });
   }
@@ -340,6 +340,7 @@
   }
 
   @Test
+  @Ignore("b/74103342")
   public void testAccessorFromPrivate() throws Exception {
     TestKotlinCompanionClass testedClass = ACCESSOR_COMPANION_PROPERTY_CLASS;
     String mainClass = addMainToClasspath("accessors.AccessorKt",
@@ -347,8 +348,28 @@
     runTest("accessors", mainClass)
         .inspect(
             inspector -> {
-              checkClassIsRemoved(inspector, testedClass.getOuterClassName());
-              checkClassIsRemoved(inspector, testedClass.getClassName());
+              ClassSubject outerClass =
+                  checkClassIsKept(inspector, testedClass.getOuterClassName());
+              ClassSubject companionClass = checkClassIsKept(inspector, testedClass.getClassName());
+              String propertyName = "property";
+              FieldSubject fieldSubject =
+                  checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
+              assertTrue(fieldSubject.getField().accessFlags.isStatic());
+
+              // We cannot inline the getter because we don't know if NPE is preserved.
+              MemberNaming.MethodSignature getter = testedClass.getGetterForProperty(propertyName);
+              checkMethodIsKept(companionClass, getter);
+
+              // We should always inline the static accessor method.
+              MemberNaming.MethodSignature getterAccessor =
+                  testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+              checkMethodIsRemoved(companionClass, getterAccessor);
+
+              if (allowAccessModification) {
+                assertTrue(fieldSubject.getField().accessFlags.isPublic());
+              } else {
+                assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+              }
             });
   }
 
@@ -368,6 +389,7 @@
   }
 
   @Test
+  @Ignore("b/74103342")
   public void testPrivatePropertyAccessorForInnerClassCanBeInlined() throws Exception {
     TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_INNER_CLASS;
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -375,13 +397,6 @@
     runTest("accessors", mainClass)
         .inspect(
             inspector -> {
-              if (allowAccessModification
-                  && (testParameters.isCfRuntime()
-                      || !kotlinParameters.is(KOTLINC_1_5_0, KotlinTargetVersion.JAVA_8))) {
-                checkClassIsRemoved(inspector, testedClass.getClassName());
-                return;
-              }
-
               ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
 
               String propertyName = "privateProp";
@@ -400,12 +415,13 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(classSubject, getterAccessor);
-                checkMethodIsRemoved(classSubject, setterAccessor);
+                checkMethodIsKept(classSubject, setterAccessor);
               }
             });
   }
 
   @Test
+  @Ignore("b/74103342")
   public void testPrivateLateInitPropertyAccessorForInnerClassCanBeInlined() throws Exception {
     TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_INNER_CLASS;
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -413,15 +429,31 @@
     runTest("accessors", mainClass)
         .inspect(
             inspector -> {
-              if (kotlinc.getCompilerVersion() == KOTLINC_1_5_0 && testParameters.isDexRuntime()) {
-                checkClassIsKept(inspector, testedClass.getClassName());
+              ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
+
+              String propertyName = "privateLateInitProp";
+              FieldSubject fieldSubject =
+                  checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
+              assertFalse(fieldSubject.getField().accessFlags.isStatic());
+
+              MemberNaming.MethodSignature getterAccessor =
+                  testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+              MemberNaming.MethodSignature setterAccessor =
+                  testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_INNER);
+              if (allowAccessModification) {
+                assertTrue(fieldSubject.getField().accessFlags.isPublic());
+                checkMethodIsRemoved(classSubject, getterAccessor);
+                checkMethodIsRemoved(classSubject, setterAccessor);
               } else {
-                checkClassIsRemoved(inspector, testedClass.getClassName());
+                assertTrue(fieldSubject.getField().accessFlags.isPrivate());
+                checkMethodIsKept(classSubject, getterAccessor);
+                checkMethodIsKept(classSubject, setterAccessor);
               }
             });
   }
 
   @Test
+  @Ignore("b/74103342")
   public void testAccessorForLambdaIsRemovedWhenNotUsed() throws Exception {
     TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_LAMBDA_CLASS;
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -429,11 +461,21 @@
     runTest("accessors", mainClass)
         .inspect(
             inspector -> {
-              checkClassIsRemoved(inspector, testedClass.getClassName());
+              ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
+              String propertyName = "property";
+
+              MemberNaming.MethodSignature getterAccessor =
+                  testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
+              MemberNaming.MethodSignature setterAccessor =
+                  testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
+
+              checkMethodIsRemoved(classSubject, getterAccessor);
+              checkMethodIsRemoved(classSubject, setterAccessor);
             });
   }
 
   @Test
+  @Ignore("b/74103342")
   public void testAccessorForLambdaCanBeInlined() throws Exception {
     TestKotlinClass testedClass = PROPERTY_ACCESS_FOR_LAMBDA_CLASS;
     String mainClass = addMainToClasspath(testedClass.className + "Kt",
@@ -441,25 +483,16 @@
     runTest("accessors", mainClass)
         .inspect(
             inspector -> {
-              if (allowAccessModification) {
-                checkClassIsRemoved(inspector, testedClass.getClassName());
-                return;
-              }
-
               ClassSubject classSubject = checkClassIsKept(inspector, testedClass.getClassName());
               String propertyName = "property";
               FieldSubject fieldSubject =
                   checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
               assertFalse(fieldSubject.getField().accessFlags.isStatic());
 
-              AccessorKind accessorKind =
-                  kotlinc.getCompilerVersion() == KOTLINC_1_5_0
-                      ? AccessorKind.FROM_INNER
-                      : AccessorKind.FROM_LAMBDA;
               MemberNaming.MethodSignature getterAccessor =
-                  testedClass.getGetterAccessorForProperty(propertyName, accessorKind);
+                  testedClass.getGetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
               MemberNaming.MethodSignature setterAccessor =
-                  testedClass.getSetterAccessorForProperty(propertyName, accessorKind);
+                  testedClass.getSetterAccessorForProperty(propertyName, AccessorKind.FROM_LAMBDA);
               if (allowAccessModification) {
                 assertTrue(fieldSubject.getField().accessFlags.isPublic());
                 checkMethodIsRemoved(classSubject, getterAccessor);
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index 4457386..5de5dbd 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -54,7 +54,9 @@
             "intrinsics",
             "intrinsics.IntrinsicsKt",
             testBuilder ->
-                testBuilder.addKeepRules(extraRules).noHorizontalClassMerging(Intrinsics.class))
+                testBuilder
+                    .addKeepRules(extraRules)
+                    .noHorizontalClassMerging(Intrinsics.class))
         .inspect(
             inspector -> {
               ClassSubject intrinsicsClass =
@@ -73,7 +75,8 @@
                               "checkParameterIsNotNull",
                               "void",
                               Lists.newArrayList("java.lang.Object", "java.lang.String")),
-                          !allowAccessModification)
+                          // TODO(b/179866251): This is also different on CF
+                          !allowAccessModification || testParameters.isCfRuntime())
                       .build());
             });
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index c605951..65822f7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -253,7 +253,9 @@
     runTest(
             PACKAGE_NAME,
             mainClass,
-            testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+            testBuilder ->
+                testBuilder
+                    .addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
               ClassSubject classSubject =
@@ -270,7 +272,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(classSubject, getter);
-                checkMethodIsRemoved(classSubject, setter);
+                checkMethodIsKept(classSubject, setter);
               }
             });
   }
@@ -648,7 +650,9 @@
     runTest(
             PACKAGE_NAME,
             mainClass,
-            testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+            testBuilder ->
+                testBuilder
+                    .addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
               ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -667,7 +671,7 @@
                 checkMethodIsRemoved(objectClass, setter);
               } else {
                 checkMethodIsKept(objectClass, getter);
-                checkMethodIsRemoved(objectClass, setter);
+                checkMethodIsKept(objectClass, setter);
               }
 
               if (allowAccessModification) {
@@ -720,7 +724,9 @@
     runTest(
             PACKAGE_NAME,
             mainClass,
-            testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+            testBuilder ->
+                testBuilder
+                    .addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
               ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -740,7 +746,7 @@
                 checkMethodIsRemoved(objectClass, setter);
               } else {
                 checkMethodIsKept(objectClass, getter);
-                checkMethodIsRemoved(objectClass, setter);
+                checkMethodIsKept(objectClass, setter);
               }
 
               if (allowAccessModification) {
@@ -759,7 +765,9 @@
     runTest(
             PACKAGE_NAME,
             mainClass,
-            testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+            testBuilder ->
+                testBuilder
+                    .addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
               ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -779,7 +787,7 @@
                 checkMethodIsRemoved(objectClass, setter);
               } else {
                 checkMethodIsKept(objectClass, getter);
-                checkMethodIsRemoved(objectClass, setter);
+                checkMethodIsKept(objectClass, setter);
               }
 
               if (allowAccessModification) {
@@ -888,7 +896,9 @@
     runTest(
             PACKAGE_NAME,
             mainClass,
-            testBuilder -> testBuilder.addOptionsModification(disableAggressiveClassOptimizations))
+            testBuilder ->
+                testBuilder
+                    .addOptionsModification(disableAggressiveClassOptimizations))
         .inspect(
             inspector -> {
               ClassSubject objectClass = checkClassIsKept(inspector, testedClass.getClassName());
@@ -906,7 +916,7 @@
               } else {
                 assertTrue(fieldSubject.getField().accessFlags.isPrivate());
                 checkMethodIsKept(objectClass, getter);
-                checkMethodIsRemoved(objectClass, setter);
+                checkMethodIsKept(objectClass, setter);
               }
             });
   }
diff --git a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
index 091a8b4..e83626b 100644
--- a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.naming.MemberNaming.MethodSignature;
 import com.android.tools.r8.utils.BooleanUtils;
-import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
 import com.android.tools.r8.utils.codeinspector.MethodSubject;
 import com.google.common.collect.ImmutableList;
@@ -48,13 +47,7 @@
             ImmutableList.of("java.util.Collection", STRING, STRING, "java.lang.Integer"));
 
     final String mainClassName = ex1.getClassName();
-    final String extraRules =
-        StringUtils.lines(
-            neverInlineMethod(mainClassName, testMethodSignature),
-            // TODO(b/173398086): uniqueMethodWithName() does not work with argument removal.
-            "-keepclassmembers,allowoptimization,allowshrinking class non_null.Example1Kt {",
-            "  *** forMakeAndModel(...);",
-            "}");
+    final String extraRules = neverInlineMethod(mainClassName, testMethodSignature);
     runTest(
             FOLDER,
             mainClassName,
@@ -63,11 +56,7 @@
             inspector -> {
               ClassSubject clazz = checkClassIsKept(inspector, ex1.getClassName());
 
-              // Verify forMakeAndModel(...) is present in the input.
-              checkMethodPresenceInInput(clazz.getOriginalName(), testMethodSignature, true);
-
-              // Find forMakeAndModel(...) after parameter removal.
-              MethodSubject testMethod = clazz.uniqueMethodWithName(testMethodSignature.name);
+              MethodSubject testMethod = checkMethodIsKept(clazz, testMethodSignature);
               long ifzCount =
                   testMethod.streamInstructions().filter(i -> i.isIfEqz() || i.isIfNez()).count();
               long paramNullCheckCount =
diff --git a/src/test/java/com/android/tools/r8/naming/EnumMinification.java b/src/test/java/com/android/tools/r8/naming/EnumMinification.java
index 3cf01e0..aeb142f 100644
--- a/src/test/java/com/android/tools/r8/naming/EnumMinification.java
+++ b/src/test/java/com/android/tools/r8/naming/EnumMinification.java
@@ -102,7 +102,7 @@
 class Main {
 
   public static void main(String[] args) {
-    Enum e = Enum.valueOf(System.currentTimeMillis() > 0 ? "VALUE1" : null);
+    Enum e = Enum.valueOf("VALUE1");
     System.out.print(e);
   }
 }
diff --git a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
index c129553..3c52044 100644
--- a/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/KotlinIntrinsicsIdentifierTest.java
@@ -97,12 +97,7 @@
                 getKotlinAnnotationJar(kotlinc))
             .addProgramFiles(getJavaJarFile(FOLDER))
             .addKeepMainRule(mainClassName)
-            .addKeepRules(
-                "-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
-                "  *** checkParameterIsNotNull(...);",
-                "}")
             .allowDiagnosticWarningMessages()
-            .enableProguardTestOptions()
             .minification(minification)
             .compile()
             .assertAllWarningMessagesMatch(
@@ -163,10 +158,7 @@
                     "-neverclassinline class **." + targetClassName,
                     "-" + NoVerticalClassMergingRule.RULE_NAME + " class **." + targetClassName,
                     "-" + NoHorizontalClassMergingRule.RULE_NAME + " class **." + targetClassName,
-                    "-neverinline class **." + targetClassName + " { <methods>; }",
-                    "-keepconstantarguments class kotlin.jvm.internal.Intrinsics {",
-                    "  *** checkParameterIsNotNull(...);",
-                    "}"))
+                    "-neverinline class **." + targetClassName + " { <methods>; }"))
             .allowDiagnosticWarningMessages()
             .minification(minification)
             .compile()
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
index 6c1175c..3d9645d 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
@@ -444,12 +444,10 @@
     ProcessResult javaOutput = runOnJavaNoVerifyRaw(builder, CLASS_NAME);
     assertEquals(0, javaOutput.exitCode);
 
-    List<String> pgConfigs =
-        ImmutableList.of(
-            keepMainProguardConfiguration(CLASS_NAME),
-            "-overloadaggressively",
-            "-dontoptimize",
-            "-dontshrink");
+    List<String> pgConfigs = ImmutableList.of(
+        keepMainProguardConfiguration(CLASS_NAME),
+        "-overloadaggressively",
+        "-dontshrink");
     AndroidApp app = compileWithR8(builder, pgConfigs, null, backend);
 
     CodeInspector codeInspector = new CodeInspector(app);
diff --git a/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java b/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
index 41d6a49..bf95231 100644
--- a/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
+++ b/src/test/java/com/android/tools/r8/regress/b165825758/Regress165825758Test.java
@@ -9,7 +9,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.NeverInline;
-import com.android.tools.r8.NeverReprocessMethod;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
@@ -36,7 +35,7 @@
 
   @Parameterized.Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+    return getTestParameters().withAllRuntimes().withAllApiLevels().build();
   }
 
   public Regress165825758Test(TestParameters parameters) {
@@ -58,7 +57,6 @@
         .addInnerClasses(Regress165825758Test.class)
         .addKeepMainRule(TestClass.class)
         .addKeepClassRules(A.class)
-        .enableNeverReprocessMethodAnnotations()
         .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), TestClass.class)
         .assertSuccessWithOutput(EXPECTED)
@@ -101,7 +99,6 @@
   static class A {
 
     @NeverInline
-    @NeverReprocessMethod
     void synchronizedMethod() {
       synchronized (this) {
         TestClass.throwNpe();
diff --git a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
index 8c754e5..d9833ae 100644
--- a/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/repackage/RepackageWithPackagePrivateMethodParameterAnnotationTest.java
@@ -8,7 +8,6 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.Assert.assertEquals;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -37,7 +36,6 @@
         .addKeepClassRules(NonPublicKeptAnnotation.class)
         .addKeepRuntimeVisibleParameterAnnotations()
         .apply(this::configureRepackaging)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .setMinApi(parameters.getApiLevel())
         .compile()
@@ -69,7 +67,6 @@
 
   public static class IneligibleForRepackaging {
 
-    @KeepConstantArguments
     @NeverInline
     public static void greet(@NonPublicKeptAnnotation String greeting) {
       System.out.println(greeting);
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
index a9574e8..7733b23 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/EnumOptimizationTest.java
@@ -57,7 +57,6 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(Ordinals.class)
         .addKeepMainRule(Ordinals.class)
-        .enableConstantArgumentAnnotations()
         .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
@@ -107,7 +106,6 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(Names.class)
         .addKeepMainRule(Names.class)
-        .enableConstantArgumentAnnotations()
         .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
@@ -154,7 +152,6 @@
     testForR8(parameters.getBackend())
         .addProgramClassesAndInnerClasses(ToStrings.class)
         .addKeepMainRule(ToStrings.class)
-        .enableConstantArgumentAnnotations()
         .enableForceInliningAnnotations()
         .enableInliningAnnotations()
         .enableSideEffectAnnotations()
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/Names.java b/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
index 1c2964c..5dd5ec0 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/Names.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.AssumeMayHaveSideEffects;
 import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import java.util.concurrent.TimeUnit;
 
@@ -70,7 +69,6 @@
     return Number.DEFAULT.name();
   }
 
-  @KeepConstantArguments
   @NeverInline
   private static String phi(boolean value) {
     Number number = Number.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java b/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
index c3fbffc..e1eee2c 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/Ordinals.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.AssumeMayHaveSideEffects;
 import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import java.util.concurrent.TimeUnit;
 
@@ -80,7 +79,6 @@
     return Number.DEFAULT.ordinal();
   }
 
-  @KeepConstantArguments
   @NeverInline
   private static long phi(boolean value) {
     Number number = Number.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java b/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
index 020f5fd..8055344 100644
--- a/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
+++ b/src/test/java/com/android/tools/r8/rewrite/enums/ToStrings.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.AssumeMayHaveSideEffects;
 import com.android.tools.r8.ForceInline;
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import java.util.Locale;
 import java.util.concurrent.TimeUnit;
@@ -107,7 +106,6 @@
     return NoToString.DEFAULT.toString();
   }
 
-  @KeepConstantArguments
   @NeverInline
   private static String phi(boolean value) {
     NoToString number = NoToString.ONE;
diff --git a/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java b/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
index 26dcb7a..b32e476 100644
--- a/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/switches/MaxIntSwitchTest.java
@@ -7,7 +7,6 @@
 import static org.junit.Assert.assertTrue;
 
 import com.android.tools.r8.CompilationMode;
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.NeverPropagateValue;
 import com.android.tools.r8.TestBase;
@@ -105,7 +104,6 @@
     testForR8(parameters.getBackend())
         .addInnerClasses(this.getClass())
         .addKeepMainRule(TestClass.class)
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .setMinApi(parameters.getApiLevel())
@@ -127,7 +125,6 @@
           "?");
 
   static class TestClass {
-    @KeepConstantArguments
     @NeverInline
     @NeverPropagateValue
     public static void f(int i) {
@@ -146,7 +143,6 @@
       }
     }
 
-    @KeepConstantArguments
     @NeverInline
     @NeverPropagateValue
     public static void g(int i) {
@@ -166,7 +162,6 @@
       }
     }
 
-    @KeepConstantArguments
     @NeverInline
     @NeverPropagateValue
     public static void h(int i) {
@@ -179,7 +174,6 @@
       }
     }
 
-    @KeepConstantArguments
     @NeverInline
     @NeverPropagateValue
     public static void s(String s) {
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index 6a95824..d98725d 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.shaking;
 
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticException;
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
 import static com.android.tools.r8.utils.codeinspector.Matchers.proguardConfigurationRuleDoesNotMatch;
 import static com.android.tools.r8.utils.codeinspector.Matchers.typeVariableNotInScope;
@@ -12,6 +13,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
+import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8FullTestBuilder;
 import com.android.tools.r8.TestBase;
@@ -74,7 +76,8 @@
     assertThat(method, isPresent());
   }
 
-  @Test
+  // TODO(b/159966986): A general keep rule should not cause compiler assertion errors.
+  @Test(expected = CompilationFailedException.class)
   public void testPresentAnnotation() throws Exception {
     testForR8(Backend.CF)
         .addProgramFiles(R8_JAR)
@@ -82,7 +85,10 @@
         .addDontWarnGoogle()
         .addDontWarnJavax()
         .addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
-        .compile();
+        .allowDiagnosticInfoMessages()
+        .compileWithExpectedDiagnostics(
+            diagnostics -> diagnostics.assertErrorsMatch(diagnosticException(AssertionError.class)))
+        .apply(TestBase::verifyAllInfoFromGenericSignatureTypeParameterValidation);
   }
 
   @Test
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 03d5aa6..14259ca 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
@@ -31,7 +31,7 @@
 
   @Parameterized.Parameters(name = "{0}")
   public static TestParametersCollection data() {
-    return getTestParameters().withAllRuntimesAndApiLevels().build();
+    return getTestParameters().withAllRuntimes().build();
   }
 
   public DeadArrayLengthTest(TestParameters parameters) {
@@ -65,7 +65,7 @@
     testForD8()
         .release()
         .addProgramClasses(MAIN)
-        .setMinApi(parameters.getApiLevel())
+        .setMinApi(parameters.getRuntime())
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutput(EXPECTED_OUTPUT)
         .inspect(codeInspector -> inspect(codeInspector, false));
@@ -79,7 +79,7 @@
         .enableInliningAnnotations()
         .enableMemberValuePropagationAnnotations()
         .noMinification()
-        .setMinApi(parameters.getApiLevel())
+        .setMinApi(parameters.getRuntime())
         .run(parameters.getRuntime(), MAIN)
         .assertSuccessWithOutput(EXPECTED_OUTPUT)
         .inspect(codeInspector -> inspect(codeInspector, true));
diff --git a/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java b/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
index fdea6ab..9dfff6e 100644
--- a/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/attributes/KeepSignatureTest.java
@@ -9,7 +9,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.R8TestBuilder;
@@ -81,7 +80,6 @@
             ProguardKeepAttributes.INNER_CLASSES,
             ProguardKeepAttributes.ENCLOSING_METHOD)
         .setMinApi(parameters.getApiLevel())
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .run(parameters.getRuntime(), KeptClass.class)
@@ -139,7 +137,6 @@
 
     public List<P> notKeptField;
 
-    @KeepConstantArguments
     @NeverInline
     public List<P> notKeptMethod(P p1, P p2) {
       if (notKeptField != null) {
@@ -166,7 +163,6 @@
       return (R) keptField;
     }
 
-    @KeepConstantArguments
     @NeverInline
     @SuppressWarnings("unchecked")
     public <R> R notKeptMethod(T t) {
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
index 74232e1..d951404 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
@@ -3,10 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.shaking.examples;
 
-import static com.android.tools.r8.utils.codeinspector.Matchers.isAbsent;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertTrue;
-
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.shaking.TreeShakingTest;
 import com.android.tools.r8.utils.codeinspector.ClassSubject;
@@ -14,6 +10,7 @@
 import com.google.common.collect.ImmutableList;
 import java.util.Collections;
 import java.util.List;
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -44,7 +41,7 @@
   @Test
   public void testKeeprules() throws Exception {
     runTest(
-        TreeShaking2Test::shaking2SuperClassIsRemoved,
+        TreeShaking2Test::shaking2SuperClassIsAbstract,
         null,
         null,
         ImmutableList.of("src/test/examples/shaking2/keep-rules.txt"));
@@ -65,15 +62,16 @@
         null, null, null, ImmutableList.of("src/test/examples/shaking2/keep-rules-printusage.txt"));
   }
 
-  private static void shaking2SuperClassIsRemoved(CodeInspector inspector) {
+  private static void shaking2SuperClassIsAbstract(CodeInspector inspector) {
     ClassSubject clazz = inspector.clazz("shaking2.SuperClass");
-    assertTrue(clazz.isAbstract());
-    assertTrue(clazz.method("void", "virtualMethod", Collections.emptyList()).isAbstract());
-    assertThat(
-        clazz.method(
-            "void",
-            "virtualMethod2",
-            ImmutableList.of("int", "int", "int", "int", "int", "int", "int", "int")),
-        isAbsent());
+    Assert.assertTrue(clazz.isAbstract());
+    Assert.assertTrue(clazz.method("void", "virtualMethod", Collections.emptyList()).isAbstract());
+    Assert.assertTrue(
+        clazz
+            .method(
+                "void",
+                "virtualMethod2",
+                ImmutableList.of("int", "int", "int", "int", "int", "int", "int", "int"))
+            .isAbstract());
   }
 }
diff --git a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
index 4f8131d..4740853 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepparameternames/KeepParameterNamesTest.java
@@ -10,7 +10,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import com.android.tools.r8.KeepConstantArguments;
 import com.android.tools.r8.KeepUnusedArguments;
 import com.android.tools.r8.NeverClassInline;
 import com.android.tools.r8.NeverInline;
@@ -174,7 +173,6 @@
         .addInnerClasses(KeepParameterNamesTest.class)
         .addKeepMainRule(TestClass.class)
         .addKeepRules("-keep class " + Api.class.getTypeName() + "{ api*(...); }")
-        .enableConstantArgumentAnnotations()
         .enableInliningAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableUnusedArgumentAnnotations()
@@ -211,7 +209,6 @@
             "In Api.api2",
             "In Api.api3");
     testForR8(parameters.getBackend())
-        .enableConstantArgumentAnnotations()
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
         .enableUnusedArgumentAnnotations()
@@ -256,7 +253,6 @@
     }
 
     @NeverInline
-    @KeepConstantArguments
     @KeepUnusedArguments
     void api1(int parameter1, String parameter2) {
       try {
@@ -268,14 +264,12 @@
     }
 
     @NeverInline
-    @KeepConstantArguments
     @KeepUnusedArguments
     void api2(long parameter1, double parameter2) {
       System.out.println("In Api.api2");
     }
 
     @NeverInline
-    @KeepConstantArguments
     @KeepUnusedArguments
     void api3(List<String> parameter1, Map<String, Object> parameter2) {
       System.out.println("In Api.api3");
diff --git a/src/test/kotlinR8TestResources/unused_singleton/main.kt b/src/test/kotlinR8TestResources/unused_singleton/main.kt
index 6c06b8c..213acb1 100644
--- a/src/test/kotlinR8TestResources/unused_singleton/main.kt
+++ b/src/test/kotlinR8TestResources/unused_singleton/main.kt
@@ -10,6 +10,6 @@
   fun provideGreeting() = "Hello"
 }
 
-fun main(args: Array<String>?) {
+fun main(args: Array<String>) {
   println(provideGreeting())
 }