Enable deferred field tracing for primitive fields in platform
Fixes: b/343358175
Change-Id: I398524582fe1a0b1f86bdd0f7c061ce6f33b465b
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 c48ceb0..d7369fbd 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracing.java
@@ -22,7 +22,7 @@
public static EnqueuerDeferredTracing create(
AppView<? extends AppInfoWithClassHierarchy> appView, Enqueuer enqueuer, Mode mode) {
InternalOptions options = appView.options();
- if (!options.isShrinking() || !options.enableEnqueuerDeferredTracing) {
+ if (!options.isShrinking()) {
return empty();
}
if (!options.isOptimizedResourceShrinking()) {
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 af43714..1c3889d 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerDeferredTracingImpl.java
@@ -82,6 +82,11 @@
ProgramMethod context,
FieldAccessKind accessKind,
FieldAccessMetadata metadata) {
+ if (!fieldReference.getType().isPrimitiveType()
+ && !options.getTestingOptions().enableEnqueuerDeferredTracingForReferenceFields) {
+ return false;
+ }
+
ProgramField field = resolutionResult.getSingleProgramField();
if (field == null) {
return false;
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 62bd8a2..d68f123 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -737,9 +737,6 @@
// @dalvik.annotation.codegen.CovariantReturnType$CovariantReturnTypes.
public boolean processCovariantReturnTypeAnnotations = true;
- public boolean enableEnqueuerDeferredTracing =
- System.getProperty("com.android.tools.r8.disableEnqueuerDeferredTracing") == null;
-
public boolean loadAllClassDefinitions = false;
// Whether or not to check for valid multi-dex builds.
@@ -2367,6 +2364,8 @@
public boolean enableBridgeHoistingToSharedSyntheticSuperclass = false;
public boolean enableCheckCastAndInstanceOfRemoval = true;
public boolean enableDeadSwitchCaseElimination = true;
+ public boolean enableEnqueuerDeferredTracingForReferenceFields =
+ System.getProperty("com.android.tools.r8.disableEnqueuerDeferredTracing") == null;
public boolean enableInvokeSuperToInvokeVirtualRewriting = true;
public boolean enableLegacyClassDefOrdering =
System.getProperty("com.android.tools.r8.enableLegacyClassDefOrdering") != null;