diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
index be806b4..8777128 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
@@ -11,6 +11,7 @@
 import static com.android.tools.r8.ir.code.Opcodes.RETURN;
 
 import com.android.tools.r8.graph.DexEncodedMethod;
+import com.android.tools.r8.ir.code.AssumeAndCheckCastAliasedValueConfiguration;
 import com.android.tools.r8.ir.code.CheckCast;
 import com.android.tools.r8.ir.code.IRCode;
 import com.android.tools.r8.ir.code.Instruction;
@@ -155,10 +156,27 @@
   private static boolean analyzeInvoke(InvokeMethodWithReceiver invoke) {
     // All of the forwarded arguments of the enclosing method must be in the same argument position.
     for (int argumentIndex = 0; argumentIndex < invoke.arguments().size(); argumentIndex++) {
-      Value argument = invoke.getArgument(argumentIndex);
-      if (argument.isArgument()
-          && argumentIndex != argument.getDefinition().asArgument().getIndex()) {
+      Value argument = invoke.getArgument(argumentIndex).getAliasedValue();
+      if (argument.isPhi()
+          || (argument.isArgument()
+              && argumentIndex != argument.getDefinition().asArgument().getIndex())) {
         return false;
+      } else {
+        // Validate that besides argument values only check-cast of argument values are allowed at
+        // their argument position.
+        assert argument.isArgument()
+            || (argument.getDefinition().isCheckCast()
+                && invoke
+                    .getArgument(argumentIndex)
+                    .getAliasedValue(AssumeAndCheckCastAliasedValueConfiguration.getInstance())
+                    .isArgument()
+                && invoke
+                        .getArgument(argumentIndex)
+                        .getAliasedValue(AssumeAndCheckCastAliasedValueConfiguration.getInstance())
+                        .getDefinition()
+                        .asArgument()
+                        .getIndex()
+                    == argumentIndex);
       }
     }
     return true;
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeAfterAssumeNoSideEffectsTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeAfterAssumeNoSideEffectsTest.java
index 3a42f58..4fb933d 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeAfterAssumeNoSideEffectsTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/hoisting/BridgeAfterAssumeNoSideEffectsTest.java
@@ -59,12 +59,7 @@
         .enableNoMethodStaticizingAnnotations()
         .enableInliningAnnotations()
         .run(parameters.getRuntime(), TestClass.class)
-        .applyIf(
-            parameters.isCfRuntime(),
-            // TODO(b/295576241): R8 should not generate invalid code.
-            r -> r.assertFailureWithErrorThatThrows(VerifyError.class),
-            // TODO(b/296558387): Art should also reject this code.
-            r -> r.assertSuccessWithOutput(EXPECTED_OUTPUT));
+        .assertSuccessWithOutput(EXPECTED_OUTPUT);
   }
 
   static class TestClass {
