Don't assume marked synthetics derive directly from Object
Bug: b/286001996
Change-Id: Ic0ae6b569a7cc2366f98ecb093d4751285558260
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
index cf548f9..9e8ec26 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMarker.java
@@ -112,6 +112,7 @@
DexProgramClass clazz, SyntheticKind kind, AppView<?> appView) {
// TODO(b/158159959): Consider moving this to the dex writer similar to the CF case.
assert !appView.options().isGeneratingClassFiles();
+ assert !isDefinitelyNotSyntheticProgramClass(clazz);
clazz.setAnnotations(
clazz
.annotations()
@@ -148,9 +149,6 @@
private static SyntheticMarker internalStripMarkerFromClass(
DexProgramClass clazz, AppView<?> appView) {
- if (clazz.superType != appView.dexItemFactory().objectType) {
- return NO_MARKER;
- }
if (isDefinitelyNotSyntheticProgramClass(clazz)) {
return NO_MARKER;
}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/ThreadLocalBackportTest.java b/src/test/java/com/android/tools/r8/desugar/backports/ThreadLocalBackportTest.java
index 3c6e599..8fbadfa 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/ThreadLocalBackportTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/ThreadLocalBackportTest.java
@@ -8,6 +8,8 @@
import static com.android.tools.r8.utils.AndroidApiLevel.LATEST;
import static org.hamcrest.CoreMatchers.containsString;
+import com.android.tools.r8.D8TestCompileResult;
+import com.android.tools.r8.OutputMode;
import com.android.tools.r8.TestDiagnosticMessages;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -56,6 +58,24 @@
}
@Test
+ public void testIntermediateD8() throws Exception {
+ D8TestCompileResult intermediate =
+ testForD8(parameters.getBackend())
+ .addInnerClasses(getClass())
+ .setOutputMode(
+ parameters.isCfRuntime() ? OutputMode.ClassFile : OutputMode.DexFilePerClass)
+ .setMinApi(parameters)
+ .compileWithExpectedDiagnostics(this::checkDiagnostics);
+
+ testForD8(parameters.getBackend())
+ .addProgramFiles(intermediate.writeToZip())
+ .setMinApi(parameters)
+ .compile()
+ .run(parameters.getRuntime(), TestClass.class)
+ .apply(this::checkExpected);
+ }
+
+ @Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
testForR8(parameters.getBackend())