Revert "Fix handling of R class in optimized shrinking"

Revert submission 91600

Reason for revert: fails on internal

Reverted changes: /q/submissionid:91600

Change-Id: I9f4ab0c241971ec86f35a8b25f7e16f75d0ee0ea
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
index 86ea3c0..d1b3d3e 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifier.java
@@ -248,32 +248,29 @@
     // safe assuming an incoming type state T. The type state T is derived from ExcStackFrame
     // by replacing the operand stack with a stack whose sole element is the handler's
     // exception class.
-    List<CfLabel> targets = tryCatchRange.getTargets();
-    for (int i = 0; i < targets.size(); i++) {
-      CfLabel target = targets.get(i);
-      DexType guard = tryCatchRange.guards.get(i);
+    for (CfLabel target : tryCatchRange.getTargets()) {
       CfFrame destinationFrame = labelToFrameMap.get(target);
       if (destinationFrame == null) {
         return CfCodeStackMapValidatingException.invalidTryCatchRange(
             method, tryCatchRange, "No frame for target catch range target", appView);
       }
-      Deque<PreciseFrameType> sourceStack =
-          ImmutableDeque.of(FrameType.initializedNonNullReference(guard));
-      AssignabilityResult assignabilityResult =
-          config.getAssignability().isStackAssignable(sourceStack, destinationFrame.getStack());
-      if (assignabilityResult.isFailed()) {
-        return CfCodeStackMapValidatingException.invalidTryCatchRange(
-            method, tryCatchRange, assignabilityResult.asFailed().getMessage(), appView);
-      }
-    }
-    // From the spec: the handler's exception class is assignable to the class Throwable.
-    for (DexType guard : tryCatchRange.guards) {
-      if (!config.getAssignability().isAssignable(guard, factory.throwableType)) {
-        return CfCodeStackMapValidatingException.invalidTryCatchRange(
-            method,
-            tryCatchRange,
-            "Could not assign " + guard.getTypeName() + " to java.lang.Throwable",
-            appView);
+      // From the spec: the handler's exception class is assignable to the class Throwable.
+      for (DexType guard : tryCatchRange.guards) {
+        if (!config.getAssignability().isAssignable(guard, factory.throwableType)) {
+          return CfCodeStackMapValidatingException.invalidTryCatchRange(
+              method,
+              tryCatchRange,
+              "Could not assign " + guard.getTypeName() + " to java.lang.Throwable",
+              appView);
+        }
+        Deque<PreciseFrameType> sourceStack =
+            ImmutableDeque.of(FrameType.initializedNonNullReference(guard));
+        AssignabilityResult assignabilityResult =
+            config.getAssignability().isStackAssignable(sourceStack, destinationFrame.getStack());
+        if (assignabilityResult.isFailed()) {
+          return CfCodeStackMapValidatingException.invalidTryCatchRange(
+              method, tryCatchRange, assignabilityResult.asFailed().getMessage(), appView);
+        }
       }
     }
     return null;
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
index 51e854f..78abb50 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
@@ -21,11 +21,13 @@
 
   public static EnqueuerDeferredTracing create(
       AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer, Mode mode) {
-    InternalOptions options = appView.options();
-    if (!options.isShrinking() || !options.enableEnqueuerDeferredTracing) {
+    if (mode.isInitialTreeShaking()) {
       return empty();
     }
-    if (!options.isOptimizing() && !options.isOptimizedResourceShrinking()) {
+    InternalOptions options = appView.options();
+    if (!options.isOptimizing()
+        || !options.isShrinking()
+        || !options.enableEnqueuerDeferredTracing) {
       return empty();
     }
     return new EnqueuerDeferredTracingImpl(appView, enqueuer, mode);
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
index 5291978..1eacba7 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
@@ -128,11 +128,6 @@
     // field's holder. Therefore, we unconditionally trace the class initializer in this case.
     // The corresponding IR rewriter will rewrite the field access into an init-class instruction.
     if (accessKind.isStatic()) {
-      if (enqueuer.getMode().isInitialTreeShaking() && field.getHolder() != context.getHolder()) {
-        // TODO(b/338000616): No support for InitClass until we have LIR in the initial round of
-        //  tree shaking.
-        return false;
-      }
       KeepReason reason =
           enqueuer.getGraphReporter().reportClassReferencedFrom(field.getHolder(), context);
       enqueuer.getWorklist().enqueueTraceTypeReferenceAction(field.getHolder(), reason);
@@ -153,7 +148,7 @@
     }
 
     assert enqueuer.getKeepInfo(field).isBottom();
-    assert !enqueuer.getKeepInfo(field).isPinned(options) || options.isOptimizedResourceShrinking();
+    assert !enqueuer.getKeepInfo(field).isPinned(options);
 
     FieldAccessInfo info = enqueuer.getFieldAccessInfoCollection().get(field.getReference());
     if (info.hasReflectiveAccess()
@@ -167,12 +162,6 @@
                     || !minimumKeepInfo.isShrinkingAllowed())) {
       return false;
     }
-    if (!options.isOptimizing()) {
-      assert options.isOptimizedResourceShrinking();
-      if (!enqueuer.isRClass(field.getHolder())) {
-        return false;
-      }
-    }
 
     if (info.isWritten()) {
       // If the assigned value may have an override of Object#finalize() then give up.
diff --git a/src/test/java/com/android/tools/r8/androidresources/NoOptResourceShrinkingTest.java b/src/test/java/com/android/tools/r8/androidresources/NoOptResourceShrinkingTest.java
index 2248d93..e428d08 100644
--- a/src/test/java/com/android/tools/r8/androidresources/NoOptResourceShrinkingTest.java
+++ b/src/test/java/com/android/tools/r8/androidresources/NoOptResourceShrinkingTest.java
@@ -55,8 +55,13 @@
             resourceTableInspector -> {
               resourceTableInspector.assertContainsResourceWithName("string", "bar");
               resourceTableInspector.assertContainsResourceWithName("string", "foo");
-              resourceTableInspector.assertDoesNotContainResourceWithName(
-                  "string", "unused_string");
+              if (optimized) {
+                // TODO(b/336983087): This should be removed.
+                resourceTableInspector.assertContainsResourceWithName("string", "unused_string");
+              } else {
+                resourceTableInspector.assertDoesNotContainResourceWithName(
+                    "string", "unused_string");
+              }
             })
         .run(parameters.getRuntime(), FooBar.class)
         .assertSuccess();
diff --git a/src/test/java/com/android/tools/r8/androidresources/optimizedshrinking/TestOptimizedShrinking.java b/src/test/java/com/android/tools/r8/androidresources/optimizedshrinking/TestOptimizedShrinking.java
index 584426b..74c7102 100644
--- a/src/test/java/com/android/tools/r8/androidresources/optimizedshrinking/TestOptimizedShrinking.java
+++ b/src/test/java/com/android/tools/r8/androidresources/optimizedshrinking/TestOptimizedShrinking.java
@@ -107,7 +107,7 @@
 
                 // In optimized mode we track these correctly, so we should not unconditionally keep
                 // all attributes.
-                if (optimized) {
+                if (optimized && !debug) {
                   resourceTableInspector.assertDoesNotContainResourceWithName(
                       "attr", "attr_unused_styleable" + i);
                 } else {
diff --git a/src/test/java/com/android/tools/r8/enumunboxing/EmptyEnumUnboxingTest.java b/src/test/java/com/android/tools/r8/enumunboxing/EmptyEnumUnboxingTest.java
index 2cbfd3f..c2ab4e2 100644
--- a/src/test/java/com/android/tools/r8/enumunboxing/EmptyEnumUnboxingTest.java
+++ b/src/test/java/com/android/tools/r8/enumunboxing/EmptyEnumUnboxingTest.java
@@ -38,16 +38,8 @@
         .addInnerClasses(EmptyEnumUnboxingTest.class)
         .addKeepMainRule(Main.class)
         .addKeepRules(enumKeepRules.getKeepRules())
-        .addEnumUnboxingInspector(
-            inspector -> {
-              if (enumKeepRules.isStudio()) {
-                // TODO(b/166532373): Unbox enum with no cases.
-                inspector.assertNotUnboxed(MyEnum.class);
-              } else {
-                assert enumKeepRules.isNone();
-                inspector.assertUnboxed(MyEnum.class);
-              }
-            })
+        // TODO(b/166532373): Unbox enum with no cases.
+        .addEnumUnboxingInspector(inspector -> inspector.assertNotUnboxed(MyEnum.class))
         .enableNeverClassInliningAnnotations()
         .enableInliningAnnotations()
         .addOptionsModification(opt -> enableEnumOptions(opt, enumValueOptimization))