Assert no vertically merged classes in IR after lensrewriting

Change-Id: I736b8edbe5aacaaafa9e1680e0e57df93dd146c0
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 964ce8a..cc54a60 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
@@ -4,13 +4,17 @@
 package com.android.tools.r8.ir.code;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfoWithSubtyping;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DebugLocalInfo;
 import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.graph.DexType;
 import com.android.tools.r8.ir.analysis.TypeChecker;
+import com.android.tools.r8.ir.analysis.type.ClassTypeLatticeElement;
 import com.android.tools.r8.ir.analysis.type.TypeLatticeElement;
 import com.android.tools.r8.ir.conversion.IRBuilder;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.shaking.VerticalClassMerger.VerticallyMergedClasses;
 import com.android.tools.r8.utils.CfgPrinter;
 import com.android.tools.r8.utils.InternalOptions;
 import com.google.common.collect.ImmutableList;
@@ -474,6 +478,24 @@
     return true;
   }
 
+  public boolean hasNoVerticallyMergedClasses(AppView<? extends AppInfoWithSubtyping> appView) {
+    VerticallyMergedClasses verticallyMergedClasses = appView.verticallyMergedClasses();
+    if (verticallyMergedClasses == null) {
+      return true;
+    }
+    for (Instruction instruction : instructions()) {
+      if (instruction.outValue != null && instruction.outValue.getTypeLattice().isClassType()) {
+        ClassTypeLatticeElement classTypeLattice =
+            instruction.outValue.getTypeLattice().asClassTypeLatticeElement();
+        assert !verticallyMergedClasses.hasBeenMergedIntoSubtype(classTypeLattice.getClassType());
+        for (DexType itf : classTypeLattice.getInterfaces()) {
+          assert !verticallyMergedClasses.hasBeenMergedIntoSubtype(itf);
+        }
+      }
+    }
+    return true;
+  }
+
   public boolean isConsistentGraph() {
     assert noColorsInUse();
     assert consistentBlockNumbering();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index 959e9b7..772c70c 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -410,6 +410,7 @@
       new TypeAnalysis(appView, method).widening(newSSAValues);
     }
     assert code.isConsistentSSA();
+    assert code.hasNoVerticallyMergedClasses(appView);
   }
 
   // If the given invoke is on the form "invoke-direct A.<init>, v0, ..." and the definition of