commit | d356a5c4128ae76bde626d2dc3a3882ab3f1eeda | [log] [tgz] |
---|---|---|
author | Christoffer Quist Adamsen <christofferqa@google.com> | Wed Sep 29 16:51:27 2021 +0200 |
committer | Christoffer Quist Adamsen <christofferqa@google.com> | Wed Sep 29 16:51:27 2021 +0200 |
tree | 8c82a9f8b0d4bfd377b5905271b80825c186cee2 | |
parent | 44278f00d635ac6da350095a805fe70635d24d15 [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 b123856..d012cd6 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++) {