diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
index 3ae95b1..62b2fd9 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetBuilder.java
@@ -306,6 +306,11 @@
       return;
     }
     for (DexEncodedMethod encodedMethod : clazz.virtualMethods()) {
+      // If the method has a body, it may have side effects. Don't do bottom-up propagation.
+      if (encodedMethod.hasCode()) {
+        assert !encodedMethod.shouldNotHaveCode();
+        continue;
+      }
       propagateAssumeRules(clazz.type, encodedMethod.method, subTypes, noSideEffects);
       propagateAssumeRules(clazz.type, encodedMethod.method, subTypes, assumedValues);
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
index 93dc5c6..86a77a5 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationTest.java
@@ -15,7 +15,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
-
 @RunWith(Parameterized.class)
 public class AssumenosideeffectsPropagationTest extends TestBase {
   private static final Class<?> MAIN = SubsUser.class;
@@ -159,21 +158,10 @@
     void verbose(String message);
   }
 
-  static class Base1 implements Itf {
-    @Override
-    public void info(String message) {
-      System.out.println("[Base1, info]: " + message);
-    }
-
-    @Override
-    public void debug(String message) {
-      System.out.println("[Base1, debug]: " + message);
-    }
-
-    @Override
-    public void verbose(String message) {
-      System.out.println("[Base1, verbose]: " + message);
-    }
+  static abstract class Base1 implements Itf {
+    public abstract void info(String message);
+    public abstract void debug(String message);
+    public abstract void verbose(String message);
   }
 
   static class Sub1 extends Base1 {
@@ -183,6 +171,11 @@
     }
 
     @Override
+    public void debug(String message) {
+      System.out.println("[Base1, debug]: " + message);
+    }
+
+    @Override
     public void verbose(String message) {
       System.out.println("[Sub1, verbose]: " + message);
     }
@@ -195,12 +188,23 @@
     }
 
     @Override
+    public void debug(String message) {
+      System.out.println("[Base1, debug]: " + message);
+    }
+
+    @Override
     public void verbose(String message) {
       System.out.println("[Sub2, verbose]: " + message);
     }
   }
 
-  static class Base2 implements Itf {
+  static abstract class Base2 implements Itf {
+    public abstract void info(String message);
+    public abstract void debug(String message);
+    public abstract void verbose(String message);
+  }
+
+  static class AnotherSub1 extends Base2 {
     @Override
     public void info(String message) {
       System.out.println("[Base2, info]: " + message);
@@ -208,18 +212,6 @@
 
     @Override
     public void debug(String message) {
-      System.out.println("[Base2, debug]: " + message);
-    }
-
-    @Override
-    public void verbose(String message) {
-      System.out.println("[Base2, verbose]: " + message);
-    }
-  }
-
-  static class AnotherSub1 extends Base2 {
-    @Override
-    public void debug(String message) {
       System.out.println("[AnotherSub1, debug]: " + message);
     }
 
@@ -231,6 +223,11 @@
 
   static class AnotherSub2 extends Base2 {
     @Override
+    public void info(String message) {
+      System.out.println("[Base2, info]: " + message);
+    }
+
+    @Override
     public void debug(String message) {
       System.out.println("[AnotherSub2, debug]: " + message);
     }
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationWithSuperCallTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationWithSuperCallTest.java
index e063df1..ba5da12 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationWithSuperCallTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsPropagationWithSuperCallTest.java
@@ -50,10 +50,7 @@
       switch (this) {
         case SPECIFIC_RULES:
         case NON_SPECIFIC_RULES_WITH_EXTENDS:
-          // TODO(b/133208961): If DelegateSub1#debug is not explicitly defined, we would not
-          //   propagate the rule, and thus the output would
-          // return JVM_OUTPUT;
-          return OUTPUT_WITHOUT_MESSAGES;
+          return JVM_OUTPUT;
         default:
           throw new Unreachable();
       }
diff --git a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
index 24edc40..8928015 100644
--- a/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/assumenosideeffects/AssumenosideeffectsVisibleMethodsTest.java
@@ -92,8 +92,7 @@
           return StringUtils.lines(
               "Expect to catch RuntimeException",
               "[LibraryBase]: as long as LibraryBase is specified",
-              // TODO(b/137938214): Should we do synthetic propagation up to ProgramBase#debug() ?
-              // "[ProgramBase]: as long as ProgramBase is specified"
+              "[ProgramBase]: as long as ProgramBase is specified",
               "The end");
         case RULE_WITH_EXTENDS_LIB_BASE:
           return StringUtils.lines(
@@ -104,8 +103,7 @@
           return StringUtils.lines(
               "Expect to catch RuntimeException",
               "[LibraryBase]: as long as LibraryBase is specified",
-              // TODO(b/137938214): Should we do synthetic propagation up to ProgramBase#debug() ?
-              // "[ProgramBase]: as long as ProgramBase is specified"
+              "[ProgramBase]: as long as ProgramBase is specified",
               "The end");
       }
       throw new Unreachable();
