Version 1.0.8. Merge: Fix types when translating dup2_x2 from the jar frontend. CL: https://r8-review.googlesource.com/15761 Merge: Add regression test for dup2_x2 bug. CL: https://r8-review.googlesource.com/15762 R=zerny@google.com Change-Id: I49b8d7b2996819e7b89a92d5d621a567f812e19c
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java index 29fce2f..eba3f9e 100644 --- a/src/main/java/com/android/tools/r8/Version.java +++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@ // This field is accessed from release scripts using simple pattern matching. // Therefore, changing this field could break our release scripts. - public static final String LABEL = "v1.0.7"; + public static final String LABEL = "v1.0.8"; private Version() { }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java index 117bc6f..69ecb83 100644 --- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java +++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -2372,7 +2372,7 @@ builder.addMove(valueType(value1.type), stack0, stack2); builder.addMove(valueType(value2.type), stack1, stack3); builder.addMove(valueType(value3.type), stack2, stack4); - builder.addMove(valueType(value3.type), stack3, stack5); + builder.addMove(valueType(value4.type), stack3, stack5); builder.addMove(valueType(value1.type), stack4, stack0); builder.addMove(valueType(value2.type), stack5, stack1); }
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress72758525.java b/src/test/java/com/android/tools/r8/jasmin/Regress72758525.java new file mode 100644 index 0000000..97331c8 --- /dev/null +++ b/src/test/java/com/android/tools/r8/jasmin/Regress72758525.java
@@ -0,0 +1,61 @@ +// Copyright (c) 2018, 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.jasmin; + +import com.android.tools.r8.jasmin.JasminBuilder.ClassFileVersion; +import org.junit.Test; + +public class Regress72758525 extends JasminTestBase { + + private JasminBuilder buildClass() { + JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4); + JasminBuilder.ClassBuilder clazz = builder.addClass("Test"); + + clazz.addDefaultConstructor(); + + clazz.addMainMethod( + ".limit stack 25", + ".limit locals 1", + "aload 0", + "dup", + "lconst_0", + "dconst_1", + "fconst_0", + "lconst_1", + "iconst_5", + "fconst_1", + "dconst_1", + "new Test", + "dup", + "invokespecial Test/<init>()V", + "lconst_0", + "new java/lang/Object", + "dup", + "invokespecial java/lang/Object/<init>()V", + "iconst_m1", + "dup2", + "dup2_x2", + "L0:", + "ineg", + "new java/lang/Object", + "dup", + "invokespecial java/lang/Object/<init>()V", + "dup2_x2", + "pop2", + "pop", + "aload 0", + "ifnull L0", + "i2f", + "invokestatic java/lang/Float/isNaN(F)Z", + "return"); + return builder; + } + + @Test + public void test() throws Exception { + JasminBuilder builder = buildClass(); + runOnArtD8(builder, "Test"); + } +}