Reproduction for MemberRebinding and desugared lib bug
Bug: b/237701688
Change-Id: I1f27fed365b57a3f5453f845a7a55f3daeb45c45
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java
new file mode 100644
index 0000000..20f26fc
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ConcurrentHashMapSubclassV2Test.java
@@ -0,0 +1,85 @@
+// Copyright (c) 2022, 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.desugar.desugaredlibrary;
+
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.DEFAULT_SPECIFICATIONS;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.R8_L8SHRINK;
+import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.getJdk8Jdk11;
+
+import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
+import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.android.tools.r8.utils.StringUtils;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import org.junit.Assume;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(Parameterized.class)
+public class ConcurrentHashMapSubclassV2Test extends DesugaredLibraryTestBase {
+
+ private static final String EXPECTED_RESULT = StringUtils.lines("foo");
+
+ private final TestParameters parameters;
+ private final CompilationSpecification compilationSpecification;
+ private final LibraryDesugaringSpecification libraryDesugaringSpecification;
+ private final CompilationMode compilationMode;
+
+ @Parameters(name = "{0}, spec: {1}, {2}, {3}")
+ public static List<Object[]> data() {
+ return buildParameters(
+ getTestParameters().withDexRuntimes().withAllApiLevels().build(),
+ getJdk8Jdk11(),
+ DEFAULT_SPECIFICATIONS,
+ CompilationMode.values());
+ }
+
+ public ConcurrentHashMapSubclassV2Test(
+ TestParameters parameters,
+ LibraryDesugaringSpecification libraryDesugaringSpecification,
+ CompilationSpecification compilationSpecification,
+ CompilationMode compilationMode) {
+ this.parameters = parameters;
+ this.compilationSpecification = compilationSpecification;
+ this.libraryDesugaringSpecification = libraryDesugaringSpecification;
+ this.compilationMode = compilationMode;
+ }
+
+ @Test
+ public void test() throws Exception {
+ Assume.assumeFalse(
+ "b/237701688", compilationMode.isDebug() && compilationSpecification == R8_L8SHRINK);
+ testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
+ .addInnerClasses(getClass())
+ .setMode(compilationMode)
+ .addKeepMainRule(Executor.class)
+ .run(parameters.getRuntime(), Executor.class)
+ .assertSuccessWithOutput(EXPECTED_RESULT);
+ }
+
+ @SuppressWarnings("unchecked")
+ static class Executor {
+ public static void main(String[] args) {
+ StringListConcurrentHashMap<String> map = new StringListConcurrentHashMap<>();
+ map.putKeyAndArray("foo");
+ System.out.println(map.keys().nextElement());
+ }
+ }
+
+ static class StringListConcurrentHashMap<K> extends ConcurrentHashMap<K, List<String>> {
+ StringListConcurrentHashMap() {
+ super();
+ }
+
+ void putKeyAndArray(K key) {
+ this.putIfAbsent(key, new ArrayList<>());
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
index 5a2c8b0..28d4db2 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/test/DesugaredLibraryTestBuilder.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.desugar.desugaredlibrary.test;
import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.D8TestCompileResult;
import com.android.tools.r8.FeatureSplit;
import com.android.tools.r8.L8TestBuilder;
@@ -164,6 +165,11 @@
return this;
}
+ public DesugaredLibraryTestBuilder<T> setMode(CompilationMode mode) {
+ builder.setMode(mode);
+ return this;
+ }
+
private void withR8TestBuilder(Consumer<R8TestBuilder<?>> consumer) {
if (!builder.isTestShrinkerBuilder()) {
return;