Minor cleanup related to instructions that may follow throwing instructions

Change-Id: I7614ab5d28db0f9e5e9c4e8ccc5c1b1446b9a3a3
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
index 6bdab70..64e2c14 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalRead.java
@@ -91,4 +91,9 @@
   public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
     return false;
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
index 7feb7f6..a7a0683 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalUninitialized.java
@@ -35,4 +35,9 @@
   public DebugLocalUninitialized asDebugLocalUninitialized() {
     return this;
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
index b893f27..4e1e00a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalWrite.java
@@ -70,4 +70,9 @@
   public void buildCf(CfBuilder builder) {
     builder.add(new CfStore(outType(), builder.getLocalRegister(outValue())));
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
index 12f974e..5b4c66b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
@@ -138,4 +138,9 @@
   public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
     return false;
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java b/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
index 0808885..b9ab9cd 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugPosition.java
@@ -92,4 +92,9 @@
   public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, DexType context) {
     return false;
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Goto.java b/src/main/java/com/android/tools/r8/ir/code/Goto.java
index ec3066c..953bdcf 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Goto.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Goto.java
@@ -116,4 +116,9 @@
   public void buildCf(CfBuilder builder) {
     builder.add(new CfGoto(builder.getLabel(getTarget())));
   }
+
+  @Override
+  public boolean isAllowedAfterThrowingInstruction() {
+    return true;
+  }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index cb32015..c4180a3 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -791,11 +791,9 @@
             seenThrowing = true;
             continue;
           }
-          // After the throwing instruction only debug instructions and the final jump
-          // instruction is allowed.
-          if (seenThrowing) {
-            assert instruction.isDebugInstruction() || instruction.isGoto();
-          }
+          // After the throwing instruction only debug instructions and the final jump instruction
+          // is allowed.
+          assert !seenThrowing || instruction.isAllowedAfterThrowingInstruction();
         }
       }
     }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Instruction.java b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
index cd3d513..31a1562 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Instruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
@@ -509,6 +509,10 @@
     return true;
   }
 
+  public boolean isAllowedAfterThrowingInstruction() {
+    return false;
+  }
+
   /**
    * Returns true if this instruction may throw an exception.
    */