Disable class merging from base to feature

Bug: 164937965
Change-Id: I44070d310ceb2e3e277ec2fa4d399a5ce06225ab
diff --git a/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java b/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
index 610104a..74ef8d9 100644
--- a/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
+++ b/src/main/java/com/android/tools/r8/features/FeatureSplitConfiguration.java
@@ -120,7 +120,7 @@
     return !isInFeature(clazz);
   }
 
-  public boolean inSameFeatureOrBase(DexMethod a, DexMethod b){
+  public boolean inSameFeatureOrBase(DexMethod a, DexMethod b) {
     return inSameFeatureOrBase(a.holder, b.holder);
   }
 
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 1de617d..682ad54 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -8,6 +8,7 @@
 import static com.android.tools.r8.ir.code.Invoke.Type.STATIC;
 
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.features.FeatureSplitConfiguration;
 import com.android.tools.r8.graph.AppView;
 import com.android.tools.r8.graph.CfCode;
 import com.android.tools.r8.graph.Code;
@@ -357,10 +358,14 @@
         .map(DexEncodedMember::toReference)
         .noneMatch(appInfo::isPinned);
 
-    if (appView.options().featureSplitConfiguration != null
-        && appView.options().featureSplitConfiguration.isInFeature(sourceClass)) {
+    FeatureSplitConfiguration featureSplitConfiguration =
+        appView.options().featureSplitConfiguration;
+    if (featureSplitConfiguration != null) {
       // TODO(b/141452765): Allow class merging between classes in features.
-      return false;
+      if (featureSplitConfiguration.isInFeature(sourceClass)
+          || featureSplitConfiguration.isInFeature(targetClass)) {
+        return false;
+      }
     }
     if (appView.appServices().allServiceTypes().contains(sourceClass.type)
         && appInfo.isPinned(targetClass.type)) {
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java b/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
index 67e96ce..4ff8f4b 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/VerticalClassMergingAcrossFeatureSplitTest.java
@@ -5,7 +5,6 @@
 package com.android.tools.r8.dexsplitter;
 
 import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.android.tools.r8.NeverClassInline;
@@ -61,8 +60,7 @@
   }
 
   private void inspectBase(CodeInspector inspector) {
-    // TODO(b/164937965): BaseClass should stay in base.
-    assertThat(inspector.clazz(BaseClass.class), not(isPresent()));
+    assertThat(inspector.clazz(BaseClass.class), isPresent());
   }
 
   private void inspectFeature1(CodeInspector inspector) {