Version 1.3.49.
R=christofferqa@google.com
Merge: Another fix to workaround issues with a workaround.
CL: https://r8-review.googlesource.com/c/r8/+/32462
Bug: 119895393
Change-Id: I492a4a3e0d91583537ba7aa0e2e5279b4a5423f4
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 8fb488f..e3cb075 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "1.3.48";
+ public static final String LABEL = "1.3.49";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index e1bfb24..ce17115 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -216,22 +216,14 @@
if (options.canHaveTracingPastInstructionsStreamBug()
&& dexInstructions.get(dexInstructions.size() - 1) instanceof Throw
&& hasBackwardsBranch) {
- List<Instruction> instructions = new ArrayList<>();
- DexType returnType = ir.method.method.proto.returnType;
- if (returnType.isVoidType()) {
- instructions.add(new ReturnVoid());
- } else if (returnType.isDoubleType() || returnType.isLongType()) {
- instructions.add(new ConstWide16(0, 0));
- instructions.add(new ReturnWide(0));
- } else {
- instructions.add(new Const4(0, 0));
- instructions.add(new com.android.tools.r8.code.Return(0));
- }
- for (Instruction instruction : instructions) {
- instruction.setOffset(offset);
- offset += instruction.getSize();
- dexInstructions.add(instruction);
- }
+ // Generating a throw with the right type makes some Art constant propagation
+ // implementations crash. Therefore, since this is dead code anyway, we do not
+ // generate a return of the right type. Instead we just generate an unreachable
+ // return-void. See b/121355317.
+ Instruction returnVoid = new ReturnVoid();
+ returnVoid.setOffset(offset);
+ offset += returnVoid.getSize();
+ dexInstructions.add(returnVoid);
}
// Compute switch payloads.