diff --git a/compiler/packages/babel-plugin-react-compiler/src/HIR/ObjectShape.ts b/compiler/packages/babel-plugin-react-compiler/src/HIR/ObjectShape.ts
index f396ae18b0461..f51768c586b72 100644
--- a/compiler/packages/babel-plugin-react-compiler/src/HIR/ObjectShape.ts
+++ b/compiler/packages/babel-plugin-react-compiler/src/HIR/ObjectShape.ts
@@ -569,7 +569,7 @@ addObject(BUILTIN_SHAPES, BuiltInMixedReadonlyId, [
'flatMap',
addFunction(BUILTIN_SHAPES, [], {
positionalParams: [],
- restParam: Effect.Read,
+ restParam: Effect.ConditionallyMutate,
returnType: {kind: 'Object', shapeId: BuiltInArrayId},
calleeEffect: Effect.ConditionallyMutate,
returnValueKind: ValueKind.Mutable,
@@ -580,7 +580,7 @@ addObject(BUILTIN_SHAPES, BuiltInMixedReadonlyId, [
'filter',
addFunction(BUILTIN_SHAPES, [], {
positionalParams: [],
- restParam: Effect.Read,
+ restParam: Effect.ConditionallyMutate,
returnType: {kind: 'Object', shapeId: BuiltInArrayId},
calleeEffect: Effect.ConditionallyMutate,
returnValueKind: ValueKind.Mutable,
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.expect.md b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.expect.md
deleted file mode 100644
index 1418062c33458..0000000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.expect.md
+++ /dev/null
@@ -1,163 +0,0 @@
-
-## Input
-
-```javascript
-import {
- arrayPush,
- identity,
- makeArray,
- Stringify,
- useFragment,
-} from 'shared-runtime';
-
-/**
- * Bug repro showing why it's invalid for function references to be annotated
- * with a `Read` effect when that reference might lead to the function being
- * invoked.
- *
- * Note that currently, `Array.map` is annotated to have `Read` effects on its
- * operands. This is incorrect as function effects must be replayed when `map`
- * is called
- * - Read: non-aliasing data dependency
- * - Capture: maybe-aliasing data dependency
- * - ConditionallyMutate: maybe-aliasing data dependency; maybe-write / invoke
- * but only if the value is mutable
- *
- * Invalid evaluator result: Found differences in evaluator results Non-forget
- * (expected): (kind: ok)
- *
{"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2],"count":4}
{"item":1}
- * Forget:
- * (kind: ok)
- * {"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2,2,2,2],"count":4}
{"item":1}
- */
-
-function Component({extraJsx}) {
- const x = makeArray();
- const items = useFragment();
- const jsx = items.a.map((item, i) => {
- arrayPush(x, 2);
- return ;
- });
- const offset = jsx.length;
- for (let i = 0; i < extraJsx; i++) {
- jsx.push();
- }
- const count = jsx.length;
- identity(count);
- return (
- <>
-
- {jsx[0]}
- >
- );
-}
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{extraJsx: 0}],
- sequentialRenders: [{extraJsx: 0}, {extraJsx: 1}],
-};
-
-```
-
-## Code
-
-```javascript
-import { c as _c } from "react/compiler-runtime";
-import {
- arrayPush,
- identity,
- makeArray,
- Stringify,
- useFragment,
-} from "shared-runtime";
-
-/**
- * Bug repro showing why it's invalid for function references to be annotated
- * with a `Read` effect when that reference might lead to the function being
- * invoked.
- *
- * Note that currently, `Array.map` is annotated to have `Read` effects on its
- * operands. This is incorrect as function effects must be replayed when `map`
- * is called
- * - Read: non-aliasing data dependency
- * - Capture: maybe-aliasing data dependency
- * - ConditionallyMutate: maybe-aliasing data dependency; maybe-write / invoke
- * but only if the value is mutable
- *
- * Invalid evaluator result: Found differences in evaluator results Non-forget
- * (expected): (kind: ok)
- * {"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2],"count":4}
{"item":1}
- * Forget:
- * (kind: ok)
- * {"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2,2,2,2],"count":4}
{"item":1}
- */
-
-function Component(t0) {
- const $ = _c(9);
- const { extraJsx } = t0;
- let t1;
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
- t1 = makeArray();
- $[0] = t1;
- } else {
- t1 = $[0];
- }
- const x = t1;
- const items = useFragment();
- let jsx;
- if ($[1] !== extraJsx || $[2] !== items.a) {
- jsx = items.a.map((item, i) => {
- arrayPush(x, 2);
- return ;
- });
- const offset = jsx.length;
- for (let i_0 = 0; i_0 < extraJsx; i_0++) {
- jsx.push();
- }
- $[1] = extraJsx;
- $[2] = items.a;
- $[3] = jsx;
- } else {
- jsx = $[3];
- }
-
- const count = jsx.length;
- identity(count);
- let t2;
- if ($[4] !== count) {
- t2 = ;
- $[4] = count;
- $[5] = t2;
- } else {
- t2 = $[5];
- }
- const t3 = jsx[0];
- let t4;
- if ($[6] !== t2 || $[7] !== t3) {
- t4 = (
- <>
- {t2}
- {t3}
- >
- );
- $[6] = t2;
- $[7] = t3;
- $[8] = t4;
- } else {
- t4 = $[8];
- }
- return t4;
-}
-
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{ extraJsx: 0 }],
- sequentialRenders: [{ extraJsx: 0 }, { extraJsx: 1 }],
-};
-
-```
-
\ No newline at end of file
diff --git a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.js b/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.js
deleted file mode 100644
index d038cf6cd38a1..0000000000000
--- a/compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/bug-invalid-mixedreadonly-map-shape.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import {
- arrayPush,
- identity,
- makeArray,
- Stringify,
- useFragment,
-} from 'shared-runtime';
-
-/**
- * Bug repro showing why it's invalid for function references to be annotated
- * with a `Read` effect when that reference might lead to the function being
- * invoked.
- *
- * Note that currently, `Array.map` is annotated to have `Read` effects on its
- * operands. This is incorrect as function effects must be replayed when `map`
- * is called
- * - Read: non-aliasing data dependency
- * - Capture: maybe-aliasing data dependency
- * - ConditionallyMutate: maybe-aliasing data dependency; maybe-write / invoke
- * but only if the value is mutable
- *
- * Invalid evaluator result: Found differences in evaluator results Non-forget
- * (expected): (kind: ok)
- * {"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2],"count":4}
{"item":1}
- * Forget:
- * (kind: ok)
- * {"x":[2,2,2],"count":3}
{"item":1}
- * {"x":[2,2,2,2,2,2],"count":4}
{"item":1}
- */
-
-function Component({extraJsx}) {
- const x = makeArray();
- const items = useFragment();
- const jsx = items.a.map((item, i) => {
- arrayPush(x, 2);
- return ;
- });
- const offset = jsx.length;
- for (let i = 0; i < extraJsx; i++) {
- jsx.push();
- }
- const count = jsx.length;
- identity(count);
- return (
- <>
-
- {jsx[0]}
- >
- );
-}
-export const FIXTURE_ENTRYPOINT = {
- fn: Component,
- params: [{extraJsx: 0}],
- sequentialRenders: [{extraJsx: 0}, {extraJsx: 1}],
-};