Reproduce issue 384844007 Bug: b/384844007 Change-Id: I5d6e19603813fdefe60543ab3dd6275343ddeeae
diff --git a/src/test/java/com/android/tools/r8/B384844007Test.java b/src/test/java/com/android/tools/r8/B384844007Test.java new file mode 100644 index 0000000..b8bd4dd --- /dev/null +++ b/src/test/java/com/android/tools/r8/B384844007Test.java
@@ -0,0 +1,66 @@ +// Copyright (c) 2024, 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; + +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 B384844007Test extends TestBase { + + @Parameter(0) + public TestParameters parameters; + + @Parameters(name = "{0}") + public static TestParametersCollection data() { + return getTestParameters().withAllRuntimesAndApiLevels().build(); + } + + private static final String EXPECTED_OUTPUT = StringUtils.lines("i = 65523"); + private static final String UNEXPECTED_OUTPUT = StringUtils.lines("i = -13"); + + @Test + public void testJvm() throws Exception { + parameters.assumeJvmTestParameters(); + testForJvm(parameters) + .addInnerClasses(getClass()) + .run(parameters.getRuntime(), TestClass.class) + .assertSuccessWithOutput(EXPECTED_OUTPUT); + } + + @Test + public void testD8() throws Exception { + parameters.assumeDexRuntime(); + testForD8(parameters.getBackend()) + .addInnerClasses(getClass()) + .setMinApi(parameters) + .run(parameters.getRuntime(), TestClass.class) + .assertSuccessWithOutput(EXPECTED_OUTPUT); + } + + @Test + public void testR8() throws Exception { + testForR8(parameters.getBackend()) + .addInnerClasses(getClass()) + .addKeepMainRule(TestClass.class) + .setMinApi(parameters) + .run(parameters.getRuntime(), TestClass.class) + .assertSuccessWithOutput(UNEXPECTED_OUTPUT); + } + + static class TestClass { + + public static void main(String[] args) { + int i = -13; + char c = (char) i; + i = c; + System.out.println("i = " + i); + } + } +}