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.