commit | 14d693eca29f7209bb392e11c902c6750593b625 | [log] [tgz] |
---|---|---|
author | Christoffer Quist Adamsen <christofferqa@google.com> | Thu Sep 30 10:27:42 2021 +0200 |
committer | Christoffer Quist Adamsen <christofferqa@google.com> | Thu Sep 30 10:27:42 2021 +0200 |
tree | ccf99c13b6ffb855c1e2b026c1d535ff30c319f0 | |
parent | 4c0427d07d780545ffa10074a15fc81f8e7168dc [diff] |
Avoid mutating arguments list in lens code rewriter Change-Id: I08e8c0325260ffaa4ab47611bd7a5d1377e431a0
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java index 04f692d..1e5f6d5 100644 --- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java +++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -253,7 +253,11 @@ ArgumentInfoCollection argumentInfoCollection = prototypeChanges.getArgumentInfoCollection(); if (argumentInfoCollection.isEmpty()) { - newInValues = invoke.inValues(); + if (prototypeChanges.hasExtraParameters()) { + newInValues = new ArrayList<>(invoke.inValues()); + } else { + newInValues = invoke.inValues(); + } } else { if (argumentInfoCollection.hasRemovedArguments()) { if (Log.ENABLED) {
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java b/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java index 4222450..e97d8c5 100644 --- a/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java +++ b/src/main/java/com/android/tools/r8/verticalclassmerging/InterfaceTypeToClassTypeLensCodeRewriterHelperImpl.java
@@ -63,6 +63,12 @@ return; } + if (originalInvoke.arguments().size() + != originalInvokedMethod.getNumberOfArguments(originalInvoke.isInvokeStatic())) { + // Wrong number of arguments, this instruction always fails. + return; + } + // Intentionally iterate the arguments of the original invoke, since the rewritten invoke could // have extra arguments added. for (int operandIndex = 0; operandIndex < originalInvoke.arguments().size(); operandIndex++) {