Add reproducer for b/426351560
Bug: b/426351560
Change-Id: Ic60a6982b797ded669d490057fb61eff2f5fcf27
diff --git a/src/test/java/com/android/tools/r8/regress/b426351560/Regress426351560Test.java b/src/test/java/com/android/tools/r8/regress/b426351560/Regress426351560Test.java
new file mode 100644
index 0000000..7c5ec5f
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/regress/b426351560/Regress426351560Test.java
@@ -0,0 +1,54 @@
+// Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.regress.b426351560;
+
+import static org.junit.Assume.assumeFalse;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.regress.b426351560.testclasses.Regress426351560TestClasses;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.StringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class Regress426351560Test extends TestBase {
+
+ @Parameter(0)
+ public TestParameters parameters;
+
+ @Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters().withAllRuntimesAndApiLevels().withPartialCompilation().build();
+ }
+
+ private static final String EXPECTED_OUTPUT = StringUtils.lines("Hello, world!");
+
+ @Test
+ public void testR8() throws Exception {
+ // TODO(b/427887773)
+ assumeFalse(parameters.isRandomPartialCompilation());
+ testForR8(parameters)
+ .addInnerClasses(Regress426351560TestClasses.class, getClass())
+ .addKeepRules("-keep class " + Main.class.getTypeName() + " { *; }")
+ .run(parameters.getRuntime(), Main.class)
+ .applyIf(
+ parameters.isDexRuntime()
+ && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.N),
+ rr -> rr.assertFailureWithErrorThatThrows(IllegalAccessError.class),
+ rr -> rr.assertSuccessWithOutput(EXPECTED_OUTPUT));
+ }
+
+ public static class Main extends Regress426351560TestClasses.A {
+ public static void main(String[] strArr) {
+ Main test = new Main();
+ System.out.println(test.defaultMethod());
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/regress/b426351560/testclasses/Regress426351560TestClasses.java b/src/test/java/com/android/tools/r8/regress/b426351560/testclasses/Regress426351560TestClasses.java
new file mode 100644
index 0000000..95e16df
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/regress/b426351560/testclasses/Regress426351560TestClasses.java
@@ -0,0 +1,14 @@
+// Copyright (c) 2025, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.regress.b426351560.testclasses;
+
+public class Regress426351560TestClasses {
+ interface I {
+ default String defaultMethod() {
+ return "Hello, world!";
+ }
+ }
+
+ public static class A implements I {}
+}