Handle field type changes in Proguard -if rules

Bug: 110141157
Change-Id: I063ea31be673f4bda4b21d015ab1456b70bf2fba
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
index a84afb2..b0630ce 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardMemberRule.java
@@ -191,7 +191,7 @@
           break;
         }
         // Type check.
-        if (!getType().matches(originalSignature.type)) {
+        if (!matches(getType(), originalSignature.type, appView)) {
           break;
         }
         // Annotations check
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
index 6205f85..6311791 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
@@ -59,7 +59,6 @@
 }
 
 // TODO(b/110141157):
-// - Add tests where the type of a kept field changes.
 // - Add tests where fields and methods get renamed due to naming conflicts.
 // - Add tests where the type in a implements/extends clause has changed.
 // - Add tests where the then-clause of an -if rule keeps a class that has been merged into another.
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
new file mode 100644
index 0000000..b3494aa
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/MergedFieldTypeTest.java
@@ -0,0 +1,36 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.ifrule.verticalclassmerging;
+
+public class MergedFieldTypeTest extends MergedTypeBaseTest {
+
+  static class TestClass {
+
+    private static A field = new B();
+
+    public static void main(String[] args) {
+      System.out.print(field.getClass().getTypeName());
+    }
+  }
+
+  public MergedFieldTypeTest(Backend backend, boolean enableVerticalClassMerging) {
+    super(backend, enableVerticalClassMerging);
+  }
+
+  @Override
+  public Class<?> getTestClass() {
+    return TestClass.class;
+  }
+
+  @Override
+  public String getConditionForProguardIfRule() {
+    return "-if class **$TestClass { **$A field; }";
+  }
+
+  @Override
+  public String getExpectedStdout() {
+    return B.class.getTypeName();
+  }
+}