diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index 1410247..933cc33 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -328,7 +328,9 @@
     DexItemFactory dexItemFactory = appView.dexItemFactory();
     ProguardIfRule materializedRule = rule.materialize(dexItemFactory, preconditions);
 
-    if (enqueuer.getMode().isInitialTreeShaking() && !rule.isUsed()) {
+    if (enqueuer.getMode().isInitialTreeShaking()
+        && !rule.isUsed()
+        && !rule.isTrivalAllClassMatch()) {
       // We need to abort class inlining of classes that could be matched by the condition of this
       // -if rule.
       ClassInlineRule neverClassInlineRuleForCondition =
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java b/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java
index cdf0264..4c35b96 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardAccessFlags.java
@@ -239,6 +239,10 @@
     return this.flags == ((ProguardAccessFlags) obj).flags;
   }
 
+  public boolean isDefaultFlags() {
+    return flags == 0;
+  }
+
   @Override
   public int hashCode() {
     return flags;
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
index 6099834..01c9118 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationRule.java
@@ -15,6 +15,7 @@
 import com.android.tools.r8.graph.SubtypingInfo;
 import com.android.tools.r8.origin.Origin;
 import com.android.tools.r8.position.Position;
+import com.android.tools.r8.utils.BooleanBox;
 import com.android.tools.r8.utils.IterableUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
@@ -60,6 +61,23 @@
         memberRules);
   }
 
+  public boolean isTrivalAllClassMatch() {
+    BooleanBox booleanBox = new BooleanBox(true);
+    getClassNames()
+        .forEachTypeMatcher(
+            unused -> booleanBox.set(false),
+            proguardTypeMatcher -> !proguardTypeMatcher.isMatchAnyClassPattern());
+    return booleanBox.get()
+        && getClassAnnotations().isEmpty()
+        && getClassAccessFlags().isDefaultFlags()
+        && getNegatedClassAccessFlags().isDefaultFlags()
+        && !getClassTypeNegated()
+        && getClassType() == ProguardClassType.CLASS
+        && getInheritanceAnnotations().isEmpty()
+        && getInheritanceClassName() == null
+        && getMemberRules().isEmpty();
+  }
+
   public boolean isUsed() {
     return used;
   }
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
index a8233bf..f9aef9b 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
@@ -43,6 +43,10 @@
   // Evaluates this matcher on the given type.
   public abstract boolean matches(DexType type);
 
+  public boolean isMatchAnyClassPattern() {
+    return false;
+  }
+
   // Evaluates this matcher on the given type, and on all types that have been merged into the given
   // type, if any.
   public final boolean matches(DexType type, AppView<?> appView) {
@@ -167,6 +171,11 @@
     }
 
     @Override
+    public boolean isMatchAnyClassPattern() {
+      return true;
+    }
+
+    @Override
     public boolean matches(DexType type) {
       wildcard.setCaptured(type.toSourceString());
       return true;
@@ -249,6 +258,11 @@
     }
 
     @Override
+    public boolean isMatchAnyClassPattern() {
+      return true;
+    }
+
+    @Override
     public boolean matches(DexType type) {
       if (type.isClassType()) {
         wildcard.setCaptured(type.toSourceString());
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/PinningStarPatternTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/PinningStarPatternTest.java
index ecb11d3..d65f8bd 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/PinningStarPatternTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/PinningStarPatternTest.java
@@ -49,11 +49,7 @@
 
   @Test
   public void testR8IfStar() throws Exception {
-    // TODO(b/316100042): We should not keep A.class.
-    testKeepRule(
-        "-if class * -keep class **B { *; }",
-        ImmutableList.of(),
-        ImmutableList.of(B.class, TestClass.class, A.class));
+    testKeepRule("-if class * -keep class **B { *; }", EXPECTED_ABSENT, EXPECTED_PRESENT);
   }
 
   @Test
