Include companion class clinits in baseline profile
Fixes: b/279414669
Change-Id: I76e4cfa7eef1c8e31c849c6517ab95c7fc47a217
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
index 3e410e8..01a25e7 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CfInstructionDesugaringEventConsumer.java
@@ -359,8 +359,8 @@
}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
- methodProcessor.scheduleDesugaredMethodForProcessing(method);
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
+ methodProcessor.scheduleDesugaredMethodForProcessing(companionMethod);
}
@Override
@@ -496,7 +496,7 @@
}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
// Intentionally empty. The method will be hit by tracing if required.
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
index 6eb7bca..21771de 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceDesugaringSyntheticHelper.java
@@ -565,7 +565,9 @@
appView.dexItemFactory().createProto(appView.dexItemFactory().voidType),
appView,
methodBuilder -> createCompanionClassInitializer(iface, methodBuilder),
- eventConsumer::acceptCompanionClassClinit);
+ companionMethod ->
+ eventConsumer.acceptCompanionClassClinit(
+ iface.getProgramClassInitializer(), companionMethod));
}
private DexEncodedField ensureStaticClinitFieldToTriggerInterfaceInitialization(
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringBaseEventConsumer.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringBaseEventConsumer.java
index 8b02f6c..76f0d7c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringBaseEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringBaseEventConsumer.java
@@ -7,7 +7,7 @@
public interface InterfaceMethodDesugaringBaseEventConsumer {
- void acceptCompanionClassClinit(ProgramMethod method);
+ void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod);
void acceptDefaultAsCompanionMethod(ProgramMethod method, ProgramMethod companionMethod);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringEventConsumer.java
index cea8eab..587dafa 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodDesugaringEventConsumer.java
@@ -24,7 +24,7 @@
private EmptyInterfaceMethodDesugaringEventConsumer() {}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
// Intentionally empty.
}
diff --git a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
index a9d901a..94232e2 100644
--- a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
@@ -91,8 +91,9 @@
}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
- parent.acceptCompanionClassClinit(method);
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
+ additionsCollection.addMethodAndHolderIfContextIsInProfile(companionMethod, method);
+ parent.acceptCompanionClassClinit(method, companionMethod);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingRootSetBuilderEventConsumer.java b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingRootSetBuilderEventConsumer.java
index 2a10ce0..22691ca 100644
--- a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingRootSetBuilderEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingRootSetBuilderEventConsumer.java
@@ -28,8 +28,9 @@
}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
- parent.acceptCompanionClassClinit(method);
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
+ additionsCollection.addMethodAndHolderIfContextIsInProfile(companionMethod, method);
+ parent.acceptCompanionClassClinit(method, companionMethod);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilderEventConsumer.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilderEventConsumer.java
index b59961e..6bf84a6 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilderEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilderEventConsumer.java
@@ -31,7 +31,7 @@
}
@Override
- public void acceptCompanionClassClinit(ProgramMethod method) {
+ public void acceptCompanionClassClinit(ProgramMethod method, ProgramMethod companionMethod) {
// Intentionally empty.
}