Merge "Modify printuses to also print keeprules"
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 2ff296e..4288e55 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.4.18-dev";
+  public static final String LABEL = "1.4.19-dev";
 
   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 13fb6cb..4b2fabb 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
@@ -3,8 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.ir.conversion;
 
-import com.android.tools.r8.code.Const4;
-import com.android.tools.r8.code.ConstWide16;
 import com.android.tools.r8.code.FillArrayData;
 import com.android.tools.r8.code.FillArrayDataPayload;
 import com.android.tools.r8.code.Format31t;
@@ -35,7 +33,6 @@
 import com.android.tools.r8.code.MoveWideFrom16;
 import com.android.tools.r8.code.Nop;
 import com.android.tools.r8.code.ReturnVoid;
-import com.android.tools.r8.code.ReturnWide;
 import com.android.tools.r8.code.Throw;
 import com.android.tools.r8.dex.Constants;
 import com.android.tools.r8.errors.Unreachable;
@@ -220,22 +217,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.