aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Béra <clementbera@google.com>2021-03-22 09:14:42 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-03-22 09:14:42 +0000
commit99fe3a106ce68ae7a770aab5d54b8813cc8418ec (patch)
tree729b908b0b0abba95e155afb4a27f0f6f0c409be
parenta80b92c0950dce55f1e7006e46249aea4402440e (diff)
parente56a240cabdd531eb8c0f0e2dc24f12174ac0192 (diff)
downloadr8-99fe3a106ce68ae7a770aab5d54b8813cc8418ec.tar.gz
Fix maxLocals bug with ForwardMethodBuilder am: e56a240cab
Original change: undetermined Change-Id: I434f4a08f6ab729610346a59b716db8de0115ea5
-rw-r--r--src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java12
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java5
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java1
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java5
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java1
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java24
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java1
-rw-r--r--src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java5
8 files changed, 34 insertions, 20 deletions
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
index 0c6b359a9..48536cc8d 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
@@ -171,15 +171,17 @@ public class ForwardMethodBuilder {
maxLocals += 1;
}
DexType[] sourceParameters = getSourceParameters();
- for (int i = 0;
- i < sourceParameters.length - BooleanUtils.intValue(sourceMethodHasExtraUnusedParameter);
- i++) {
+ for (int i = 0; i < sourceParameters.length; i++) {
DexType parameter = sourceParameters[i];
ValueType parameterType = ValueType.fromDexType(parameter);
- instructions.add(new CfLoad(parameterType, maxLocals));
+ if (!(sourceMethodHasExtraUnusedParameter && i == sourceParameters.length - 1)) {
+ // We do not need to load the last parameter if it is unused.
+ // We still need to increase the maxStack/maxLocals values for the method to verify.
+ instructions.add(new CfLoad(parameterType, maxLocals));
+ maybeInsertArgumentCast(i, parameter, instructions);
+ }
maxStack += parameterType.requiredRegisters();
maxLocals += parameterType.requiredRegisters();
- maybeInsertArgumentCast(i, parameter, instructions);
}
instructions.add(new CfInvoke(getInvokeOpcode(), targetMethod, isInterface));
if (!targetMethod.getReturnType().isVoidType()) {
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
index 68f3fcfe9..58cf4989b 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/FullNestOnProgramPathTest.java
@@ -32,7 +32,6 @@ import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.function.BiFunction;
import java.util.function.Function;
-import org.junit.Assume;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -54,6 +53,7 @@ public class FullNestOnProgramPathTest extends TestBase {
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
.withDexRuntimes()
.withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+ .enableApiLevelsForCf()
.build();
}
@@ -120,9 +120,8 @@ public class FullNestOnProgramPathTest extends TestBase {
@Test
public void testSingleNestD8() throws Exception {
- Assume.assumeTrue(parameters.isDexRuntime());
for (String nestID : NEST_IDS) {
- testForD8()
+ testForD8(parameters.getBackend())
.setMinApi(parameters.getApiLevel())
.addProgramFiles(classesOfNest(nestID))
.compile()
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
index 47320d8ed..ffaca184e 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/MinimumNumberOfBridgesGenerated.java
@@ -42,6 +42,7 @@ public class MinimumNumberOfBridgesGenerated extends TestBase {
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
.withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+ .enableApiLevelsForCf()
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
index 2abe13357..00575cd60 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesUpdateTest.java
@@ -43,7 +43,10 @@ public class NestAttributesUpdateTest extends TestBase {
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK11).build();
+ return getTestParameters()
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .withAllApiLevelsAlsoForCf()
+ .build();
}
@Test
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
index 9f41a1739..3e8fc2a81 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestClassMergingTest.java
@@ -44,6 +44,7 @@ public class NestClassMergingTest extends TestBase {
public static TestParametersCollection data() {
return getTestParameters()
.withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .withAllApiLevelsAlsoForCf()
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
index fd874a14a..2533da9f3 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestCompilationExceptionTest.java
@@ -32,7 +32,6 @@ import com.android.tools.r8.references.Reference;
import java.nio.file.Path;
import java.util.List;
import org.hamcrest.Matcher;
-import org.junit.Assume;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -54,12 +53,12 @@ public class NestCompilationExceptionTest extends TestBase {
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
.withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+ .enableApiLevelsForCf()
.build();
}
@Test
public void testD8() throws Exception {
- Assume.assumeTrue(parameters.isDexRuntime());
testMissingNestHostError(true);
testIncompleteNestError(true);
}
@@ -87,7 +86,9 @@ public class NestCompilationExceptionTest extends TestBase {
.map(name -> CLASSES_PATH.resolve(name + CLASS_EXTENSION))
.collect(toList());
if (d8) {
- return testForD8().setMinApi(parameters.getApiLevel()).addProgramFiles(matchingClasses);
+ return testForD8(parameters.getBackend())
+ .setMinApi(parameters.getApiLevel())
+ .addProgramFiles(matchingClasses);
} else {
return testForR8(parameters.getBackend())
.noTreeShaking()
@@ -109,10 +110,11 @@ public class NestCompilationExceptionTest extends TestBase {
.compileWithExpectedDiagnostics(
diagnostics -> {
if (d8) {
- diagnostics
- .assertOnlyErrors()
- .assertErrorsMatch(
- diagnosticType(MissingNestHostNestDesugarDiagnostic.class));
+ if (parameters.getBackend().isDex()) {
+ diagnostics.assertOnlyErrors();
+ }
+ diagnostics.assertErrorsMatch(
+ diagnosticType(MissingNestHostNestDesugarDiagnostic.class));
MissingNestHostNestDesugarDiagnostic diagnostic =
(MissingNestHostNestDesugarDiagnostic) diagnostics.getErrors().get(0);
@@ -148,9 +150,11 @@ public class NestCompilationExceptionTest extends TestBase {
.compileWithExpectedDiagnostics(
diagnostics -> {
if (d8) {
- diagnostics
- .assertOnlyErrors()
- .assertErrorsMatch(diagnosticType(IncompleteNestNestDesugarDiagnosic.class));
+ if (parameters.getBackend().isDex()) {
+ diagnostics.assertOnlyErrors();
+ }
+ diagnostics.assertErrorsMatch(
+ diagnosticType(IncompleteNestNestDesugarDiagnosic.class));
IncompleteNestNestDesugarDiagnosic diagnostic =
(IncompleteNestNestDesugarDiagnosic) diagnostics.getErrors().get(0);
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
index b216639ed..04eac5e8a 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestConstructorRemovedArgTest.java
@@ -35,6 +35,7 @@ public class NestConstructorRemovedArgTest extends TestBase {
.withDexRuntime(DexVm.Version.first())
.withDexRuntime(DexVm.Version.last())
.withApiLevelsStartingAtIncluding(apiLevelWithInvokeCustomSupport())
+ .enableApiLevelsForCf()
.build();
}
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
index 373f6fc34..726f39174 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestMethodInlinedTest.java
@@ -36,7 +36,10 @@ public class NestMethodInlinedTest extends TestBase {
@Parameters(name = "{0}")
public static TestParametersCollection data() {
- return getTestParameters().withCfRuntimesStartingFromIncluding(CfVm.JDK11).build();
+ return getTestParameters()
+ .withCfRuntimesStartingFromIncluding(CfVm.JDK11)
+ .withAllApiLevelsAlsoForCf()
+ .build();
}
@Test