Use common supertype when merging instance fields in class merger

Change-Id: I3885990d8690f607e715d88558f5ffd17467efa0
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
index a8b8d30..682da64 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
@@ -8,6 +8,8 @@
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.DexEncodedField;
 import com.android.tools.r8.graph.DexProgramClass;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.DexTypeUtils;
 import com.android.tools.r8.horizontalclassmerging.HorizontalClassMergerGraphLens.Builder;
 import com.android.tools.r8.horizontalclassmerging.policies.SameInstanceFields.InstanceFieldInfo;
 import com.android.tools.r8.utils.IterableUtils;
@@ -149,12 +151,15 @@
 
     DexEncodedField newField;
     if (needsRelaxedType(targetField, sourceFields)) {
+      DexType newFieldType =
+          DexTypeUtils.computeLeastUpperBound(
+              appView,
+              Iterables.transform(
+                  Iterables.concat(IterableUtils.singleton(targetField), sourceFields),
+                  DexEncodedField::getType));
       newField =
           targetField.toTypeSubstitutedField(
-              appView,
-              targetField
-                  .getReference()
-                  .withType(appView.dexItemFactory().objectType, appView.dexItemFactory()));
+              appView, targetField.getReference().withType(newFieldType, appView.dexItemFactory()));
     } else {
       newField = targetField;
     }