diff --git a/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java b/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
index 9994ab1..fc17f07 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepMethodInfo.java
@@ -25,10 +25,12 @@
   }
 
   private final boolean allowParameterTypeStrengthening;
+  private final boolean allowReturnTypeStrengthening;
 
   private KeepMethodInfo(Builder builder) {
     super(builder);
     this.allowParameterTypeStrengthening = builder.isParameterTypeStrengtheningAllowed();
+    this.allowReturnTypeStrengthening = builder.isReturnTypeStrengtheningAllowed();
   }
 
   // This builder is not private as there are known instances where it is safe to modify keep info
@@ -52,6 +54,16 @@
     return allowParameterTypeStrengthening;
   }
 
+  public boolean isReturnTypeStrengtheningAllowed(GlobalKeepInfoConfiguration configuration) {
+    return isOptimizationAllowed(configuration)
+        && isShrinkingAllowed(configuration)
+        && internalIsReturnTypeStrengtheningAllowed();
+  }
+
+  boolean internalIsReturnTypeStrengtheningAllowed() {
+    return allowReturnTypeStrengthening;
+  }
+
   public Joiner joiner() {
     assert !isTop();
     return new Joiner(this);
@@ -74,6 +86,7 @@
   public static class Builder extends KeepInfo.Builder<Builder, KeepMethodInfo> {
 
     private boolean allowParameterTypeStrengthening;
+    private boolean allowReturnTypeStrengthening;
 
     private Builder() {
       super();
@@ -82,6 +95,7 @@
     private Builder(KeepMethodInfo original) {
       super(original);
       allowParameterTypeStrengthening = original.internalIsParameterTypeStrengtheningAllowed();
+      allowReturnTypeStrengthening = original.internalIsReturnTypeStrengtheningAllowed();
     }
 
     public boolean isParameterTypeStrengtheningAllowed() {
@@ -101,6 +115,23 @@
       return setAllowParameterTypeStrengthening(false);
     }
 
+    public boolean isReturnTypeStrengtheningAllowed() {
+      return allowReturnTypeStrengthening;
+    }
+
+    public Builder setAllowReturnTypeStrengthening(boolean allowReturnTypeStrengthening) {
+      this.allowReturnTypeStrengthening = allowReturnTypeStrengthening;
+      return self();
+    }
+
+    public Builder allowReturnTypeStrengthening() {
+      return setAllowReturnTypeStrengthening(true);
+    }
+
+    public Builder disallowReturnTypeStrengthening() {
+      return setAllowReturnTypeStrengthening(false);
+    }
+
     @Override
     public Builder self() {
       return this;
@@ -125,7 +156,8 @@
     boolean internalIsEqualTo(KeepMethodInfo other) {
       return super.internalIsEqualTo(other)
           && isParameterTypeStrengtheningAllowed()
-              == other.internalIsParameterTypeStrengtheningAllowed();
+              == other.internalIsParameterTypeStrengtheningAllowed()
+          && isReturnTypeStrengtheningAllowed() == other.internalIsReturnTypeStrengtheningAllowed();
     }
 
     @Override
@@ -135,12 +167,12 @@
 
     @Override
     public Builder makeTop() {
-      return super.makeTop().disallowParameterTypeStrengthening();
+      return super.makeTop().disallowParameterTypeStrengthening().disallowReturnTypeStrengthening();
     }
 
     @Override
     public Builder makeBottom() {
-      return super.makeBottom().allowParameterTypeStrengthening();
+      return super.makeBottom().allowParameterTypeStrengthening().allowReturnTypeStrengthening();
     }
   }
 
@@ -150,11 +182,20 @@
       super(info.builder());
     }
 
+    public Joiner disallowInlining() {
+      return self();
+    }
+
     public Joiner disallowParameterTypeStrengthening() {
       builder.disallowParameterTypeStrengthening();
       return self();
     }
 
+    public Joiner disallowReturnTypeStrengthening() {
+      builder.disallowReturnTypeStrengthening();
+      return self();
+    }
+
     @Override
     public Joiner asMethodJoiner() {
       return this;
@@ -166,7 +207,10 @@
       return super.merge(joiner)
           .applyIf(
               !joiner.builder.isParameterTypeStrengtheningAllowed(),
-              Joiner::disallowParameterTypeStrengthening);
+              Joiner::disallowParameterTypeStrengthening)
+          .applyIf(
+              !joiner.builder.isReturnTypeStrengtheningAllowed(),
+              Joiner::disallowReturnTypeStrengthening);
     }
 
     @Override
diff --git a/src/main/java/com/android/tools/r8/shaking/NoOptimizationBaseRule.java b/src/main/java/com/android/tools/r8/shaking/NoOptimizationBaseRule.java
new file mode 100644
index 0000000..a397a7e
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/shaking/NoOptimizationBaseRule.java
@@ -0,0 +1,51 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking;
+
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.position.Position;
+import java.util.List;
+
+public abstract class NoOptimizationBaseRule<R extends NoOptimizationBaseRule<R>>
+    extends ProguardConfigurationRule {
+
+  public abstract static class Builder<R extends NoOptimizationBaseRule<R>, B extends Builder<R, B>>
+      extends ProguardConfigurationRule.Builder<R, B> {
+
+    Builder() {
+      super();
+    }
+  }
+
+  NoOptimizationBaseRule(
+      Origin origin,
+      Position position,
+      String source,
+      List<ProguardTypeMatcher> classAnnotations,
+      ProguardAccessFlags classAccessFlags,
+      ProguardAccessFlags negatedClassAccessFlags,
+      boolean classTypeNegated,
+      ProguardClassType classType,
+      ProguardClassNameList classNames,
+      List<ProguardTypeMatcher> inheritanceAnnotations,
+      ProguardTypeMatcher inheritanceClassName,
+      boolean inheritanceIsExtends,
+      List<ProguardMemberRule> memberRules) {
+    super(
+        origin,
+        position,
+        source,
+        classAnnotations,
+        classAccessFlags,
+        negatedClassAccessFlags,
+        classTypeNegated,
+        classType,
+        classNames,
+        inheritanceAnnotations,
+        inheritanceClassName,
+        inheritanceIsExtends,
+        memberRules);
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/shaking/NoParameterTypeStrengtheningRule.java b/src/main/java/com/android/tools/r8/shaking/NoParameterTypeStrengtheningRule.java
index 94cec37..e0b6594 100644
--- a/src/main/java/com/android/tools/r8/shaking/NoParameterTypeStrengtheningRule.java
+++ b/src/main/java/com/android/tools/r8/shaking/NoParameterTypeStrengtheningRule.java
@@ -8,14 +8,15 @@
 import com.android.tools.r8.position.Position;
 import java.util.List;
 
-public class NoParameterTypeStrengtheningRule extends ProguardConfigurationRule {
+public class NoParameterTypeStrengtheningRule
+    extends NoOptimizationBaseRule<NoParameterTypeStrengtheningRule> {
 
   public static final String RULE_NAME = "noparametertypestrengthening";
 
   public static class Builder
-      extends ProguardConfigurationRule.Builder<NoParameterTypeStrengtheningRule, Builder> {
+      extends NoOptimizationBaseRule.Builder<NoParameterTypeStrengtheningRule, Builder> {
 
-    private Builder() {
+    Builder() {
       super();
     }
 
@@ -43,7 +44,7 @@
     }
   }
 
-  private NoParameterTypeStrengtheningRule(
+  NoParameterTypeStrengtheningRule(
       Origin origin,
       Position position,
       String source,
diff --git a/src/main/java/com/android/tools/r8/shaking/NoReturnTypeStrengtheningRule.java b/src/main/java/com/android/tools/r8/shaking/NoReturnTypeStrengtheningRule.java
new file mode 100644
index 0000000..21c6371
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/shaking/NoReturnTypeStrengtheningRule.java
@@ -0,0 +1,85 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking;
+
+import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.position.Position;
+import java.util.List;
+
+public class NoReturnTypeStrengtheningRule
+    extends NoOptimizationBaseRule<NoReturnTypeStrengtheningRule> {
+
+  public static final String RULE_NAME = "noreturntypestrengthening";
+
+  public static class Builder
+      extends NoOptimizationBaseRule.Builder<NoReturnTypeStrengtheningRule, Builder> {
+
+    Builder() {
+      super();
+    }
+
+    @Override
+    public NoReturnTypeStrengtheningRule.Builder self() {
+      return this;
+    }
+
+    @Override
+    public NoReturnTypeStrengtheningRule build() {
+      return new NoReturnTypeStrengtheningRule(
+          origin,
+          getPosition(),
+          source,
+          buildClassAnnotations(),
+          classAccessFlags,
+          negatedClassAccessFlags,
+          classTypeNegated,
+          classType,
+          classNames,
+          buildInheritanceAnnotations(),
+          inheritanceClassName,
+          inheritanceIsExtends,
+          memberRules);
+    }
+  }
+
+  NoReturnTypeStrengtheningRule(
+      Origin origin,
+      Position position,
+      String source,
+      List<ProguardTypeMatcher> classAnnotations,
+      ProguardAccessFlags classAccessFlags,
+      ProguardAccessFlags negatedClassAccessFlags,
+      boolean classTypeNegated,
+      ProguardClassType classType,
+      ProguardClassNameList classNames,
+      List<ProguardTypeMatcher> inheritanceAnnotations,
+      ProguardTypeMatcher inheritanceClassName,
+      boolean inheritanceIsExtends,
+      List<ProguardMemberRule> memberRules) {
+    super(
+        origin,
+        position,
+        source,
+        classAnnotations,
+        classAccessFlags,
+        negatedClassAccessFlags,
+        classTypeNegated,
+        classType,
+        classNames,
+        inheritanceAnnotations,
+        inheritanceClassName,
+        inheritanceIsExtends,
+        memberRules);
+  }
+
+  public static Builder builder() {
+    return new Builder();
+  }
+
+  @Override
+  String typeString() {
+    return RULE_NAME;
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
index 13cabf2..e4774ce 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationParser.java
@@ -501,7 +501,14 @@
           return true;
         }
         if (acceptString(NoParameterTypeStrengtheningRule.RULE_NAME)) {
-          ProguardConfigurationRule rule = parseNoParameterTypeStrengtheningRule(optionStart);
+          ProguardConfigurationRule rule =
+              parseNoOptimizationRule(optionStart, NoParameterTypeStrengtheningRule.builder());
+          configurationBuilder.addRule(rule);
+          return true;
+        }
+        if (acceptString(NoReturnTypeStrengtheningRule.RULE_NAME)) {
+          ProguardConfigurationRule rule =
+              parseNoOptimizationRule(optionStart, NoReturnTypeStrengtheningRule.builder());
           configurationBuilder.addRule(rule);
           return true;
         }
@@ -833,15 +840,14 @@
       return keepRuleBuilder.build();
     }
 
-    private NoParameterTypeStrengtheningRule parseNoParameterTypeStrengtheningRule(Position start)
-        throws ProguardRuleParserException {
-      NoParameterTypeStrengtheningRule.Builder keepRuleBuilder =
-          NoParameterTypeStrengtheningRule.builder().setOrigin(origin).setStart(start);
-      parseClassSpec(keepRuleBuilder, false);
+    private <R extends NoOptimizationBaseRule<R>, B extends NoOptimizationBaseRule.Builder<R, B>>
+        R parseNoOptimizationRule(Position start, B builder) throws ProguardRuleParserException {
+      builder.setOrigin(origin).setStart(start);
+      parseClassSpec(builder, false);
       Position end = getPosition();
-      keepRuleBuilder.setSource(getSourceSnippet(contents, start, end));
-      keepRuleBuilder.setEnd(end);
-      return keepRuleBuilder.build();
+      builder.setSource(getSourceSnippet(contents, start, end));
+      builder.setEnd(end);
+      return builder.build();
     }
 
     private MemberValuePropagationRule parseMemberValuePropagationRule(
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index 80756a1..2368ce8 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -268,6 +268,7 @@
       } else if (rule instanceof InlineRule
           || rule instanceof ConstantArgumentRule
           || rule instanceof NoParameterTypeStrengtheningRule
+          || rule instanceof NoReturnTypeStrengtheningRule
           || rule instanceof UnusedArgumentRule
           || rule instanceof ReprocessMethodRule
           || rule instanceof WhyAreYouNotInliningRule) {
@@ -1251,6 +1252,13 @@
             .asMethodJoiner()
             .disallowParameterTypeStrengthening();
         context.markAsUsed();
+      } else if (context instanceof NoReturnTypeStrengtheningRule) {
+        assert item.isProgramMethod();
+        dependentMinimumKeepInfo
+            .getOrCreateUnconditionalMinimumKeepInfoFor(item.getReference())
+            .asMethodJoiner()
+            .disallowReturnTypeStrengthening();
+        context.markAsUsed();
       } else if (context instanceof MemberValuePropagationRule) {
         switch (((MemberValuePropagationRule) context).getType()) {
           case NEVER:
diff --git a/src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java b/src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java
new file mode 100644
index 0000000..faf89d0
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/NoReturnTypeStrengthening.java
@@ -0,0 +1,11 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+@Target({ElementType.METHOD})
+public @interface NoReturnTypeStrengthening {}
diff --git a/src/test/java/com/android/tools/r8/R8TestBuilder.java b/src/test/java/com/android/tools/r8/R8TestBuilder.java
index 1a4706e..6b68ca2 100644
--- a/src/test/java/com/android/tools/r8/R8TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/R8TestBuilder.java
@@ -19,6 +19,7 @@
 import com.android.tools.r8.shaking.NoFieldTypeStrengtheningRule;
 import com.android.tools.r8.shaking.NoHorizontalClassMergingRule;
 import com.android.tools.r8.shaking.NoParameterTypeStrengtheningRule;
+import com.android.tools.r8.shaking.NoReturnTypeStrengtheningRule;
 import com.android.tools.r8.shaking.NoUnusedInterfaceRemovalRule;
 import com.android.tools.r8.shaking.NoVerticalClassMergingRule;
 import com.android.tools.r8.shaking.ProguardConfiguration;
@@ -514,6 +515,12 @@
             NoParameterTypeStrengtheningRule.RULE_NAME, NoParameterTypeStrengthening.class);
   }
 
+  public T enableNoReturnTypeStrengtheningAnnotations() {
+    return addNoReturnTypeStrengtheningAnnotation()
+        .addInternalMatchAnnotationOnMethodRule(
+            NoReturnTypeStrengtheningRule.RULE_NAME, NoReturnTypeStrengthening.class);
+  }
+
   public T enableNoUnusedInterfaceRemovalAnnotations() {
     return addNoUnusedInterfaceRemovalAnnotations()
         .addInternalMatchInterfaceRule(
diff --git a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
index 9ed8247..d4b3ecf 100644
--- a/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestShrinkerBuilder.java
@@ -470,6 +470,10 @@
     return addTestingAnnotation(NoParameterTypeStrengthening.class);
   }
 
+  public final T addNoReturnTypeStrengtheningAnnotation() {
+    return addTestingAnnotation(NoReturnTypeStrengthening.class);
+  }
+
   public final T addNoUnusedInterfaceRemovalAnnotations() {
     return addTestingAnnotation(NoUnusedInterfaceRemoval.class);
   }
