blob: e8efd38b4995bec5c1e46aa2f83f2ff7e23f558c [file] [log] [blame]
// Copyright (c) 2017, 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 static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.code.Const4;
import com.android.tools.r8.code.IfNez;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.ir.code.ConstNumber;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.InternalOptions;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
public class Regress65432240 extends JasminTestBase {
@Test
public void testConstantNotIntoEntryBlock() throws Exception {
JasminBuilder builder = new JasminBuilder();
JasminBuilder.ClassBuilder clazz = builder.addClass("Test");
MethodSignature signature = clazz.addStaticMethod("test1", ImmutableList.of("I"), "I",
".limit stack 3",
".limit locals 2",
" iload 0",
" ifne L2",
"L1:",
" iconst_0",
" ireturn",
"L2:",
" iload 0",
" iload 0",
" iconst_1",
" isub",
" invokestatic Test/test1(I)I",
" iadd",
" ireturn");
clazz.addMainMethod(
".limit stack 2",
".limit locals 1",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test1(I)I",
" invokestatic java/lang/Integer/toString(I)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" getstatic java/lang/System/out Ljava/io/PrintStream;",
" iconst_0",
" invokestatic Test/test1(I)I",
" invokestatic java/lang/Integer/toString(I)Ljava/lang/String;",
" invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V",
" return");
String expected = runOnJava(builder, clazz.name);
InternalOptions options = new InternalOptions();
DexApplication originalApplication = buildApplication(builder, options);
DexApplication processedApplication = process(originalApplication, options);
DexEncodedMethod method = getMethod(processedApplication, clazz.name, signature);
DexCode code = method.getCode().asDexCode();
assertTrue(code.instructions[0] instanceof IfNez);
String artResult = runArt(processedApplication, options, clazz.name);
assertEquals(expected, artResult);
}
}