blob: 80309b26ad4eb2992f43aeaa4d7dfc8e28b2f135 [file] [log] [blame]
// 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.ir.optimize.unusedarguments;
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.KeepConstantArguments;
import com.android.tools.r8.NeverInline;
import com.android.tools.r8.R8FullTestBuilder;
import com.android.tools.r8.utils.codeinspector.ClassSubject;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import java.util.Set;
import org.junit.Assert;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class UnusedArgumentsIntTest extends UnusedArgumentsTestBase {
private static final Set<String> methodsThatWontBeOptimized = ImmutableSet.of("main", "iinc");
public UnusedArgumentsIntTest(boolean minification) {
super(minification);
}
@Parameters(name = "minification:{0}")
public static Collection<Object[]> data() {
return UnusedArgumentsTestBase.data();
}
static class TestClass {
@KeepConstantArguments
@NeverInline
public static int a(int a) {
return a;
}
@KeepConstantArguments
@NeverInline
public static int a(int a, int b) {
return a;
}
@KeepConstantArguments
@NeverInline
public static int iinc(int a, int b) {
b++;
return a;
}
@KeepConstantArguments
@NeverInline
public static int a(int a, int b, int c) {
return a;
}
public static void main(String[] args) {
System.out.print(a(1));
System.out.print(a(2, 3));
System.out.print(a(4, 5, 6));
System.out.print(iinc(8, 3));
}
}
@Override
public void configure(R8FullTestBuilder builder) {
super.configure(builder);
builder.enableConstantArgumentAnnotations();
}
@Override
public Class<?> getTestClass() {
return TestClass.class;
}
@Override
public String getExpectedResult() {
return "1248";
}
@Override
public void inspectTestClass(ClassSubject clazz) {
assertEquals(5, clazz.allMethods().size());
clazz.forAllMethods(
method -> {
Assert.assertTrue(
methodsThatWontBeOptimized.contains(method.getOriginalName())
|| (method.getFinalSignature().parameters.length == 1
&& method.getFinalSignature().parameters[0].equals("int")));
});
}
}