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))