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.