Ensure no SET_POSITION_FRAME after default events

Change-Id: I9bd467bde0a7229a3c4b821d00cb533e08afc2ee
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
index 16bf079..cd157e3 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -89,6 +89,10 @@
 
   public abstract void accept(DexDebugEventVisitor visitor);
 
+  public boolean isDefaultEvent() {
+    return false;
+  }
+
   public boolean isPositionFrame() {
     return false;
   }
@@ -639,6 +643,11 @@
     }
 
     @Override
+    public boolean isDefaultEvent() {
+      return true;
+    }
+
+    @Override
     boolean isWritableEvent() {
       return true;
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index e4c29aa..6f25a69 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -121,9 +121,20 @@
         params[i] = (local == null || local.signature != null) ? null : local.name;
       }
     }
+    assert verifySetPositionFramesFollowedByDefaultEvent(events);
     return new EventBasedDebugInfo(startLine, params, events.toArray(DexDebugEvent.EMPTY_ARRAY));
   }
 
+  private static boolean verifySetPositionFramesFollowedByDefaultEvent(List<DexDebugEvent> events) {
+    for (int i = events.size() - 1; i >= 0; i--) {
+      if (events.get(i).isDefaultEvent()) {
+        return true;
+      }
+      assert !events.get(i).isPositionFrame();
+    }
+    return true;
+  }
+
   private void updateBlockEntry(Instruction instruction) {
     assert pendingLocals == null;
     assert !pendingLocalChanges;