Add keep edge from subclass to super type.

Bug: 135474075
Change-Id: I299e332a160e91e43b67d91c129c3351f83a627f
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 9a297b2..4bf7fb3 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -919,6 +919,10 @@
             scopedMethodsForLiveTypes.computeIfAbsent(
                 holder.superType, ignore -> new ScopedDexMethodSet());
         seen.setParent(seenForSuper);
+        DexClass holderSuper = appView.definitionFor(holder.superType);
+        if (holderSuper != null && holderSuper.isProgramClass()) {
+          registerType(holder.superType, KeepReason.reachableFromLiveType(type));
+        }
         markTypeAsLive(holder.superType, seenForSuper);
         if (holder.isNotProgramClass()) {
           // Library classes may only extend other implement library classes.
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptSubclassKeepsSuperTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptSubclassKeepsSuperTest.java
index 6bc7cb5..72bd54e 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptSubclassKeepsSuperTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/KeptSubclassKeepsSuperTest.java
@@ -11,7 +11,6 @@
 import com.android.tools.r8.TestParametersBuilder;
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.references.ClassReference;
 import com.android.tools.r8.references.Reference;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.graphinspector.GraphInspector;
@@ -46,7 +45,6 @@
             .enableMergeAnnotations()
             .addProgramClasses(CLASS, Foo.class, Bar.class)
             .addKeepMainRule(CLASS)
-            .noMinification()
             .run(parameters.getRuntime(), CLASS)
             .assertSuccessWithOutput(EXPECTED)
             .graphInspector();
@@ -58,10 +56,8 @@
     QueryNode fooClass = inspector.clazz(Reference.classFromClass(Foo.class));
     fooClass.assertPresent();
 
-    ClassReference barClassRef = Reference.classFromClass(Bar.class);
-    QueryNode barClass = inspector.clazz(barClassRef);
-    // TODO(b/135474075): No edge is reported for the super class!
-    barClass.assertAbsent();
+    QueryNode barClass = inspector.clazz(Reference.classFromClass(Bar.class));
+    barClass.assertPresent().assertKeptBy(fooClass);
   }
 
   @NeverMerge